<?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=Stevel</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=Stevel"/>
	<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Special:Contributions/Stevel"/>
	<updated>2026-05-01T07:56:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11761</id>
		<title>Test Point Testing in C/C++</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11761"/>
		<updated>2009-12-28T23:30:45Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* System Observation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Test Points provide an easy-to-use framework for solving a class of common yet difficult unit testing problems: &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;How can I observe and verify activity that occurs in another thread?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A couple of common scenarios that become a lot more testable via test points include:&lt;br /&gt;
* Verification of State machine operation&lt;br /&gt;
* Verification of asynchronous callbacks&lt;br /&gt;
* Verification of communication drivers&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Source Code ==&lt;br /&gt;
Target threads are instrumented simply by placing lines of the following form into the source code:&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
/* a test point with no payload */&lt;br /&gt;
srTEST_POINT(&amp;quot;first test point&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
/* a test point with binary payload */&lt;br /&gt;
srTEST_POINT_DATA(&amp;quot;second test point&amp;quot;, myData, sizeofMyData);&lt;br /&gt;
&lt;br /&gt;
/* a test point with string payload */&lt;br /&gt;
srTEST_POINT_STR1(&amp;quot;third test point&amp;quot;, &amp;quot;payload with format string %d&amp;quot;, myVar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When this code is executed it broadcasts a message via the STRIDE runtime which is detected by the test (IM) thread if it is currently looking for test points (i.e. in a srTEST_POINT_WAIT()). We refer to this as a &#039;&#039;test point hit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Test Code ==&lt;br /&gt;
The test code is instrumented using these steps:&lt;br /&gt;
&lt;br /&gt;
# Specify an expectation set consisting of expected (i.e. the test points that are expected to be hit) and optionally unexpected (i.e. the test points that are not expected to be hit) test points&lt;br /&gt;
# Register the expectation set with the STRIDE runtime&lt;br /&gt;
# If the activity we will be obvserving/verifying needs to be started (e.g. a state machine gets kicked off) this should be done after here&lt;br /&gt;
# Wait for the expectation set to be satisfied or a timeout to occur&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void tf_testpoint_wait(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expected set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;ACTIVE&amp;quot;}, &lt;br /&gt;
        {&amp;quot;IDLE&amp;quot;},&lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* specify unexpected set */&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {&amp;quot;INVALID&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* register the expectation set with the STRIDE */&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, unexpected, srTEST_POINT_EXPECT_UNORDERED, &amp;amp;handle);&lt;br /&gt;
&lt;br /&gt;
  /* start your asynchronous operation */&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
  /* wait for expectation set to be satisfied or a timeout to occur */&lt;br /&gt;
  srTEST_POINT_WAIT(handle, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
#pragma scl_test_flist(“testfunc”, tf_testpoint_wait)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Test Point ===&lt;br /&gt;
To specify a test point you should use one of the following macros:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Test Point&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT(&#039;&#039;label&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA(&#039;&#039;label&#039;&#039;, &#039;&#039;data&#039;&#039;, &#039;&#039;size&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;data&#039;&#039; is a pointer to a byte sequence&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;size&#039;&#039; is the size of the &#039;&#039;data&#039;&#039; in bytes&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_STR(&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_STR[1..4](&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;, ...)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated format string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;...&#039;&#039; variable list (up to 4) matching the format string&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Set ===&lt;br /&gt;
An expectation set is specified with an array of &#039;&#039;&#039;srTestPointExpect_t&#039;&#039;&#039; structures and a second optional array of &#039;&#039;&#039;srTestPointUnexpect_t&#039;&#039;&#039; structures. &lt;br /&gt;
&lt;br /&gt;
==== Expected Array ====&lt;br /&gt;
srTestPointExpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *          label;&lt;br /&gt;
    /* optional, count specifies the number of times the test point is expected to be hit */ &lt;br /&gt;
    srDWORD                 count;&lt;br /&gt;
    /* optional, predicate function to use for payload validation against user data */ &lt;br /&gt;
    srTestPointPredicate_t  predicate;&lt;br /&gt;
    /* optional, user data to validate the payload against */&lt;br /&gt;
    void *                  user;&lt;br /&gt;
} srTestPointExpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointExpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;count&#039;&#039;, &#039;&#039;predicate&#039;&#039; and &#039;&#039;user&#039;&#039; members may be omitted in the array declaration (they will be automatically set to 0 by the compiler)&lt;br /&gt;
* A &#039;&#039;count&#039;&#039; value of either 0 or 1 is interpreted as 1 &lt;br /&gt;
* The &#039;&#039;count&#039;&#039; could be set as &amp;quot;0 or more&amp;quot; by using the special srTEST_POINT_ANY_COUNT symbolic constant  &lt;br /&gt;
* A &#039;&#039;predicate&#039;&#039; value 0 indicates that any associated with a test point payload will be ignored.&lt;br /&gt;
* A &#039;&#039;user&#039;&#039; value 0 indicates that there is no user data associated with this test point&lt;br /&gt;
* The &#039;&#039;label&#039;&#039; could be specified to &#039;&#039;everything else&#039;&#039; relative to the &#039;&#039;&#039;unexpected&#039;&#039;&#039; array by using the special symbolic constant srTEST_POINT_EVERYTHING_ELSE. When used it is required to be the one end only (non zero) entry in the array.&lt;br /&gt;
&lt;br /&gt;
==== Unexpected Array ====&lt;br /&gt;
srTestPointUnexpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *          label;&lt;br /&gt;
} srTestPointUnexpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointUnexpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;label&#039;&#039; could be specified to &#039;&#039;everything else&#039;&#039; relative to the &#039;&#039;&#039;expected&#039;&#039;&#039; array by using the special symbolic constant srTEST_POINT_EVERYTHING_ELSE. When used it is required to be the one end only (non zero) entry in the array.&lt;br /&gt;
&lt;br /&gt;
==== srTestPointPredicate_t ====&lt;br /&gt;
When defining the expectation set per entry a payload validation predicate function could be specified. The signature of it should match the following type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef srBYTE (*srTestPointPredicate_t)(const srTestPoint_t* ptTP, void* pvUser);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptTP &lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to the currently processed Test Point.&lt;br /&gt;
|-&lt;br /&gt;
| pvUser&lt;br /&gt;
| Input &lt;br /&gt;
| Pointer to opaque user data associated with an entry in the expectation set.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBYTE &lt;br /&gt;
| srTRUE on success, srFALSE on failure, srIGNORE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039;&lt;br /&gt;
* As part of the standard STRIDE distribution there are three predefined function predicate helpers:&lt;br /&gt;
** srTestPointMemCmp - byte comparison&lt;br /&gt;
** srTestPointStrCmp - string case sensitive comparison&lt;br /&gt;
** srTestPointStrCaseCmp - string case insensitive comparison&lt;br /&gt;
&lt;br /&gt;
==== srTestPointExpect ====&lt;br /&gt;
The srTestPointExpect() routine is used to register an expectation set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointExpect(srTestPointExpect_t* ptExpected, &lt;br /&gt;
                         srTestPointUnexpect_t* ptUnexpected, &lt;br /&gt;
                         srTestPointExpectOrder_e eOrder, &lt;br /&gt;
                         srWORD* pwHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptExpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an expectated array.&lt;br /&gt;
|-&lt;br /&gt;
| ptUnexpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an unexpectated array. This is optional and could be set srNULL.&lt;br /&gt;
|-&lt;br /&gt;
| eOrder &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation order. Possible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_ORDERED - the test points are expected to be hit exactly in the defined order &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - the test points could to be hit in any order&lt;br /&gt;
|-&lt;br /&gt;
| pwHandle &lt;br /&gt;
| Output &lt;br /&gt;
| Handle that represents the registered expectation set&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Validation ===&lt;br /&gt;
The behavior of the test point processing is as follows:&lt;br /&gt;
* If an unexpected test point is seen under test point wait, the expectation is failed and the wait is abandoned immediately.&lt;br /&gt;
* If an expected test point is seen under test point wait, the behavior varies depending on whether the expectation with the matching label includes a predicate function.&lt;br /&gt;
** Without Predicate, the expectation is unconditionally considered “hit,” and the expected count is decremented. If the expected count reaches zero, the expectation is considered satisfied. (In other words, the behavior is identical to an expectation with a predicate where the predicate returns srTRUE.)&lt;br /&gt;
** With Predicate, the predicate function determines the behavior depending on its return value. The predicate function is passed a copy of the data supplied with the original test point hit (along with other information) with which to determine its desired behavior. Depending on the return value:&lt;br /&gt;
*** srTRUE – the corresponding expectation is considered satisfied&lt;br /&gt;
*** srFALSE – the test point wait is abandoned and test case associated with the wait is set to fail status&lt;br /&gt;
*** srIGNORE – the test point hit is ignored&lt;br /&gt;
* If the expectation is not satisfied for the specified timeout period the expectation is considered failed. This rule has several exceptions:&lt;br /&gt;
** [[#Negative_Expectations|Negative Expectations]], don&#039;t expect some test points to be hit.&lt;br /&gt;
** [[#System_Observation|System Observation]], want to collect all test points.&lt;br /&gt;
&lt;br /&gt;
==== srTestPointWait ====&lt;br /&gt;
The srTestPointWait() routine is used to wait for the expectation to be satisfied. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointWait(srWORD wHandle, &lt;br /&gt;
                       srTestCaseHandle_t tTestCase, &lt;br /&gt;
                       srDWORD dwTimeout);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| wHandle &lt;br /&gt;
| Input&lt;br /&gt;
| Handle to a registered expectation set.&lt;br /&gt;
|-&lt;br /&gt;
| tTestCase &lt;br /&gt;
| Input &lt;br /&gt;
| Handle to a test case where the results would be reported. srTEST_CASE_DEFAULT can be used for the default test case.&lt;br /&gt;
|-&lt;br /&gt;
| dwTimeout &lt;br /&gt;
| Input &lt;br /&gt;
| Timeout value in milliseconds; 0 means just check without waiting.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For convinience the following macros are provided:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define srTEST_POINT_WAIT(handle, timeout) srTestPointWait(handle, srTEST_CASE_DEFAULT, timeout)&lt;br /&gt;
#define srTEST_POINT_CHECK(handle) srTestPointWait(handle, srTEST_CASE_DEFAULT, 0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The test thread blocks until either the expectation set is satisfied or the timeout elapses.&lt;br /&gt;
* All test points hit during the wait (both expected and unexpected) are added to the test report as testcase comments&lt;br /&gt;
* If an unexpected test point is encountered (either out of order or not in the expectation set), or the timeout period elapses before the expectation set is satisfied the current test immediately fails&lt;br /&gt;
* Once the wait is over (whether the expectation set has been satisfied or there has been a test failure), the current expectation set is automatically unregistered from the STRIDE runtime and the handle is released&lt;br /&gt;
* if you want to return immediately from a test case if expectation fails then make the check/wait call an argument to &amp;lt;tt&amp;gt;[[Pass/Fail_Macros#Boolean_Macros|srASSERT_TRUE()]]&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
=== Known Expectations ===&lt;br /&gt;
In reality the amount of Test Points in an application under test is mutch larger then the number of test points of interest. Basically, the known expectation set is limited and consists of {A, B, C, D, X, Y, Z}, where some are expected and other unexpected, and everything else is unknown and should be ignored. In other words:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; &lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| A, B, C, D &lt;br /&gt;
| X, Y, Z &lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_known(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;A&amp;quot;}, &lt;br /&gt;
        {&amp;quot;B&amp;quot;}, &lt;br /&gt;
        {&amp;quot;C&amp;quot;}, &lt;br /&gt;
        {&amp;quot;D&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {&amp;quot;X&amp;quot;}, &lt;br /&gt;
        {&amp;quot;Y&amp;quot;}, &lt;br /&gt;
        {&amp;quot;Z&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Full Expectations ===&lt;br /&gt;
If the whole application under test is known, the expectation set consists of all test points, where a limited set is expected and consists of {A, B, C, D} and the rest are unexpected, then nothing should be ignored. In other words:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| A, B, C, D &lt;br /&gt;
| &amp;quot;everything else&amp;quot; &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special &amp;lt;tt&amp;gt;srTEST_POINT_EVERYTHING_ELSE&amp;lt;/tt&amp;gt; constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_all(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;A&amp;quot;}, &lt;br /&gt;
        {&amp;quot;B&amp;quot;}, &lt;br /&gt;
        {&amp;quot;C&amp;quot;}, &lt;br /&gt;
        {&amp;quot;D&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0 or More Expectations ===&lt;br /&gt;
In some cases the expected test point pattern is something like:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS&lt;br /&gt;
...&lt;br /&gt;
* END&lt;br /&gt;
where any number (0 or more) of PROGRESS are expected but doesn&#039;t matter how many.&lt;br /&gt;
&lt;br /&gt;
To specify that use the special &amp;lt;tt&amp;gt;srTEST_POINT_ANY_COUNT&amp;lt;/tt&amp;gt; constant:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_any(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload Expectations ===&lt;br /&gt;
In some cases the expected test point may carry a payload that needs to be validated against a user defined data:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS_BIN({1,2,3})&lt;br /&gt;
* PROGRESS_STR(&amp;quot;abc&amp;quot;)&lt;br /&gt;
* END&lt;br /&gt;
where PROGRESS_BIN is expected to carry a binary payload and PROGRESS_STR - string payload.&lt;br /&gt;
&lt;br /&gt;
To express that specify a predicate and user defined data:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_payload(void)&lt;br /&gt;
{&lt;br /&gt;
  srBYTE pyData[] = {1, 2, 3};&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS_BIN&amp;quot;, srTestPointMemCmp, pyData}, &lt;br /&gt;
        {&amp;quot;PROGRESS_STR&amp;quot;, srTestPointStrCmp, &amp;quot;abc&amp;quot;}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Negative Expectations === &lt;br /&gt;
&#039;&#039;&#039;Case 1.&#039;&#039;&#039; Need to run a scenario and verify that NONE of the test points are hit.&lt;br /&gt;
&lt;br /&gt;
Basically in that case everything is unexpected:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;quot;everything&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special srTEST_POINT_EVERYTHING_ELSE constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t* pExpected = srNULL;&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 2.&#039;&#039;&#039; Need to verify that a subset of test points are not hit and everything else should be ignored.&lt;br /&gt;
&lt;br /&gt;
Basically in that case a limited set of test points is unexpected:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| X, Z, Y&lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_some(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t* pExpected = srNULL;&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {&amp;quot;X&amp;quot;},&lt;br /&gt;
        {&amp;quot;Y&amp;quot;},&lt;br /&gt;
        {&amp;quot;Z&amp;quot;},&lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 3.&#039;&#039;&#039; Need to verify that a subset of test points are not hit but everything else is expected.&lt;br /&gt;
&lt;br /&gt;
Basically in that case a limited set of test points is unexpected:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
| X, Z, Y&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_some(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {&amp;quot;X&amp;quot;},&lt;br /&gt;
        {&amp;quot;Y&amp;quot;},&lt;br /&gt;
        {&amp;quot;Z&amp;quot;},&lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System Observation === &lt;br /&gt;
If want to collect all test points universally for purely investigation/diagnosis, not testing, then everything is expected, In other words:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;everything&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special srTEST_POINT_EVERYTHING_ELSE constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t* pUnexpected = srNULL;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Test Units]]&lt;br /&gt;
[[Category:Testing]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11760</id>
		<title>Test Point Testing in C/C++</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11760"/>
		<updated>2009-12-28T23:29:48Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Negative Expectations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Test Points provide an easy-to-use framework for solving a class of common yet difficult unit testing problems: &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;How can I observe and verify activity that occurs in another thread?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A couple of common scenarios that become a lot more testable via test points include:&lt;br /&gt;
* Verification of State machine operation&lt;br /&gt;
* Verification of asynchronous callbacks&lt;br /&gt;
* Verification of communication drivers&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Source Code ==&lt;br /&gt;
Target threads are instrumented simply by placing lines of the following form into the source code:&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
/* a test point with no payload */&lt;br /&gt;
srTEST_POINT(&amp;quot;first test point&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
/* a test point with binary payload */&lt;br /&gt;
srTEST_POINT_DATA(&amp;quot;second test point&amp;quot;, myData, sizeofMyData);&lt;br /&gt;
&lt;br /&gt;
/* a test point with string payload */&lt;br /&gt;
srTEST_POINT_STR1(&amp;quot;third test point&amp;quot;, &amp;quot;payload with format string %d&amp;quot;, myVar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When this code is executed it broadcasts a message via the STRIDE runtime which is detected by the test (IM) thread if it is currently looking for test points (i.e. in a srTEST_POINT_WAIT()). We refer to this as a &#039;&#039;test point hit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Test Code ==&lt;br /&gt;
The test code is instrumented using these steps:&lt;br /&gt;
&lt;br /&gt;
# Specify an expectation set consisting of expected (i.e. the test points that are expected to be hit) and optionally unexpected (i.e. the test points that are not expected to be hit) test points&lt;br /&gt;
# Register the expectation set with the STRIDE runtime&lt;br /&gt;
# If the activity we will be obvserving/verifying needs to be started (e.g. a state machine gets kicked off) this should be done after here&lt;br /&gt;
# Wait for the expectation set to be satisfied or a timeout to occur&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void tf_testpoint_wait(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expected set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;ACTIVE&amp;quot;}, &lt;br /&gt;
        {&amp;quot;IDLE&amp;quot;},&lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* specify unexpected set */&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {&amp;quot;INVALID&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* register the expectation set with the STRIDE */&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, unexpected, srTEST_POINT_EXPECT_UNORDERED, &amp;amp;handle);&lt;br /&gt;
&lt;br /&gt;
  /* start your asynchronous operation */&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
  /* wait for expectation set to be satisfied or a timeout to occur */&lt;br /&gt;
  srTEST_POINT_WAIT(handle, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
#pragma scl_test_flist(“testfunc”, tf_testpoint_wait)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Test Point ===&lt;br /&gt;
To specify a test point you should use one of the following macros:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Test Point&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT(&#039;&#039;label&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA(&#039;&#039;label&#039;&#039;, &#039;&#039;data&#039;&#039;, &#039;&#039;size&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;data&#039;&#039; is a pointer to a byte sequence&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;size&#039;&#039; is the size of the &#039;&#039;data&#039;&#039; in bytes&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_STR(&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_STR[1..4](&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;, ...)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated format string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;...&#039;&#039; variable list (up to 4) matching the format string&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Set ===&lt;br /&gt;
An expectation set is specified with an array of &#039;&#039;&#039;srTestPointExpect_t&#039;&#039;&#039; structures and a second optional array of &#039;&#039;&#039;srTestPointUnexpect_t&#039;&#039;&#039; structures. &lt;br /&gt;
&lt;br /&gt;
==== Expected Array ====&lt;br /&gt;
srTestPointExpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *          label;&lt;br /&gt;
    /* optional, count specifies the number of times the test point is expected to be hit */ &lt;br /&gt;
    srDWORD                 count;&lt;br /&gt;
    /* optional, predicate function to use for payload validation against user data */ &lt;br /&gt;
    srTestPointPredicate_t  predicate;&lt;br /&gt;
    /* optional, user data to validate the payload against */&lt;br /&gt;
    void *                  user;&lt;br /&gt;
} srTestPointExpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointExpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;count&#039;&#039;, &#039;&#039;predicate&#039;&#039; and &#039;&#039;user&#039;&#039; members may be omitted in the array declaration (they will be automatically set to 0 by the compiler)&lt;br /&gt;
* A &#039;&#039;count&#039;&#039; value of either 0 or 1 is interpreted as 1 &lt;br /&gt;
* The &#039;&#039;count&#039;&#039; could be set as &amp;quot;0 or more&amp;quot; by using the special srTEST_POINT_ANY_COUNT symbolic constant  &lt;br /&gt;
* A &#039;&#039;predicate&#039;&#039; value 0 indicates that any associated with a test point payload will be ignored.&lt;br /&gt;
* A &#039;&#039;user&#039;&#039; value 0 indicates that there is no user data associated with this test point&lt;br /&gt;
* The &#039;&#039;label&#039;&#039; could be specified to &#039;&#039;everything else&#039;&#039; relative to the &#039;&#039;&#039;unexpected&#039;&#039;&#039; array by using the special symbolic constant srTEST_POINT_EVERYTHING_ELSE. When used it is required to be the one end only (non zero) entry in the array.&lt;br /&gt;
&lt;br /&gt;
==== Unexpected Array ====&lt;br /&gt;
srTestPointUnexpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *          label;&lt;br /&gt;
} srTestPointUnexpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointUnexpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;label&#039;&#039; could be specified to &#039;&#039;everything else&#039;&#039; relative to the &#039;&#039;&#039;expected&#039;&#039;&#039; array by using the special symbolic constant srTEST_POINT_EVERYTHING_ELSE. When used it is required to be the one end only (non zero) entry in the array.&lt;br /&gt;
&lt;br /&gt;
==== srTestPointPredicate_t ====&lt;br /&gt;
When defining the expectation set per entry a payload validation predicate function could be specified. The signature of it should match the following type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef srBYTE (*srTestPointPredicate_t)(const srTestPoint_t* ptTP, void* pvUser);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptTP &lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to the currently processed Test Point.&lt;br /&gt;
|-&lt;br /&gt;
| pvUser&lt;br /&gt;
| Input &lt;br /&gt;
| Pointer to opaque user data associated with an entry in the expectation set.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBYTE &lt;br /&gt;
| srTRUE on success, srFALSE on failure, srIGNORE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039;&lt;br /&gt;
* As part of the standard STRIDE distribution there are three predefined function predicate helpers:&lt;br /&gt;
** srTestPointMemCmp - byte comparison&lt;br /&gt;
** srTestPointStrCmp - string case sensitive comparison&lt;br /&gt;
** srTestPointStrCaseCmp - string case insensitive comparison&lt;br /&gt;
&lt;br /&gt;
==== srTestPointExpect ====&lt;br /&gt;
The srTestPointExpect() routine is used to register an expectation set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointExpect(srTestPointExpect_t* ptExpected, &lt;br /&gt;
                         srTestPointUnexpect_t* ptUnexpected, &lt;br /&gt;
                         srTestPointExpectOrder_e eOrder, &lt;br /&gt;
                         srWORD* pwHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptExpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an expectated array.&lt;br /&gt;
|-&lt;br /&gt;
| ptUnexpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an unexpectated array. This is optional and could be set srNULL.&lt;br /&gt;
|-&lt;br /&gt;
| eOrder &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation order. Possible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_ORDERED - the test points are expected to be hit exactly in the defined order &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - the test points could to be hit in any order&lt;br /&gt;
|-&lt;br /&gt;
| pwHandle &lt;br /&gt;
| Output &lt;br /&gt;
| Handle that represents the registered expectation set&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Validation ===&lt;br /&gt;
The behavior of the test point processing is as follows:&lt;br /&gt;
* If an unexpected test point is seen under test point wait, the expectation is failed and the wait is abandoned immediately.&lt;br /&gt;
* If an expected test point is seen under test point wait, the behavior varies depending on whether the expectation with the matching label includes a predicate function.&lt;br /&gt;
** Without Predicate, the expectation is unconditionally considered “hit,” and the expected count is decremented. If the expected count reaches zero, the expectation is considered satisfied. (In other words, the behavior is identical to an expectation with a predicate where the predicate returns srTRUE.)&lt;br /&gt;
** With Predicate, the predicate function determines the behavior depending on its return value. The predicate function is passed a copy of the data supplied with the original test point hit (along with other information) with which to determine its desired behavior. Depending on the return value:&lt;br /&gt;
*** srTRUE – the corresponding expectation is considered satisfied&lt;br /&gt;
*** srFALSE – the test point wait is abandoned and test case associated with the wait is set to fail status&lt;br /&gt;
*** srIGNORE – the test point hit is ignored&lt;br /&gt;
* If the expectation is not satisfied for the specified timeout period the expectation is considered failed. This rule has several exceptions:&lt;br /&gt;
** [[#Negative_Expectations|Negative Expectations]], don&#039;t expect some test points to be hit.&lt;br /&gt;
** [[#System_Observation|System Observation]], want to collect all test points.&lt;br /&gt;
&lt;br /&gt;
==== srTestPointWait ====&lt;br /&gt;
The srTestPointWait() routine is used to wait for the expectation to be satisfied. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointWait(srWORD wHandle, &lt;br /&gt;
                       srTestCaseHandle_t tTestCase, &lt;br /&gt;
                       srDWORD dwTimeout);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| wHandle &lt;br /&gt;
| Input&lt;br /&gt;
| Handle to a registered expectation set.&lt;br /&gt;
|-&lt;br /&gt;
| tTestCase &lt;br /&gt;
| Input &lt;br /&gt;
| Handle to a test case where the results would be reported. srTEST_CASE_DEFAULT can be used for the default test case.&lt;br /&gt;
|-&lt;br /&gt;
| dwTimeout &lt;br /&gt;
| Input &lt;br /&gt;
| Timeout value in milliseconds; 0 means just check without waiting.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For convinience the following macros are provided:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define srTEST_POINT_WAIT(handle, timeout) srTestPointWait(handle, srTEST_CASE_DEFAULT, timeout)&lt;br /&gt;
#define srTEST_POINT_CHECK(handle) srTestPointWait(handle, srTEST_CASE_DEFAULT, 0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The test thread blocks until either the expectation set is satisfied or the timeout elapses.&lt;br /&gt;
* All test points hit during the wait (both expected and unexpected) are added to the test report as testcase comments&lt;br /&gt;
* If an unexpected test point is encountered (either out of order or not in the expectation set), or the timeout period elapses before the expectation set is satisfied the current test immediately fails&lt;br /&gt;
* Once the wait is over (whether the expectation set has been satisfied or there has been a test failure), the current expectation set is automatically unregistered from the STRIDE runtime and the handle is released&lt;br /&gt;
* if you want to return immediately from a test case if expectation fails then make the check/wait call an argument to &amp;lt;tt&amp;gt;[[Pass/Fail_Macros#Boolean_Macros|srASSERT_TRUE()]]&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
=== Known Expectations ===&lt;br /&gt;
In reality the amount of Test Points in an application under test is mutch larger then the number of test points of interest. Basically, the known expectation set is limited and consists of {A, B, C, D, X, Y, Z}, where some are expected and other unexpected, and everything else is unknown and should be ignored. In other words:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; &lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| A, B, C, D &lt;br /&gt;
| X, Y, Z &lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_known(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;A&amp;quot;}, &lt;br /&gt;
        {&amp;quot;B&amp;quot;}, &lt;br /&gt;
        {&amp;quot;C&amp;quot;}, &lt;br /&gt;
        {&amp;quot;D&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {&amp;quot;X&amp;quot;}, &lt;br /&gt;
        {&amp;quot;Y&amp;quot;}, &lt;br /&gt;
        {&amp;quot;Z&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Full Expectations ===&lt;br /&gt;
If the whole application under test is known, the expectation set consists of all test points, where a limited set is expected and consists of {A, B, C, D} and the rest are unexpected, then nothing should be ignored. In other words:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| A, B, C, D &lt;br /&gt;
| &amp;quot;everything else&amp;quot; &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special &amp;lt;tt&amp;gt;srTEST_POINT_EVERYTHING_ELSE&amp;lt;/tt&amp;gt; constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_all(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;A&amp;quot;}, &lt;br /&gt;
        {&amp;quot;B&amp;quot;}, &lt;br /&gt;
        {&amp;quot;C&amp;quot;}, &lt;br /&gt;
        {&amp;quot;D&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0 or More Expectations ===&lt;br /&gt;
In some cases the expected test point pattern is something like:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS&lt;br /&gt;
...&lt;br /&gt;
* END&lt;br /&gt;
where any number (0 or more) of PROGRESS are expected but doesn&#039;t matter how many.&lt;br /&gt;
&lt;br /&gt;
To specify that use the special &amp;lt;tt&amp;gt;srTEST_POINT_ANY_COUNT&amp;lt;/tt&amp;gt; constant:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_any(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload Expectations ===&lt;br /&gt;
In some cases the expected test point may carry a payload that needs to be validated against a user defined data:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS_BIN({1,2,3})&lt;br /&gt;
* PROGRESS_STR(&amp;quot;abc&amp;quot;)&lt;br /&gt;
* END&lt;br /&gt;
where PROGRESS_BIN is expected to carry a binary payload and PROGRESS_STR - string payload.&lt;br /&gt;
&lt;br /&gt;
To express that specify a predicate and user defined data:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_payload(void)&lt;br /&gt;
{&lt;br /&gt;
  srBYTE pyData[] = {1, 2, 3};&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS_BIN&amp;quot;, srTestPointMemCmp, pyData}, &lt;br /&gt;
        {&amp;quot;PROGRESS_STR&amp;quot;, srTestPointStrCmp, &amp;quot;abc&amp;quot;}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Negative Expectations === &lt;br /&gt;
&#039;&#039;&#039;Case 1.&#039;&#039;&#039; Need to run a scenario and verify that NONE of the test points are hit.&lt;br /&gt;
&lt;br /&gt;
Basically in that case everything is unexpected:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;quot;everything&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special srTEST_POINT_EVERYTHING_ELSE constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t* pExpected = srNULL;&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 2.&#039;&#039;&#039; Need to verify that a subset of test points are not hit and everything else should be ignored.&lt;br /&gt;
&lt;br /&gt;
Basically in that case a limited set of test points is unexpected:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| X, Z, Y&lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_some(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t* pExpected = srNULL;&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {&amp;quot;X&amp;quot;},&lt;br /&gt;
        {&amp;quot;Y&amp;quot;},&lt;br /&gt;
        {&amp;quot;Z&amp;quot;},&lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 3.&#039;&#039;&#039; Need to verify that a subset of test points are not hit but everything else is expected.&lt;br /&gt;
&lt;br /&gt;
Basically in that case a limited set of test points is unexpected:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
| X, Z, Y&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_some(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {&amp;quot;X&amp;quot;},&lt;br /&gt;
        {&amp;quot;Y&amp;quot;},&lt;br /&gt;
        {&amp;quot;Z&amp;quot;},&lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System Observation === &lt;br /&gt;
If want to collect all test points universally for purely investigation/diagnosis, not testing, then everything is expected, In other words:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;everything&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special srTEST_POINT_EVERYTHING_ELSE constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected = srNULL;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Test Units]]&lt;br /&gt;
[[Category:Testing]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11759</id>
		<title>Test Point Testing in C/C++</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11759"/>
		<updated>2009-12-28T19:36:08Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Negative Expectations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Test Points provide an easy-to-use framework for solving a class of common yet difficult unit testing problems: &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;How can I observe and verify activity that occurs in another thread?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A couple of common scenarios that become a lot more testable via test points include:&lt;br /&gt;
* Verification of State machine operation&lt;br /&gt;
* Verification of asynchronous callbacks&lt;br /&gt;
* Verification of communication drivers&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Source Code ==&lt;br /&gt;
Target threads are instrumented simply by placing lines of the following form into the source code:&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
/* a test point with no payload */&lt;br /&gt;
srTEST_POINT(&amp;quot;first test point&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
/* a test point with binary payload */&lt;br /&gt;
srTEST_POINT_DATA(&amp;quot;second test point&amp;quot;, myData, sizeofMyData);&lt;br /&gt;
&lt;br /&gt;
/* a test point with string payload */&lt;br /&gt;
srTEST_POINT_STR1(&amp;quot;third test point&amp;quot;, &amp;quot;payload with format string %d&amp;quot;, myVar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When this code is executed it broadcasts a message via the STRIDE runtime which is detected by the test (IM) thread if it is currently looking for test points (i.e. in a srTEST_POINT_WAIT()). We refer to this as a &#039;&#039;test point hit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Test Code ==&lt;br /&gt;
The test code is instrumented using these steps:&lt;br /&gt;
&lt;br /&gt;
# Specify an expectation set consisting of expected (i.e. the test points that are expected to be hit) and optionally unexpected (i.e. the test points that are not expected to be hit) test points&lt;br /&gt;
# Register the expectation set with the STRIDE runtime&lt;br /&gt;
# If the activity we will be obvserving/verifying needs to be started (e.g. a state machine gets kicked off) this should be done after here&lt;br /&gt;
# Wait for the expectation set to be satisfied or a timeout to occur&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void tf_testpoint_wait(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expected set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;ACTIVE&amp;quot;}, &lt;br /&gt;
        {&amp;quot;IDLE&amp;quot;},&lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* specify unexpected set */&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {&amp;quot;INVALID&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* register the expectation set with the STRIDE */&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, unexpected, srTEST_POINT_EXPECT_UNORDERED, &amp;amp;handle);&lt;br /&gt;
&lt;br /&gt;
  /* start your asynchronous operation */&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
  /* wait for expectation set to be satisfied or a timeout to occur */&lt;br /&gt;
  srTEST_POINT_WAIT(handle, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
#pragma scl_test_flist(“testfunc”, tf_testpoint_wait)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Test Point ===&lt;br /&gt;
To specify a test point you should use one of the following macros:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Test Point&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT(&#039;&#039;label&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA(&#039;&#039;label&#039;&#039;, &#039;&#039;data&#039;&#039;, &#039;&#039;size&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;data&#039;&#039; is a pointer to a byte sequence&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;size&#039;&#039; is the size of the &#039;&#039;data&#039;&#039; in bytes&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_STR(&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_STR[1..4](&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;, ...)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated format string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;...&#039;&#039; variable list (up to 4) matching the format string&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Set ===&lt;br /&gt;
An expectation set is specified with an array of &#039;&#039;&#039;srTestPointExpect_t&#039;&#039;&#039; structures and a second optional array of &#039;&#039;&#039;srTestPointUnexpect_t&#039;&#039;&#039; structures. &lt;br /&gt;
&lt;br /&gt;
==== Expected Array ====&lt;br /&gt;
srTestPointExpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *          label;&lt;br /&gt;
    /* optional, count specifies the number of times the test point is expected to be hit */ &lt;br /&gt;
    srDWORD                 count;&lt;br /&gt;
    /* optional, predicate function to use for payload validation against user data */ &lt;br /&gt;
    srTestPointPredicate_t  predicate;&lt;br /&gt;
    /* optional, user data to validate the payload against */&lt;br /&gt;
    void *                  user;&lt;br /&gt;
} srTestPointExpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointExpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;count&#039;&#039;, &#039;&#039;predicate&#039;&#039; and &#039;&#039;user&#039;&#039; members may be omitted in the array declaration (they will be automatically set to 0 by the compiler)&lt;br /&gt;
* A &#039;&#039;count&#039;&#039; value of either 0 or 1 is interpreted as 1 &lt;br /&gt;
* The &#039;&#039;count&#039;&#039; could be set as &amp;quot;0 or more&amp;quot; by using the special srTEST_POINT_ANY_COUNT symbolic constant  &lt;br /&gt;
* A &#039;&#039;predicate&#039;&#039; value 0 indicates that any associated with a test point payload will be ignored.&lt;br /&gt;
* A &#039;&#039;user&#039;&#039; value 0 indicates that there is no user data associated with this test point&lt;br /&gt;
* The &#039;&#039;label&#039;&#039; could be specified to &#039;&#039;everything else&#039;&#039; relative to the &#039;&#039;&#039;unexpected&#039;&#039;&#039; array by using the special symbolic constant srTEST_POINT_EVERYTHING_ELSE. When used it is required to be the one end only (non zero) entry in the array.&lt;br /&gt;
&lt;br /&gt;
==== Unexpected Array ====&lt;br /&gt;
srTestPointUnexpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *          label;&lt;br /&gt;
} srTestPointUnexpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointUnexpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;label&#039;&#039; could be specified to &#039;&#039;everything else&#039;&#039; relative to the &#039;&#039;&#039;expected&#039;&#039;&#039; array by using the special symbolic constant srTEST_POINT_EVERYTHING_ELSE. When used it is required to be the one end only (non zero) entry in the array.&lt;br /&gt;
&lt;br /&gt;
==== srTestPointPredicate_t ====&lt;br /&gt;
When defining the expectation set per entry a payload validation predicate function could be specified. The signature of it should match the following type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef srBYTE (*srTestPointPredicate_t)(const srTestPoint_t* ptTP, void* pvUser);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptTP &lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to the currently processed Test Point.&lt;br /&gt;
|-&lt;br /&gt;
| pvUser&lt;br /&gt;
| Input &lt;br /&gt;
| Pointer to opaque user data associated with an entry in the expectation set.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBYTE &lt;br /&gt;
| srTRUE on success, srFALSE on failure, srIGNORE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039;&lt;br /&gt;
* As part of the standard STRIDE distribution there are three predefined function predicate helpers:&lt;br /&gt;
** srTestPointMemCmp - byte comparison&lt;br /&gt;
** srTestPointStrCmp - string case sensitive comparison&lt;br /&gt;
** srTestPointStrCaseCmp - string case insensitive comparison&lt;br /&gt;
&lt;br /&gt;
==== srTestPointExpect ====&lt;br /&gt;
The srTestPointExpect() routine is used to register an expectation set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointExpect(srTestPointExpect_t* ptExpected, &lt;br /&gt;
                         srTestPointUnexpect_t* ptUnexpected, &lt;br /&gt;
                         srTestPointExpectOrder_e eOrder, &lt;br /&gt;
                         srWORD* pwHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptExpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an expectated array.&lt;br /&gt;
|-&lt;br /&gt;
| ptUnexpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an unexpectated array. This is optional and could be set srNULL.&lt;br /&gt;
|-&lt;br /&gt;
| eOrder &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation order. Possible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_ORDERED - the test points are expected to be hit exactly in the defined order &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - the test points could to be hit in any order&lt;br /&gt;
|-&lt;br /&gt;
| pwHandle &lt;br /&gt;
| Output &lt;br /&gt;
| Handle that represents the registered expectation set&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Validation ===&lt;br /&gt;
The behavior of the test point processing is as follows:&lt;br /&gt;
* If an unexpected test point is seen under test point wait, the expectation is failed and the wait is abandoned immediately.&lt;br /&gt;
* If an expected test point is seen under test point wait, the behavior varies depending on whether the expectation with the matching label includes a predicate function.&lt;br /&gt;
** Without Predicate, the expectation is unconditionally considered “hit,” and the expected count is decremented. If the expected count reaches zero, the expectation is considered satisfied. (In other words, the behavior is identical to an expectation with a predicate where the predicate returns srTRUE.)&lt;br /&gt;
** With Predicate, the predicate function determines the behavior depending on its return value. The predicate function is passed a copy of the data supplied with the original test point hit (along with other information) with which to determine its desired behavior. Depending on the return value:&lt;br /&gt;
*** srTRUE – the corresponding expectation is considered satisfied&lt;br /&gt;
*** srFALSE – the test point wait is abandoned and test case associated with the wait is set to fail status&lt;br /&gt;
*** srIGNORE – the test point hit is ignored&lt;br /&gt;
* If the expectation is not satisfied for the specified timeout period the expectation is considered failed. This rule has several exceptions:&lt;br /&gt;
** [[#Negative_Expectations|Negative Expectations]], don&#039;t expect some test points to be hit.&lt;br /&gt;
** [[#System_Observation|System Observation]], want to collect all test points.&lt;br /&gt;
&lt;br /&gt;
==== srTestPointWait ====&lt;br /&gt;
The srTestPointWait() routine is used to wait for the expectation to be satisfied. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointWait(srWORD wHandle, &lt;br /&gt;
                       srTestCaseHandle_t tTestCase, &lt;br /&gt;
                       srDWORD dwTimeout);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| wHandle &lt;br /&gt;
| Input&lt;br /&gt;
| Handle to a registered expectation set.&lt;br /&gt;
|-&lt;br /&gt;
| tTestCase &lt;br /&gt;
| Input &lt;br /&gt;
| Handle to a test case where the results would be reported. srTEST_CASE_DEFAULT can be used for the default test case.&lt;br /&gt;
|-&lt;br /&gt;
| dwTimeout &lt;br /&gt;
| Input &lt;br /&gt;
| Timeout value in milliseconds; 0 means just check without waiting.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For convinience the following macros are provided:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define srTEST_POINT_WAIT(handle, timeout) srTestPointWait(handle, srTEST_CASE_DEFAULT, timeout)&lt;br /&gt;
#define srTEST_POINT_CHECK(handle) srTestPointWait(handle, srTEST_CASE_DEFAULT, 0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The test thread blocks until either the expectation set is satisfied or the timeout elapses.&lt;br /&gt;
* All test points hit during the wait (both expected and unexpected) are added to the test report as testcase comments&lt;br /&gt;
* If an unexpected test point is encountered (either out of order or not in the expectation set), or the timeout period elapses before the expectation set is satisfied the current test immediately fails&lt;br /&gt;
* Once the wait is over (whether the expectation set has been satisfied or there has been a test failure), the current expectation set is automatically unregistered from the STRIDE runtime and the handle is released&lt;br /&gt;
* if you want to return immediately from a test case if expectation fails then make the check/wait call an argument to &amp;lt;tt&amp;gt;[[Pass/Fail_Macros#Boolean_Macros|srASSERT_TRUE()]]&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
=== Known Expectations ===&lt;br /&gt;
In reality the amount of Test Points in an application under test is mutch larger then the number of test points of interest. Basically, the known expectation set is limited and consists of {A, B, C, D, X, Y, Z}, where some are expected and other unexpected, and everything else is unknown and should be ignored. In other words:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; &lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| A, B, C, D &lt;br /&gt;
| X, Y, Z &lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_known(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;A&amp;quot;}, &lt;br /&gt;
        {&amp;quot;B&amp;quot;}, &lt;br /&gt;
        {&amp;quot;C&amp;quot;}, &lt;br /&gt;
        {&amp;quot;D&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {&amp;quot;X&amp;quot;}, &lt;br /&gt;
        {&amp;quot;Y&amp;quot;}, &lt;br /&gt;
        {&amp;quot;Z&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Full Expectations ===&lt;br /&gt;
If the whole application under test is known, the expectation set consists of all test points, where a limited set is expected and consists of {A, B, C, D} and the rest are unexpected, then nothing should be ignored. In other words:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| A, B, C, D &lt;br /&gt;
| &amp;quot;everything else&amp;quot; &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special &amp;lt;tt&amp;gt;srTEST_POINT_EVERYTHING_ELSE&amp;lt;/tt&amp;gt; constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_all(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;A&amp;quot;}, &lt;br /&gt;
        {&amp;quot;B&amp;quot;}, &lt;br /&gt;
        {&amp;quot;C&amp;quot;}, &lt;br /&gt;
        {&amp;quot;D&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0 or More Expectations ===&lt;br /&gt;
In some cases the expected test point pattern is something like:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS&lt;br /&gt;
...&lt;br /&gt;
* END&lt;br /&gt;
where any number (0 or more) of PROGRESS are expected but doesn&#039;t matter how many.&lt;br /&gt;
&lt;br /&gt;
To specify that use the special &amp;lt;tt&amp;gt;srTEST_POINT_ANY_COUNT&amp;lt;/tt&amp;gt; constant:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_any(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload Expectations ===&lt;br /&gt;
In some cases the expected test point may carry a payload that needs to be validated against a user defined data:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS_BIN({1,2,3})&lt;br /&gt;
* PROGRESS_STR(&amp;quot;abc&amp;quot;)&lt;br /&gt;
* END&lt;br /&gt;
where PROGRESS_BIN is expected to carry a binary payload and PROGRESS_STR - string payload.&lt;br /&gt;
&lt;br /&gt;
To express that specify a predicate and user defined data:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_payload(void)&lt;br /&gt;
{&lt;br /&gt;
  srBYTE pyData[] = {1, 2, 3};&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS_BIN&amp;quot;, srTestPointMemCmp, pyData}, &lt;br /&gt;
        {&amp;quot;PROGRESS_STR&amp;quot;, srTestPointStrCmp, &amp;quot;abc&amp;quot;}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Negative Expectations === &lt;br /&gt;
&#039;&#039;&#039;Case 1.&#039;&#039;&#039; Need to run a scenario and verify that NONE of the test points are hit.&lt;br /&gt;
&lt;br /&gt;
Basically in that case everything is unexpected:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;quot;everything&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special srTEST_POINT_EVERYTHING_ELSE constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected = srNULL;&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 2.&#039;&#039;&#039; Need to verify that a subset of test points are not hit and everything else should be ignored.&lt;br /&gt;
&lt;br /&gt;
Basically in that case a limited set of test points is unexpected:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| X, Z, Y&lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_some(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected = srNULL;&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {&amp;quot;X&amp;quot;},&lt;br /&gt;
        {&amp;quot;Y&amp;quot;},&lt;br /&gt;
        {&amp;quot;Z&amp;quot;},&lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 3.&#039;&#039;&#039; Need to verify that a subset of test points are not hit but everything else is expected.&lt;br /&gt;
&lt;br /&gt;
Basically in that case a limited set of test points is unexpected:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
| X, Z, Y&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_some(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {&amp;quot;X&amp;quot;},&lt;br /&gt;
        {&amp;quot;Y&amp;quot;},&lt;br /&gt;
        {&amp;quot;Z&amp;quot;},&lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System Observation === &lt;br /&gt;
If want to collect all test points universally for purely investigation/diagnosis, not testing, then everything is expected, In other words:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;everything&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special srTEST_POINT_EVERYTHING_ELSE constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected = srNULL;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Test Units]]&lt;br /&gt;
[[Category:Testing]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11758</id>
		<title>Test Point Testing in C/C++</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11758"/>
		<updated>2009-12-28T19:34:12Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* System Observation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Test Points provide an easy-to-use framework for solving a class of common yet difficult unit testing problems: &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;How can I observe and verify activity that occurs in another thread?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A couple of common scenarios that become a lot more testable via test points include:&lt;br /&gt;
* Verification of State machine operation&lt;br /&gt;
* Verification of asynchronous callbacks&lt;br /&gt;
* Verification of communication drivers&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Source Code ==&lt;br /&gt;
Target threads are instrumented simply by placing lines of the following form into the source code:&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
/* a test point with no payload */&lt;br /&gt;
srTEST_POINT(&amp;quot;first test point&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
/* a test point with binary payload */&lt;br /&gt;
srTEST_POINT_DATA(&amp;quot;second test point&amp;quot;, myData, sizeofMyData);&lt;br /&gt;
&lt;br /&gt;
/* a test point with string payload */&lt;br /&gt;
srTEST_POINT_STR1(&amp;quot;third test point&amp;quot;, &amp;quot;payload with format string %d&amp;quot;, myVar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When this code is executed it broadcasts a message via the STRIDE runtime which is detected by the test (IM) thread if it is currently looking for test points (i.e. in a srTEST_POINT_WAIT()). We refer to this as a &#039;&#039;test point hit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Test Code ==&lt;br /&gt;
The test code is instrumented using these steps:&lt;br /&gt;
&lt;br /&gt;
# Specify an expectation set consisting of expected (i.e. the test points that are expected to be hit) and optionally unexpected (i.e. the test points that are not expected to be hit) test points&lt;br /&gt;
# Register the expectation set with the STRIDE runtime&lt;br /&gt;
# If the activity we will be obvserving/verifying needs to be started (e.g. a state machine gets kicked off) this should be done after here&lt;br /&gt;
# Wait for the expectation set to be satisfied or a timeout to occur&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void tf_testpoint_wait(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expected set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;ACTIVE&amp;quot;}, &lt;br /&gt;
        {&amp;quot;IDLE&amp;quot;},&lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* specify unexpected set */&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {&amp;quot;INVALID&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* register the expectation set with the STRIDE */&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, unexpected, srTEST_POINT_EXPECT_UNORDERED, &amp;amp;handle);&lt;br /&gt;
&lt;br /&gt;
  /* start your asynchronous operation */&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
  /* wait for expectation set to be satisfied or a timeout to occur */&lt;br /&gt;
  srTEST_POINT_WAIT(handle, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
#pragma scl_test_flist(“testfunc”, tf_testpoint_wait)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Test Point ===&lt;br /&gt;
To specify a test point you should use one of the following macros:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Test Point&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT(&#039;&#039;label&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA(&#039;&#039;label&#039;&#039;, &#039;&#039;data&#039;&#039;, &#039;&#039;size&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;data&#039;&#039; is a pointer to a byte sequence&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;size&#039;&#039; is the size of the &#039;&#039;data&#039;&#039; in bytes&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_STR(&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_STR[1..4](&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;, ...)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated format string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;...&#039;&#039; variable list (up to 4) matching the format string&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Set ===&lt;br /&gt;
An expectation set is specified with an array of &#039;&#039;&#039;srTestPointExpect_t&#039;&#039;&#039; structures and a second optional array of &#039;&#039;&#039;srTestPointUnexpect_t&#039;&#039;&#039; structures. &lt;br /&gt;
&lt;br /&gt;
==== Expected Array ====&lt;br /&gt;
srTestPointExpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *          label;&lt;br /&gt;
    /* optional, count specifies the number of times the test point is expected to be hit */ &lt;br /&gt;
    srDWORD                 count;&lt;br /&gt;
    /* optional, predicate function to use for payload validation against user data */ &lt;br /&gt;
    srTestPointPredicate_t  predicate;&lt;br /&gt;
    /* optional, user data to validate the payload against */&lt;br /&gt;
    void *                  user;&lt;br /&gt;
} srTestPointExpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointExpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;count&#039;&#039;, &#039;&#039;predicate&#039;&#039; and &#039;&#039;user&#039;&#039; members may be omitted in the array declaration (they will be automatically set to 0 by the compiler)&lt;br /&gt;
* A &#039;&#039;count&#039;&#039; value of either 0 or 1 is interpreted as 1 &lt;br /&gt;
* The &#039;&#039;count&#039;&#039; could be set as &amp;quot;0 or more&amp;quot; by using the special srTEST_POINT_ANY_COUNT symbolic constant  &lt;br /&gt;
* A &#039;&#039;predicate&#039;&#039; value 0 indicates that any associated with a test point payload will be ignored.&lt;br /&gt;
* A &#039;&#039;user&#039;&#039; value 0 indicates that there is no user data associated with this test point&lt;br /&gt;
* The &#039;&#039;label&#039;&#039; could be specified to &#039;&#039;everything else&#039;&#039; relative to the &#039;&#039;&#039;unexpected&#039;&#039;&#039; array by using the special symbolic constant srTEST_POINT_EVERYTHING_ELSE. When used it is required to be the one end only (non zero) entry in the array.&lt;br /&gt;
&lt;br /&gt;
==== Unexpected Array ====&lt;br /&gt;
srTestPointUnexpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *          label;&lt;br /&gt;
} srTestPointUnexpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointUnexpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;label&#039;&#039; could be specified to &#039;&#039;everything else&#039;&#039; relative to the &#039;&#039;&#039;expected&#039;&#039;&#039; array by using the special symbolic constant srTEST_POINT_EVERYTHING_ELSE. When used it is required to be the one end only (non zero) entry in the array.&lt;br /&gt;
&lt;br /&gt;
==== srTestPointPredicate_t ====&lt;br /&gt;
When defining the expectation set per entry a payload validation predicate function could be specified. The signature of it should match the following type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef srBYTE (*srTestPointPredicate_t)(const srTestPoint_t* ptTP, void* pvUser);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptTP &lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to the currently processed Test Point.&lt;br /&gt;
|-&lt;br /&gt;
| pvUser&lt;br /&gt;
| Input &lt;br /&gt;
| Pointer to opaque user data associated with an entry in the expectation set.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBYTE &lt;br /&gt;
| srTRUE on success, srFALSE on failure, srIGNORE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039;&lt;br /&gt;
* As part of the standard STRIDE distribution there are three predefined function predicate helpers:&lt;br /&gt;
** srTestPointMemCmp - byte comparison&lt;br /&gt;
** srTestPointStrCmp - string case sensitive comparison&lt;br /&gt;
** srTestPointStrCaseCmp - string case insensitive comparison&lt;br /&gt;
&lt;br /&gt;
==== srTestPointExpect ====&lt;br /&gt;
The srTestPointExpect() routine is used to register an expectation set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointExpect(srTestPointExpect_t* ptExpected, &lt;br /&gt;
                         srTestPointUnexpect_t* ptUnexpected, &lt;br /&gt;
                         srTestPointExpectOrder_e eOrder, &lt;br /&gt;
                         srWORD* pwHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptExpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an expectated array.&lt;br /&gt;
|-&lt;br /&gt;
| ptUnexpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an unexpectated array. This is optional and could be set srNULL.&lt;br /&gt;
|-&lt;br /&gt;
| eOrder &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation order. Possible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_ORDERED - the test points are expected to be hit exactly in the defined order &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - the test points could to be hit in any order&lt;br /&gt;
|-&lt;br /&gt;
| pwHandle &lt;br /&gt;
| Output &lt;br /&gt;
| Handle that represents the registered expectation set&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Validation ===&lt;br /&gt;
The behavior of the test point processing is as follows:&lt;br /&gt;
* If an unexpected test point is seen under test point wait, the expectation is failed and the wait is abandoned immediately.&lt;br /&gt;
* If an expected test point is seen under test point wait, the behavior varies depending on whether the expectation with the matching label includes a predicate function.&lt;br /&gt;
** Without Predicate, the expectation is unconditionally considered “hit,” and the expected count is decremented. If the expected count reaches zero, the expectation is considered satisfied. (In other words, the behavior is identical to an expectation with a predicate where the predicate returns srTRUE.)&lt;br /&gt;
** With Predicate, the predicate function determines the behavior depending on its return value. The predicate function is passed a copy of the data supplied with the original test point hit (along with other information) with which to determine its desired behavior. Depending on the return value:&lt;br /&gt;
*** srTRUE – the corresponding expectation is considered satisfied&lt;br /&gt;
*** srFALSE – the test point wait is abandoned and test case associated with the wait is set to fail status&lt;br /&gt;
*** srIGNORE – the test point hit is ignored&lt;br /&gt;
* If the expectation is not satisfied for the specified timeout period the expectation is considered failed. This rule has several exceptions:&lt;br /&gt;
** [[#Negative_Expectations|Negative Expectations]], don&#039;t expect some test points to be hit.&lt;br /&gt;
** [[#System_Observation|System Observation]], want to collect all test points.&lt;br /&gt;
&lt;br /&gt;
==== srTestPointWait ====&lt;br /&gt;
The srTestPointWait() routine is used to wait for the expectation to be satisfied. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointWait(srWORD wHandle, &lt;br /&gt;
                       srTestCaseHandle_t tTestCase, &lt;br /&gt;
                       srDWORD dwTimeout);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| wHandle &lt;br /&gt;
| Input&lt;br /&gt;
| Handle to a registered expectation set.&lt;br /&gt;
|-&lt;br /&gt;
| tTestCase &lt;br /&gt;
| Input &lt;br /&gt;
| Handle to a test case where the results would be reported. srTEST_CASE_DEFAULT can be used for the default test case.&lt;br /&gt;
|-&lt;br /&gt;
| dwTimeout &lt;br /&gt;
| Input &lt;br /&gt;
| Timeout value in milliseconds; 0 means just check without waiting.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For convinience the following macros are provided:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define srTEST_POINT_WAIT(handle, timeout) srTestPointWait(handle, srTEST_CASE_DEFAULT, timeout)&lt;br /&gt;
#define srTEST_POINT_CHECK(handle) srTestPointWait(handle, srTEST_CASE_DEFAULT, 0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The test thread blocks until either the expectation set is satisfied or the timeout elapses.&lt;br /&gt;
* All test points hit during the wait (both expected and unexpected) are added to the test report as testcase comments&lt;br /&gt;
* If an unexpected test point is encountered (either out of order or not in the expectation set), or the timeout period elapses before the expectation set is satisfied the current test immediately fails&lt;br /&gt;
* Once the wait is over (whether the expectation set has been satisfied or there has been a test failure), the current expectation set is automatically unregistered from the STRIDE runtime and the handle is released&lt;br /&gt;
* if you want to return immediately from a test case if expectation fails then make the check/wait call an argument to &amp;lt;tt&amp;gt;[[Pass/Fail_Macros#Boolean_Macros|srASSERT_TRUE()]]&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
=== Known Expectations ===&lt;br /&gt;
In reality the amount of Test Points in an application under test is mutch larger then the number of test points of interest. Basically, the known expectation set is limited and consists of {A, B, C, D, X, Y, Z}, where some are expected and other unexpected, and everything else is unknown and should be ignored. In other words:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; &lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| A, B, C, D &lt;br /&gt;
| X, Y, Z &lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_known(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;A&amp;quot;}, &lt;br /&gt;
        {&amp;quot;B&amp;quot;}, &lt;br /&gt;
        {&amp;quot;C&amp;quot;}, &lt;br /&gt;
        {&amp;quot;D&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {&amp;quot;X&amp;quot;}, &lt;br /&gt;
        {&amp;quot;Y&amp;quot;}, &lt;br /&gt;
        {&amp;quot;Z&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Full Expectations ===&lt;br /&gt;
If the whole application under test is known, the expectation set consists of all test points, where a limited set is expected and consists of {A, B, C, D} and the rest are unexpected, then nothing should be ignored. In other words:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| A, B, C, D &lt;br /&gt;
| &amp;quot;everything else&amp;quot; &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special &amp;lt;tt&amp;gt;srTEST_POINT_EVERYTHING_ELSE&amp;lt;/tt&amp;gt; constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_all(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;A&amp;quot;}, &lt;br /&gt;
        {&amp;quot;B&amp;quot;}, &lt;br /&gt;
        {&amp;quot;C&amp;quot;}, &lt;br /&gt;
        {&amp;quot;D&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[]= {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0 or More Expectations ===&lt;br /&gt;
In some cases the expected test point pattern is something like:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS&lt;br /&gt;
...&lt;br /&gt;
* END&lt;br /&gt;
where any number (0 or more) of PROGRESS are expected but doesn&#039;t matter how many.&lt;br /&gt;
&lt;br /&gt;
To specify that use the special &amp;lt;tt&amp;gt;srTEST_POINT_ANY_COUNT&amp;lt;/tt&amp;gt; constant:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_any(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload Expectations ===&lt;br /&gt;
In some cases the expected test point may carry a payload that needs to be validated against a user defined data:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS_BIN({1,2,3})&lt;br /&gt;
* PROGRESS_STR(&amp;quot;abc&amp;quot;)&lt;br /&gt;
* END&lt;br /&gt;
where PROGRESS_BIN is expected to carry a binary payload and PROGRESS_STR - string payload.&lt;br /&gt;
&lt;br /&gt;
To express that specify a predicate and user defined data:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_payload(void)&lt;br /&gt;
{&lt;br /&gt;
  srBYTE pyData[] = {1, 2, 3};&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS_BIN&amp;quot;, srTestPointMemCmp, pyData}, &lt;br /&gt;
        {&amp;quot;PROGRESS_STR&amp;quot;, srTestPointStrCmp, &amp;quot;abc&amp;quot;}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Negative Expectations === &lt;br /&gt;
&#039;&#039;&#039;Case 1.&#039;&#039;&#039; Need to run a scenario and verify that NONE of the test points are hit.&lt;br /&gt;
&lt;br /&gt;
Basically in that case everything is unexpected:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;quot;everything&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special srTEST_POINT_EVERYTHING_ELSE constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected = srNULL;&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 2.&#039;&#039;&#039; Need to verify that a subset of test points are not hit and everything else should be ignored.&lt;br /&gt;
&lt;br /&gt;
Basically in that case a limited set of test points is unexpected:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| X, Z, Y&lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_some(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected = srNULL;&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {&amp;quot;X&amp;quot;},&lt;br /&gt;
        {&amp;quot;Y&amp;quot;},&lt;br /&gt;
        {&amp;quot;Z&amp;quot;},&lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 3.&#039;&#039;&#039; Need to verify that a subset of test points are not hit but evertyhing else is expected.&lt;br /&gt;
&lt;br /&gt;
Basically in that case a limited set of test points is unexpected:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;everything else&amp;quot;&lt;br /&gt;
| X, Z, Y&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_some(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected[] = {&lt;br /&gt;
        {&amp;quot;X&amp;quot;},&lt;br /&gt;
        {&amp;quot;Y&amp;quot;},&lt;br /&gt;
        {&amp;quot;Z&amp;quot;},&lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System Observation === &lt;br /&gt;
If want to collect all test points universally for purely investigation/diagnosis, not testing, then everything is expected, In other words:&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Expected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Unexpected&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Ignored&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;everything&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To express that use the special srTEST_POINT_EVERYTHING_ELSE constant and do the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[] = {&lt;br /&gt;
        {srTEST_POINT_EVERYTHING_ELSE},&lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srTestPointUnexpect_t unexpected = srNULL;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Test Units]]&lt;br /&gt;
[[Category:Testing]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11604</id>
		<title>Test Point Testing in C/C++</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11604"/>
		<updated>2009-10-06T21:12:13Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* srTestPointExpect */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Test Points provide an easy-to-use framework for solving a class of common yet difficult unit testing problems: &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;How can I observe and verify activity that occurs in another thread?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A couple of common scenarios that become a lot more testable via test points include:&lt;br /&gt;
* Verification of State machine operation&lt;br /&gt;
* Verification of asynchronous callbacks&lt;br /&gt;
* Verification of communication drivers&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Source Code ==&lt;br /&gt;
Target threads are instrumented simply by placing lines of the following form into the source code:&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
/* a test point with no payload */&lt;br /&gt;
srTEST_POINT(&amp;quot;first test point&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
srTEST_POINT_DATA(&amp;quot;second test point&amp;quot;, &amp;quot;string payload&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
srTEST_POINT_DATA1(&amp;quot;third test point&amp;quot;, &amp;quot;payload with format string %d&amp;quot;, myVar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When this code is executed it broadcasts a message via the STRIDE runtime which is detected by the test (IM) thread if it is currently looking for test points (i.e. in a srTEST_POINT_WAIT()). We refer to this as a &#039;&#039;test point hit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Test Code ==&lt;br /&gt;
The test code is instrumented using these steps:&lt;br /&gt;
&lt;br /&gt;
# Specify an expectation set (i.e. the test points that are expected to be hit)&lt;br /&gt;
# Register the expectation set with the STRIDE runtime&lt;br /&gt;
# If the activity we will be obvserving/verifying needs to be started (e.g. a state machine gets kicked off) this should be done after here&lt;br /&gt;
# Wait for the expectation set to be satisfied or a timeout to occur&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void tf_testpoint_wait(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expectation set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;ACTIVE&amp;quot;}, &lt;br /&gt;
        {&amp;quot;IDLE&amp;quot;},&lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* register the expectation set with the STRIDE */&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_NONEXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
&lt;br /&gt;
  /* start your asynchronous operation */&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
  /* wait for expectation set to be satisfied or a timeout to occur */&lt;br /&gt;
  srTEST_POINT_WAIT(handle, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
#pragma scl_test_flist(“testfunc”, tf_testpoint_wait)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Test Point ===&lt;br /&gt;
To specify a test point you should use one of the following macros:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Test Point&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT(&#039;&#039;label&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA(&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA[1..4](&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;, ...)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated format string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;...&#039;&#039; variable list (up to 4) matching the format string&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Set ===&lt;br /&gt;
An expectation set is an array of &#039;&#039;&#039;srTestPointExpect_t&#039;&#039;&#039; structures. srTestPointExpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *  label;&lt;br /&gt;
    /* count specifies the number of times the test point is expected to be hit */ &lt;br /&gt;
    srDWORD         count;&lt;br /&gt;
    /* data specifies an optional string data payload */&lt;br /&gt;
    const srCHAR *  data;&lt;br /&gt;
} srTestPointExpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointExpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;count&#039;&#039; and &#039;&#039;data&#039;&#039; members may be omitted in the array declaration (they will be automatically set to 0 by the compiler)&lt;br /&gt;
* A &#039;&#039;count&#039;&#039; value of either 0 or 1 is interpreted as 1 &lt;br /&gt;
* The &#039;&#039;count&#039;&#039; could be set as &amp;quot;0 or more&amp;quot; by using the special srTEST_POINT_ANY_COUNT symbolic constant  &lt;br /&gt;
* A &#039;&#039;data&#039;&#039; value 0 indicates that there is no payload data associated with this test point&lt;br /&gt;
&lt;br /&gt;
=== srTestPointExpect ===&lt;br /&gt;
The srTestPointExpect() routine is used to register an expectation set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointExpect(srTestPointExpect_t* ptExpected, &lt;br /&gt;
                         srTestPointExpectOrder_e eOrder, &lt;br /&gt;
                         srTestPointExpectMembership_e eMembership, &lt;br /&gt;
                         srWORD* pwHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptExpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an expectation set.&lt;br /&gt;
|-&lt;br /&gt;
| eOrder &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation order. Possible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_ORDERED - the test points are expected to be hit exactly in the defined order &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - the test points could to be hit in any order&lt;br /&gt;
|-&lt;br /&gt;
| eMembership &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation membership. Possible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_EXCLUSIVE - any non expected test point hit will be treated as an error &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - non expected test points hit are ignored&lt;br /&gt;
|-&lt;br /&gt;
| pwHandle &lt;br /&gt;
| Output &lt;br /&gt;
| Handle that represents the registered expectation set&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== srTestPointWait ===&lt;br /&gt;
The srTestPointWait() routine is used to wait for the expectation to be satisfied. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointWait(srWORD wHandle, &lt;br /&gt;
                       srTestCaseHandle_t tTestCase, &lt;br /&gt;
                       srDWORD dwTimeout);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| wHandle &lt;br /&gt;
| Input&lt;br /&gt;
| Handle to a registered expectation set.&lt;br /&gt;
|-&lt;br /&gt;
| tTestCase &lt;br /&gt;
| Input &lt;br /&gt;
| Handle to a test case where the results would be reported. srTEST_CASE_DEFAULT can be used for the default test case.&lt;br /&gt;
|-&lt;br /&gt;
| dwTimeout &lt;br /&gt;
| Input &lt;br /&gt;
| Timeout value in milliseconds; 0 means just check without waiting.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For convinience the following macros are provided:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define srTEST_POINT_WAIT(handle, timeout) srTestPointWait(handle, srTEST_CASE_DEFAULT, timeout)&lt;br /&gt;
#define srTEST_POINT_CHECK(handle) srTestPointWait(handle, srTEST_CASE_DEFAULT, 0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTES:&lt;br /&gt;
* The test thread blocks until either the expectation set is satisfied or the timeout elapses.&lt;br /&gt;
* All test points hit during the wait (both expected and unexpected) are added to the test report as testcase comments&lt;br /&gt;
* If an unexpected test point is encountered (either out of order or not in the expectation set), or the timeout period elapses before the expectation set is satisfied the current test immediately fails&lt;br /&gt;
* Once the wait is over (whether the expectation set has been satisfied or there has been a test failure), the current expectation set is automatically unregistered from the STRIDE runtime and the handle is released&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
=== 0 or More Expectations ===&lt;br /&gt;
In some cases the expected test point pattern is something like:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS&lt;br /&gt;
...&lt;br /&gt;
* END&lt;br /&gt;
where any number (0 or more) of PROGRESS are expected but doesn&#039;t matter how many.&lt;br /&gt;
&lt;br /&gt;
To specify that use the special &amp;lt;tt&amp;gt;srTEST_POINT_ANY_COUNT&amp;lt;/tt&amp;gt; constant:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_any(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expectation set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Negative Expectations === &lt;br /&gt;
&#039;&#039;&#039;Case 1.&#039;&#039;&#039; Need to run a scenario and verify that NONE of the test points are hit.&lt;br /&gt;
&lt;br /&gt;
Dedicate a special test point, lets call it “NEGATIVE_FINAL”, and add it at the end of your test sequence then by setting the expectation “exclusively” to just that test point would allow testing that none of your other test points were hit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;NEGATIVE_FINAL&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_EXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 2.&#039;&#039;&#039; Need to verify that a subset of test points are not hit.&lt;br /&gt;
&lt;br /&gt;
By expecting that all other (not in the negative subset) test points could be hit any number of times combined with the the technique described in case 1 would allow testing that a subset was to hit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;TP_1&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;TP_2&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        ...&lt;br /&gt;
        {&amp;quot;TP_N&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;NEGATIVE_FINAL&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_EXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Test Units]]&lt;br /&gt;
[[Category:Testing]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11603</id>
		<title>Test Point Testing in C/C++</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11603"/>
		<updated>2009-10-06T21:02:39Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* srTestPointExpect */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Test Points provide an easy-to-use framework for solving a class of common yet difficult unit testing problems: &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;How can I observe and verify activity that occurs in another thread?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A couple of common scenarios that become a lot more testable via test points include:&lt;br /&gt;
* Verification of State machine operation&lt;br /&gt;
* Verification of asynchronous callbacks&lt;br /&gt;
* Verification of communication drivers&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Source Code ==&lt;br /&gt;
Target threads are instrumented simply by placing lines of the following form into the source code:&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
/* a test point with no payload */&lt;br /&gt;
srTEST_POINT(&amp;quot;first test point&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
srTEST_POINT_DATA(&amp;quot;second test point&amp;quot;, &amp;quot;string payload&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
srTEST_POINT_DATA1(&amp;quot;third test point&amp;quot;, &amp;quot;payload with format string %d&amp;quot;, myVar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When this code is executed it broadcasts a message via the STRIDE runtime which is detected by the test (IM) thread if it is currently looking for test points (i.e. in a srTEST_POINT_WAIT()). We refer to this as a &#039;&#039;test point hit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Test Code ==&lt;br /&gt;
The test code is instrumented using these steps:&lt;br /&gt;
&lt;br /&gt;
# Specify an expectation set (i.e. the test points that are expected to be hit)&lt;br /&gt;
# Register the expectation set with the STRIDE runtime&lt;br /&gt;
# If the activity we will be obvserving/verifying needs to be started (e.g. a state machine gets kicked off) this should be done after here&lt;br /&gt;
# Wait for the expectation set to be satisfied or a timeout to occur&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void tf_testpoint_wait(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expectation set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;ACTIVE&amp;quot;}, &lt;br /&gt;
        {&amp;quot;IDLE&amp;quot;},&lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* register the expectation set with the STRIDE */&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_NONEXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
&lt;br /&gt;
  /* start your asynchronous operation */&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
  /* wait for expectation set to be satisfied or a timeout to occur */&lt;br /&gt;
  srTEST_POINT_WAIT(handle, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
#pragma scl_test_flist(“testfunc”, tf_testpoint_wait)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Test Point ===&lt;br /&gt;
To specify a test point you should use one of the following macros:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Test Point&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT(&#039;&#039;label&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA(&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA[1..4](&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;, ...)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated format string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;...&#039;&#039; variable list (up to 4) matching the format string&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Set ===&lt;br /&gt;
An expectation set is an array of &#039;&#039;&#039;srTestPointExpect_t&#039;&#039;&#039; structures. srTestPointExpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *  label;&lt;br /&gt;
    /* count specifies the number of times the test point is expected to be hit */ &lt;br /&gt;
    srDWORD         count;&lt;br /&gt;
    /* data specifies an optional string data payload */&lt;br /&gt;
    const srCHAR *  data;&lt;br /&gt;
} srTestPointExpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointExpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;count&#039;&#039; and &#039;&#039;data&#039;&#039; members may be omitted in the array declaration (they will be automatically set to 0 by the compiler)&lt;br /&gt;
* A &#039;&#039;count&#039;&#039; value of either 0 or 1 is interpreted as 1 &lt;br /&gt;
* The &#039;&#039;count&#039;&#039; could be set as &amp;quot;0 or more&amp;quot; by using the special srTEST_POINT_ANY_COUNT symbolic constant  &lt;br /&gt;
* A &#039;&#039;data&#039;&#039; value 0 indicates that there is no payload data associated with this test point&lt;br /&gt;
&lt;br /&gt;
=== srTestPointExpect ===&lt;br /&gt;
The srTestPointExpect() routine is used to register an expectation set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointExpect(srTestPointExpect_t* ptExpected, &lt;br /&gt;
                         srTestPointExpectOrder_e eOrder, &lt;br /&gt;
                         srTestPointExpectMembership_e eMembership, &lt;br /&gt;
                         srWORD* pwHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptExpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an expectation set.&lt;br /&gt;
|-&lt;br /&gt;
| eOrder &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation order. Posible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_ORDERED - the test points are expected to be hit exactly in the defined order &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - the test points could to be hit in any order&lt;br /&gt;
|-&lt;br /&gt;
| eMembership &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation membership. Posible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_EXCLUSIVE - any non expected test point hit will be treated as an error &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - non expected test points hit are ignored&lt;br /&gt;
|-&lt;br /&gt;
| pwHandle &lt;br /&gt;
| Output &lt;br /&gt;
| Handle that represents the registrate expectation set&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== srTestPointWait ===&lt;br /&gt;
The srTestPointWait() routine is used to wait for the expectation to be satisfied. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointWait(srWORD wHandle, &lt;br /&gt;
                       srTestCaseHandle_t tTestCase, &lt;br /&gt;
                       srDWORD dwTimeout);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| wHandle &lt;br /&gt;
| Input&lt;br /&gt;
| Handle to a registered expectation set.&lt;br /&gt;
|-&lt;br /&gt;
| tTestCase &lt;br /&gt;
| Input &lt;br /&gt;
| Handle to a test case where the results would be reported. srTEST_CASE_DEFAULT can be used for the default test case.&lt;br /&gt;
|-&lt;br /&gt;
| dwTimeout &lt;br /&gt;
| Input &lt;br /&gt;
| Timeout value in milliseconds; 0 means just check without waiting.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For convinience the following macros are provided:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define srTEST_POINT_WAIT(handle, timeout) srTestPointWait(handle, srTEST_CASE_DEFAULT, timeout)&lt;br /&gt;
#define srTEST_POINT_CHECK(handle) srTestPointWait(handle, srTEST_CASE_DEFAULT, 0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTES:&lt;br /&gt;
* The test thread blocks until either the expectation set is satisfied or the timeout elapses.&lt;br /&gt;
* All test points hit during the wait (both expected and unexpected) are added to the test report as testcase comments&lt;br /&gt;
* If an unexpected test point is encountered (either out of order or not in the expectation set), or the timeout period elapses before the expectation set is satisfied the current test immediately fails&lt;br /&gt;
* Once the wait is over (whether the expectation set has been satisfied or there has been a test failure), the current expectation set is automatically unregistered from the STRIDE runtime and the handle is released&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
=== 0 or More Expectations ===&lt;br /&gt;
In some cases the expected test point pattern is something like:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS&lt;br /&gt;
...&lt;br /&gt;
* END&lt;br /&gt;
where any number (0 or more) of PROGRESS are expected but doesn&#039;t matter how many.&lt;br /&gt;
&lt;br /&gt;
To specify that use the special &amp;lt;tt&amp;gt;srTEST_POINT_ANY_COUNT&amp;lt;/tt&amp;gt; constant:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_any(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expectation set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Negative Expectations === &lt;br /&gt;
&#039;&#039;&#039;Case 1.&#039;&#039;&#039; Need to run a scenario and verify that NONE of the test points are hit.&lt;br /&gt;
&lt;br /&gt;
Dedicate a special test point, lets call it “NEGATIVE_FINAL”, and add it at the end of your test sequence then by setting the expectation “exclusively” to just that test point would allow testing that none of your other test points were hit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;NEGATIVE_FINAL&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_EXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 2.&#039;&#039;&#039; Need to verify that a subset of test points are not hit.&lt;br /&gt;
&lt;br /&gt;
By expecting that all other (not in the negative subset) test points could be hit any number of times combined with the the technique described in case 1 would allow testing that a subset was to hit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;TP_1&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;TP_2&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        ...&lt;br /&gt;
        {&amp;quot;TP_N&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;NEGATIVE_FINAL&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_EXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Test Units]]&lt;br /&gt;
[[Category:Testing]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11602</id>
		<title>Test Point Testing in C/C++</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11602"/>
		<updated>2009-10-06T21:02:21Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Instrumenting Test Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Test Points provide an easy-to-use framework for solving a class of common yet difficult unit testing problems: &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;How can I observe and verify activity that occurs in another thread?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A couple of common scenarios that become a lot more testable via test points include:&lt;br /&gt;
* Verification of State machine operation&lt;br /&gt;
* Verification of asynchronous callbacks&lt;br /&gt;
* Verification of communication drivers&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Source Code ==&lt;br /&gt;
Target threads are instrumented simply by placing lines of the following form into the source code:&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
/* a test point with no payload */&lt;br /&gt;
srTEST_POINT(&amp;quot;first test point&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
srTEST_POINT_DATA(&amp;quot;second test point&amp;quot;, &amp;quot;string payload&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
srTEST_POINT_DATA1(&amp;quot;third test point&amp;quot;, &amp;quot;payload with format string %d&amp;quot;, myVar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When this code is executed it broadcasts a message via the STRIDE runtime which is detected by the test (IM) thread if it is currently looking for test points (i.e. in a srTEST_POINT_WAIT()). We refer to this as a &#039;&#039;test point hit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Test Code ==&lt;br /&gt;
The test code is instrumented using these steps:&lt;br /&gt;
&lt;br /&gt;
# Specify an expectation set (i.e. the test points that are expected to be hit)&lt;br /&gt;
# Register the expectation set with the STRIDE runtime&lt;br /&gt;
# If the activity we will be obvserving/verifying needs to be started (e.g. a state machine gets kicked off) this should be done after here&lt;br /&gt;
# Wait for the expectation set to be satisfied or a timeout to occur&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void tf_testpoint_wait(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expectation set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;ACTIVE&amp;quot;}, &lt;br /&gt;
        {&amp;quot;IDLE&amp;quot;},&lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* register the expectation set with the STRIDE */&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_NONEXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
&lt;br /&gt;
  /* start your asynchronous operation */&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
  /* wait for expectation set to be satisfied or a timeout to occur */&lt;br /&gt;
  srTEST_POINT_WAIT(handle, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
#pragma scl_test_flist(“testfunc”, tf_testpoint_wait)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Test Point ===&lt;br /&gt;
To specify a test point you should use one of the following macros:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Test Point&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT(&#039;&#039;label&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA(&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA[1..4](&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;, ...)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated format string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;...&#039;&#039; variable list (up to 4) matching the format string&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Set ===&lt;br /&gt;
An expectation set is an array of &#039;&#039;&#039;srTestPointExpect_t&#039;&#039;&#039; structures. srTestPointExpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *  label;&lt;br /&gt;
    /* count specifies the number of times the test point is expected to be hit */ &lt;br /&gt;
    srDWORD         count;&lt;br /&gt;
    /* data specifies an optional string data payload */&lt;br /&gt;
    const srCHAR *  data;&lt;br /&gt;
} srTestPointExpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointExpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;count&#039;&#039; and &#039;&#039;data&#039;&#039; members may be omitted in the array declaration (they will be automatically set to 0 by the compiler)&lt;br /&gt;
* A &#039;&#039;count&#039;&#039; value of either 0 or 1 is interpreted as 1 &lt;br /&gt;
* The &#039;&#039;count&#039;&#039; could be set as &amp;quot;0 or more&amp;quot; by using the special srTEST_POINT_ANY_COUNT symbolic constant  &lt;br /&gt;
* A &#039;&#039;data&#039;&#039; value 0 indicates that there is no payload data associated with this test point&lt;br /&gt;
&lt;br /&gt;
=== srTestPointExpect ===&lt;br /&gt;
The srTestPointExpect() routine is used to register an expectation set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointExpect(srTestPointExpect_t* ptExpected, &lt;br /&gt;
                         srTestPointExpectOrder_e eOrder, &lt;br /&gt;
                         srTestPointExpectMembership_e eMembership, &lt;br /&gt;
                         srWORD* pwHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptExpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an expectaion set.&lt;br /&gt;
|-&lt;br /&gt;
| eOrder &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation order. Posible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_ORDERED - the test points are expected to be hit exactly in the defined order &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - the test points could to be hit in any order&lt;br /&gt;
|-&lt;br /&gt;
| eMembership &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation membership. Posible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_EXCLUSIVE - any non expected test point hit will be treated as an error &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - non expected test points hit are ignored&lt;br /&gt;
|-&lt;br /&gt;
| pwHandle &lt;br /&gt;
| Output &lt;br /&gt;
| Handle that represents the registrate expectation set&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== srTestPointWait ===&lt;br /&gt;
The srTestPointWait() routine is used to wait for the expectation to be satisfied. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointWait(srWORD wHandle, &lt;br /&gt;
                       srTestCaseHandle_t tTestCase, &lt;br /&gt;
                       srDWORD dwTimeout);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| wHandle &lt;br /&gt;
| Input&lt;br /&gt;
| Handle to a registered expectation set.&lt;br /&gt;
|-&lt;br /&gt;
| tTestCase &lt;br /&gt;
| Input &lt;br /&gt;
| Handle to a test case where the results would be reported. srTEST_CASE_DEFAULT can be used for the default test case.&lt;br /&gt;
|-&lt;br /&gt;
| dwTimeout &lt;br /&gt;
| Input &lt;br /&gt;
| Timeout value in milliseconds; 0 means just check without waiting.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For convinience the following macros are provided:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define srTEST_POINT_WAIT(handle, timeout) srTestPointWait(handle, srTEST_CASE_DEFAULT, timeout)&lt;br /&gt;
#define srTEST_POINT_CHECK(handle) srTestPointWait(handle, srTEST_CASE_DEFAULT, 0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTES:&lt;br /&gt;
* The test thread blocks until either the expectation set is satisfied or the timeout elapses.&lt;br /&gt;
* All test points hit during the wait (both expected and unexpected) are added to the test report as testcase comments&lt;br /&gt;
* If an unexpected test point is encountered (either out of order or not in the expectation set), or the timeout period elapses before the expectation set is satisfied the current test immediately fails&lt;br /&gt;
* Once the wait is over (whether the expectation set has been satisfied or there has been a test failure), the current expectation set is automatically unregistered from the STRIDE runtime and the handle is released&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
=== 0 or More Expectations ===&lt;br /&gt;
In some cases the expected test point pattern is something like:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS&lt;br /&gt;
...&lt;br /&gt;
* END&lt;br /&gt;
where any number (0 or more) of PROGRESS are expected but doesn&#039;t matter how many.&lt;br /&gt;
&lt;br /&gt;
To specify that use the special &amp;lt;tt&amp;gt;srTEST_POINT_ANY_COUNT&amp;lt;/tt&amp;gt; constant:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_any(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expectation set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Negative Expectations === &lt;br /&gt;
&#039;&#039;&#039;Case 1.&#039;&#039;&#039; Need to run a scenario and verify that NONE of the test points are hit.&lt;br /&gt;
&lt;br /&gt;
Dedicate a special test point, lets call it “NEGATIVE_FINAL”, and add it at the end of your test sequence then by setting the expectation “exclusively” to just that test point would allow testing that none of your other test points were hit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;NEGATIVE_FINAL&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_EXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 2.&#039;&#039;&#039; Need to verify that a subset of test points are not hit.&lt;br /&gt;
&lt;br /&gt;
By expecting that all other (not in the negative subset) test points could be hit any number of times combined with the the technique described in case 1 would allow testing that a subset was to hit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;TP_1&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;TP_2&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        ...&lt;br /&gt;
        {&amp;quot;TP_N&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;NEGATIVE_FINAL&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_EXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Test Units]]&lt;br /&gt;
[[Category:Testing]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11601</id>
		<title>Test Point Testing in C/C++</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Test_Point_Testing_in_C/C%2B%2B&amp;diff=11601"/>
		<updated>2009-10-06T21:01:39Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* srTestPointExpect */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Test Points provide an easy-to-use framework for solving a class of common yet difficult unit testing problems: &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;How can I observe and verify activity that occurs in another thread?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A couple of common scenarios that become a lot more testable via test points include:&lt;br /&gt;
* Verification of State machine operation&lt;br /&gt;
* Verification of asynchronous callbacks&lt;br /&gt;
* Verification of communication drivers&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Source Code ==&lt;br /&gt;
Target threads are instrumented simply by placing lines of the following form into the source code:&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
/* a test point with no payload */&lt;br /&gt;
srTEST_POINT(&amp;quot;first test point&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
srTEST_POINT_DATA(&amp;quot;second test point&amp;quot;, &amp;quot;string payload&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
srTEST_POINT_DATA1(&amp;quot;third test point&amp;quot;, &amp;quot;payload with format string %d&amp;quot;, myVar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When this code is executed it broadcasts a message via the STRIDE runtime which is detected by the test (IM) thread if it is currently looking for test points (i.e. in a srTEST_POINT_WAIT()). We refer to this as a &#039;&#039;test point hit&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Instrumenting Test Code ==&lt;br /&gt;
The test code is instrumented using these steps:&lt;br /&gt;
&lt;br /&gt;
# Specify an expectation set (i.e. the test points that are expected to be hit)&lt;br /&gt;
# Register the expectation set with the STRIDE runtime&lt;br /&gt;
# If the activity we will be obvserving/verifying needs to be started (e.g. a state machine gets kicked off) this should be done after here&lt;br /&gt;
# Wait for the expectation set to be satisfied or a timeout to occur&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void tf_testpoint_wait(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expectation set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;ACTIVE&amp;quot;}, &lt;br /&gt;
        {&amp;quot;IDLE&amp;quot;},&lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  /* register the expectation set with the STRIDE */&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_NONEXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
&lt;br /&gt;
  /* start your asynchronous operation */&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
  /* wait for expectaion set to be satisfied or a timeout to occur */&lt;br /&gt;
  srTEST_POINT_WAIT(handle, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
#pragma scl_test_flist(“testfunc”, tf_testpoint_wait)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Test Point ===&lt;br /&gt;
To specify a test point you should use one of the following macros:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Test Point&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT(&#039;&#039;label&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA(&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated string&lt;br /&gt;
|-&lt;br /&gt;
| srTEST_POINT_DATA[1..4](&#039;&#039;label&#039;&#039;, &#039;&#039;message&#039;&#039;, ...)&lt;br /&gt;
| &#039;&#039;label&#039;&#039; is a pointer to a null-terminated string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;message&#039;&#039; is a pointer to a null-terminated format string&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;...&#039;&#039; variable list (up to 4) matching the format string&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expectation Set ===&lt;br /&gt;
An expectation set is an array of &#039;&#039;&#039;srTestPointExpect_t&#039;&#039;&#039; structures. srTestPointExpect_t is typedef&#039;d as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&#039;c&#039;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    /* the label value is considered the test point&#039;s identity */&lt;br /&gt;
    const srCHAR *  label;&lt;br /&gt;
    /* count specifies the number of times the test point is expected to be hit */ &lt;br /&gt;
    srDWORD         count;&lt;br /&gt;
    /* data specifies an optional string data payload */&lt;br /&gt;
    const srCHAR *  data;&lt;br /&gt;
} srTestPointExpect_t;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTES:&#039;&#039;&#039;&lt;br /&gt;
* The end of the array has to be marked by a srTestPointExpect_t set to all zero values&lt;br /&gt;
* The &#039;&#039;count&#039;&#039; and &#039;&#039;data&#039;&#039; members may be omitted in the array declaration (they will be automatically set to 0 by the compiler)&lt;br /&gt;
* A &#039;&#039;count&#039;&#039; value of either 0 or 1 is interpreted as 1 &lt;br /&gt;
* The &#039;&#039;count&#039;&#039; could be set as &amp;quot;0 or more&amp;quot; by using the special srTEST_POINT_ANY_COUNT symbolic constant  &lt;br /&gt;
* A &#039;&#039;data&#039;&#039; value 0 indicates that there is no payload data associated with this test point&lt;br /&gt;
&lt;br /&gt;
=== srTestPointExpect ===&lt;br /&gt;
The srTestPointExpect() routine is used to register an expectation set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointExpect(srTestPointExpect_t* ptExpected, &lt;br /&gt;
                         srTestPointExpectOrder_e eOrder, &lt;br /&gt;
                         srTestPointExpectMembership_e eMembership, &lt;br /&gt;
                         srWORD* pwHandle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| ptExpected&lt;br /&gt;
| Input&lt;br /&gt;
| Pointer to an expectaion set.&lt;br /&gt;
|-&lt;br /&gt;
| eOrder &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation order. Posible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_ORDERED - the test points are expected to be hit exactly in the defined order &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - the test points could to be hit in any order&lt;br /&gt;
|-&lt;br /&gt;
| eMembership &lt;br /&gt;
| Input &lt;br /&gt;
| Expectation membership. Posible values are: &amp;lt;br/&amp;gt; &lt;br /&gt;
srTEST_POINT_EXPECT_EXCLUSIVE - any non expected test point hit will be treated as an error &amp;lt;br/&amp;gt;&lt;br /&gt;
srTEST_POINT_EXPECT_UNORDERED - non expected test points hit are ignored&lt;br /&gt;
|-&lt;br /&gt;
| pwHandle &lt;br /&gt;
| Output &lt;br /&gt;
| Handle that represents the registrate expectation set&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== srTestPointWait ===&lt;br /&gt;
The srTestPointWait() routine is used to wait for the expectation to be satisfied. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srBOOL srTestPointWait(srWORD wHandle, &lt;br /&gt;
                       srTestCaseHandle_t tTestCase, &lt;br /&gt;
                       srDWORD dwTimeout);&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
| wHandle &lt;br /&gt;
| Input&lt;br /&gt;
| Handle to a registered expectation set.&lt;br /&gt;
|-&lt;br /&gt;
| tTestCase &lt;br /&gt;
| Input &lt;br /&gt;
| Handle to a test case where the results would be reported. srTEST_CASE_DEFAULT can be used for the default test case.&lt;br /&gt;
|-&lt;br /&gt;
| dwTimeout &lt;br /&gt;
| Input &lt;br /&gt;
| Timeout value in milliseconds; 0 means just check without waiting.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;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;Return Value&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039; Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| srBOOL &lt;br /&gt;
| srTRUE on success, srFALSE otherwise.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For convinience the following macros are provided:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define srTEST_POINT_WAIT(handle, timeout) srTestPointWait(handle, srTEST_CASE_DEFAULT, timeout)&lt;br /&gt;
#define srTEST_POINT_CHECK(handle) srTestPointWait(handle, srTEST_CASE_DEFAULT, 0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTES:&lt;br /&gt;
* The test thread blocks until either the expectation set is satisfied or the timeout elapses.&lt;br /&gt;
* All test points hit during the wait (both expected and unexpected) are added to the test report as testcase comments&lt;br /&gt;
* If an unexpected test point is encountered (either out of order or not in the expectation set), or the timeout period elapses before the expectation set is satisfied the current test immediately fails&lt;br /&gt;
* Once the wait is over (whether the expectation set has been satisfied or there has been a test failure), the current expectation set is automatically unregistered from the STRIDE runtime and the handle is released&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
=== 0 or More Expectations ===&lt;br /&gt;
In some cases the expected test point pattern is something like:&lt;br /&gt;
* START&lt;br /&gt;
* PROGRESS&lt;br /&gt;
...&lt;br /&gt;
* END&lt;br /&gt;
where any number (0 or more) of PROGRESS are expected but doesn&#039;t matter how many.&lt;br /&gt;
&lt;br /&gt;
To specify that use the special &amp;lt;tt&amp;gt;srTEST_POINT_ANY_COUNT&amp;lt;/tt&amp;gt; constant:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_any(void)&lt;br /&gt;
{&lt;br /&gt;
  /* specify expectation set */&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;START&amp;quot;}, &lt;br /&gt;
        {&amp;quot;PROGRESS&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;END&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Negative Expectations === &lt;br /&gt;
&#039;&#039;&#039;Case 1.&#039;&#039;&#039; Need to run a scenario and verify that NONE of the test points are hit.&lt;br /&gt;
&lt;br /&gt;
Dedicate a special test point, lets call it “NEGATIVE_FINAL”, and add it at the end of your test sequence then by setting the expectation “exclusively” to just that test point would allow testing that none of your other test points were hit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;NEGATIVE_FINAL&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_EXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Case 2.&#039;&#039;&#039; Need to verify that a subset of test points are not hit.&lt;br /&gt;
&lt;br /&gt;
By expecting that all other (not in the negative subset) test points could be hit any number of times combined with the the technique described in case 1 would allow testing that a subset was to hit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
void tf_testpoint_none(void)&lt;br /&gt;
{&lt;br /&gt;
  srTestPointExpect_t expected[]= {&lt;br /&gt;
        {&amp;quot;TP_1&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;TP_2&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        ...&lt;br /&gt;
        {&amp;quot;TP_N&amp;quot;, srTEST_POINT_ANY_COUNT}, &lt;br /&gt;
        {&amp;quot;NEGATIVE_FINAL&amp;quot;}, &lt;br /&gt;
        {0}};&lt;br /&gt;
&lt;br /&gt;
  srWORD handle;&lt;br /&gt;
  srTestPointExpect(expected, srTEST_POINT_EXPECT_UNORDERED, srTEST_POINT_EXPECT_EXCLUSIVE, &amp;amp;handle);&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Test Units]]&lt;br /&gt;
[[Category:Testing]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_Runner&amp;diff=10841</id>
		<title>STRIDE Runner</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_Runner&amp;diff=10841"/>
		<updated>2009-08-20T22:54:38Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Test Unit Specifiecation Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The &#039;&#039;&#039;stride&#039;&#039;&#039; executable (a.k.a. STRIDE Runner) runs target-based tests from a host computer and optionally uploads results to [[STRIDE Test Space]]. The program also can be used to list the names of all Test Units that exist in a STRIDE database file.&lt;br /&gt;
&lt;br /&gt;
The stride executable is available to run on Windows and on Linux x86.&lt;br /&gt;
&lt;br /&gt;
== Running Tests ==&lt;br /&gt;
You may specify either &#039;&#039;&#039;built-in diagnostics&#039;&#039;&#039; or &#039;&#039;&#039;user tests&#039;&#039;&#039; to be run. &lt;br /&gt;
&lt;br /&gt;
The built-in diagnostics are useful to validate a new installation. See [[Test_Integration#Running_STRIDE_Diagnostics | Running Diagnostics]] for details.&lt;br /&gt;
&lt;br /&gt;
User tests comprise either sample tests provided by S2 Technologies or tests that you create.&lt;br /&gt;
&lt;br /&gt;
== Input ==&lt;br /&gt;
In order to run tests, you must provide the following information to stride.exe:&lt;br /&gt;
&lt;br /&gt;
;database file&lt;br /&gt;
: This is the .sidb file that is created by the [[Build Tools]] during the target build process. This file contains meta-information used to run tests.&lt;br /&gt;
&lt;br /&gt;
;device parameters&lt;br /&gt;
: This tells stride.exe how to connect to the target.&lt;br /&gt;
&lt;br /&gt;
;tests to run&lt;br /&gt;
: Unless you are running the diagnostic tests (using the &amp;lt;tt&amp;gt;--diagnostics&amp;lt;/tt&amp;gt; option), you must specify the Test Units that you want to run. You may also optionally specify named hierarchical suites in which to put the results of the Test Units you designate.&lt;br /&gt;
&lt;br /&gt;
=== Default Behavior ===&lt;br /&gt;
By default, all Test Units in the specified database are run, and the all results are put into the root suite. It is not necessary to explicitly specify Test Units unless you want to override the default behavior.&lt;br /&gt;
&lt;br /&gt;
=== Test Unit Run Order ===&lt;br /&gt;
If implicitly specified by a wildcard, Test Units are run in the order in which their corresponding SCL pragmas were seen by the [[s2scompile|STRIDE compiler]].&lt;br /&gt;
&lt;br /&gt;
If explicitly specified, Test Units are run in the order in which they are given on the command line.&lt;br /&gt;
&lt;br /&gt;
=== Test Unit Specification Rules ===&lt;br /&gt;
&lt;br /&gt;
* Test Units are specified by name or wildcard and grouped together within parentheses, i.e. &amp;quot;(&amp;quot; and &amp;quot;)&amp;quot;&lt;br /&gt;
* When specifying more than one Test Unit in a group, each Test Unit name (or wildcard) must be delimited by a comma.&lt;br /&gt;
* The output of each Test Unit group is placed within a hierarchy of named suites. (The root suite does not have a name.)&lt;br /&gt;
* The suite into which a Test Unit group is placed is specified immediately before the group, e.g. &#039;&#039;suitepath&#039;&#039;(&#039;&#039;testunitgroup&#039;&#039;)&lt;br /&gt;
* Hierarchical suite paths are delimited by &amp;quot;/&amp;quot; (forward slash) and are always specified starting from the root.&lt;br /&gt;
* If the same Test Unit is specified to be run more than once, and one or more results are to be written to the same suite, the each conflicting Test Unit name is appended with an incrementing count in the form of &amp;quot;(n)&amp;quot;. For example: Results from three runs of TestUnit &amp;quot;myTU&amp;quot; are all written to the root suite. The Test Units will be reported with the names &amp;quot;myTU&amp;quot; &amp;quot;myTU(1)&amp;quot; and &amp;quot;myTU(2)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Wildcard Matching ====&lt;br /&gt;
The following wildcard characters are recognized in Test Unit specifications:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;&#039;&#039;&#039; (asterisk) matches all Test Units&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;&#039;&#039;&#039; (hyphen) matches all remaining Test Units (useful when putting Test Units into suites) &lt;br /&gt;
&lt;br /&gt;
==== Test Unit Specification Examples ====&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;-r omitted&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Default behavior: run all Test Units and put results into the root-level suite.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;-r /(*)&amp;lt;/code&amp;gt;&lt;br /&gt;
: Same as above: run all Test Units and put results into the root-level suite.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;-r /Suite(*)&amp;lt;/code&amp;gt;&lt;br /&gt;
: Run all tests and put results into a suite named &amp;quot;Suite&amp;quot; that is a child of the root suite.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;-r /(TU1,TU2,TU3)&amp;lt;/code&amp;gt;&lt;br /&gt;
: Run the Test Units named &amp;quot;TU1&amp;quot;, &amp;quot;TU2&amp;quot;, and &amp;quot;TU3&amp;quot; in the designated order; put results into the root suite.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;-r /(TU1,TU2,TU3) -r /SecondPass(TU1)&amp;lt;/code&amp;gt;&lt;br /&gt;
: Run the Test Units named &amp;quot;TU1&amp;quot;, &amp;quot;TU2&amp;quot;, and &amp;quot;TU3&amp;quot; in the designated order; put results into the root suite. Then run the Test Unit named &amp;quot;TU1&amp;quot; again and put the results into a suite named &amp;quot;SecondPass&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;-r /(TU1,TU2,TU3) -r /Remaining(-)&amp;lt;/code&amp;gt;&lt;br /&gt;
: Run the Test Units named &amp;quot;TU1&amp;quot;, &amp;quot;TU2&amp;quot;, and &amp;quot;TU3&amp;quot; in the designated order; put results into the root suite. Then run all remaining Test Units and put the results into a suite named &amp;quot;Remaining&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;-r &amp;quot;/Suite1/Suite2(TUa, TUb)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Run the Test Units named &amp;quot;TUa&amp;quot; and &amp;quot;TUb&amp;quot;, and put the results into a suite named &amp;quot;Suite2&amp;quot; that is a child of a suite named &amp;quot;Suite1&amp;quot; that is a child of the root. Note that we must enclose the specification in quotes since the specification contains a space.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;-r &amp;quot;TUx TUy TUz&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This is a special convenience syntax. If the suite and grouping parentheses are omitted, the app runs the  the named Test Units and puts their results put into the root suite.&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
Upon test completion, test output is always written as follows:&lt;br /&gt;
&lt;br /&gt;
;console output&lt;br /&gt;
: A quick summary of results is written to standard output. Test counts are shown for the categories of &#039;&#039;&#039;passed&#039;&#039;&#039;, &#039;&#039;&#039;failed&#039;&#039;&#039;, &#039;&#039;&#039;in progress&#039;&#039;&#039;, and &#039;&#039;&#039;not in use&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;local xml file&lt;br /&gt;
: Detailed results are written to a local xml file. By default, this file is written to the directory where the input STRIDE database file is located and given the same name as the database file with an extension of &amp;quot;.xml&amp;quot;. If you open this file in a web browser, an xsl transform is automatically downloaded and applied before rendering.&lt;br /&gt;
&lt;br /&gt;
Optionally, you may also publish the results to your [[STRIDE Test Space]] upon test completion.&lt;br /&gt;
&lt;br /&gt;
;Test Space&lt;br /&gt;
: Results are uploaded using your Test Space URL and login credentials. You must specify the testspace name and project name when using this option.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
    stride [&amp;lt;i&amp;gt;options&amp;lt;/i&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Each command line option that accepts an argument should be entered with a space between the option and its corresponding arguement; i.e.&lt;br /&gt;
 stride -o argument --option1 argument1&lt;br /&gt;
&lt;br /&gt;
Any warnings or errors that occur during execution are written to the standard output device.&lt;br /&gt;
&lt;br /&gt;
== Options ==&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;background-color:#ffffcc;&amp;quot;   &lt;br /&gt;
!width=&amp;quot;200pt&amp;quot;|&#039;&#039;&#039;Option&#039;&#039;&#039;&lt;br /&gt;
!width=&amp;quot;500pt&amp;quot;|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;--version&#039;&#039;&#039;&lt;br /&gt;
| Prints version information to the console.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;--database&#039;&#039;&#039;  &#039;&#039;arg&#039;&#039;&lt;br /&gt;
| Specifies the name of an existing STRIDE database (.sidb) file that will be used for test execution. This can be a relative or absolute path. If the path contains one or more spaces, it must be enclosed in quotes.&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;--device&#039;&#039;&#039; &#039;&#039;arg&#039;&#039;&lt;br /&gt;
| Specifies the parameters to be used to connect to the target device (i.e. TCP:&#039;&#039;host&#039;&#039;:&#039;&#039;port&#039;&#039; or COM&#039;&#039;port&#039;&#039;:&#039;&#039;rate&#039;&#039;:&#039;&#039;mode&#039;&#039;). For example: &lt;br /&gt;
* TCP:localhost:8000 &lt;br /&gt;
* COM7:28800:8N1&lt;br /&gt;
*/dev/ttyS2:57600:8N1 &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--timeout&#039;&#039;&#039; &#039;&#039;arg&#039;&#039; (=0)&lt;br /&gt;
| Specifies a watchdog timeout (in seconds) per single test execution step. &lt;br /&gt;
Default value is 0. (0 = infinite timeout)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;-r&#039;&#039;&#039; [ --run ] &#039;&#039;arg&#039;&#039; (=/(*))&lt;br /&gt;
| Specifies a list of Test Units to execute and their order of execution with optional report grouping by suite. You may specify this option many times on the command line to include multiple groupings in a single test. A named Test Suite may be specifed more than once to run it multiple times. See [[#Input|Input]] section above for more details.&lt;br /&gt;
Default value is all Test Units.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;-u&#039;&#039;&#039; [ --upload ] &#039;&#039;arg&#039;&#039; (=all)]&lt;br /&gt;
| Specifies if and how to upload the results to [[STRIDE Test Space]]. Arg specifies type of upload; &amp;lt;br/&amp;gt;&lt;br /&gt;
The following types of uploads are supported:&lt;br /&gt;
* &amp;quot;all&amp;quot; - This causes a new result set to be created and marked complete. This is the most commonly needed upload type, so it is the default behavior. The remaining upload types are used to aggregate results of multiple executions into a single result set.&lt;br /&gt;
* &amp;quot;start&amp;quot; - This is used to create a new result set and mark it incomplete. An upload of this type should be followed by zero or more uploads that add results and one final upload that finishes the result set.&lt;br /&gt;
* &amp;quot;add&amp;quot; - This is used to add more data to an existing incomplete result set. The result set will still be marked incomplete after this upload type.&lt;br /&gt;
* &amp;quot;finish&amp;quot; - This is used to add more data to an existing incomplete result set and mark it complete. This is the last step in creating a result set from multiple executions.&lt;br /&gt;
Default value is &amp;quot;all&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--testspace&#039;&#039;&#039; &#039;&#039;arg&#039;&#039;&lt;br /&gt;
| Specifies the root STRIDE Test Space URL and credentials. (i.e. &amp;lt;nowiki&amp;gt;https://user:pwd@mycompany.stridetestspace.com&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--project&#039;&#039;&#039; &#039;&#039;arg&#039;&#039;&lt;br /&gt;
| Specifies the name of the STRIDE Test Space project to which the results will be uploaded&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--space&#039;&#039;&#039; &#039;&#039;arg&#039;&#039;&lt;br /&gt;
| Specifies the name of the STRIDE Test Space project&#039;s test space.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--name&#039;&#039;&#039; &#039;&#039;arg&#039;&#039;&lt;br /&gt;
| Specifies the name to be given to the result set uploaded to STRIDE Test Space. If this option is omitted, a default name of &amp;quot;Sequence_&#039;&#039;n&#039;&#039;&amp;quot; is used where n is an auto-incremented integer.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--list&#039;&#039;&#039;&lt;br /&gt;
| Lists all Test Units in the specified STRIDE database to standard out.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--diagnostics&#039;&#039;&#039;&lt;br /&gt;
| Performs a set of built-in diagnostic tests on the target. See [[Sandbox Evaluation]] for test details.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;-o&#039;&#039;&#039; [ --output ] &#039;&#039;arg&#039;&#039;&lt;br /&gt;
| Specifies the local file to which test results will be written.&amp;lt;br&amp;gt;&lt;br /&gt;
Default output file is given the same name as the input database file (with the &amp;lt;tt&amp;gt;.sidb&amp;lt;/tt&amp;gt; file extension replaced by &amp;lt;tt&amp;gt;.xml&amp;lt;/tt&amp;gt;), and is written to the input database file&#039;s directory.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;-O&#039;&#039;&#039; [--options_file] &#039;&#039;arg&#039;&#039;&lt;br /&gt;
| Specifies a file from which the program reads command line options. The format is the same as the command line except that options may be split across multiple lines.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Environment Variables ==&lt;br /&gt;
The following environment variables are recognized by the application and their values used as shown if set. &amp;lt;ref&amp;gt;For details, see [http://support.microsoft.com/kb/310519 How to Manage Environment Variables in Windows XP] and [http://stackoverflow.com/questions/234742/setting-environment-variables-in-linux-using-bash Setting Environment Variables in Linux Using bash].&amp;lt;/ref&amp;gt; Any value specifed by an environment variable will be overridden if the corresponding value is specified on the command line.&lt;br /&gt;
&lt;br /&gt;
;STRIDE_DEVICE&lt;br /&gt;
: specifies the &amp;lt;tt&amp;gt;--device&amp;lt;/tt&amp;gt; argument&lt;br /&gt;
;STRIDE_TESTSPACE_URL &lt;br /&gt;
: specifies the &amp;lt;tt&amp;gt;--testspace&amp;lt;/tt&amp;gt; argument&lt;br /&gt;
;STRIDE_TESTSPACE_PROJECT&lt;br /&gt;
: specifies the &amp;lt;tt&amp;gt;--project&amp;lt;/tt&amp;gt; argument&lt;br /&gt;
;STRIDE_TESTSPACE_SPACE&lt;br /&gt;
: specifies the &amp;lt;tt&amp;gt;--space&amp;lt;/tt&amp;gt; argument&lt;br /&gt;
&lt;br /&gt;
Setting up environment variable for static options will streamline the use of stride. &lt;br /&gt;
&lt;br /&gt;
=== Using a Proxy ===&lt;br /&gt;
If you access the Internet via an HTTP proxy, you must set the environment variables &amp;lt;tt&amp;gt;HTTP_PROXY&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;HTTPS_PROXY&amp;lt;/tt&amp;gt; to specify the name and port of the proxy server.&lt;br /&gt;
&lt;br /&gt;
Symptoms of needing to specify a proxy is the following errors:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Activation error: 132 Unable to connect to &amp;lt;nowiki&amp;gt;http://activation.s2technologies.com&amp;lt;/nowiki&amp;gt; Cannot connect to specified URL (-132)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unable to proceed. Failed performing request: [6] Couldn’t resolve host name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The environment variables are set with the value &#039;&#039;name&#039;&#039;:&#039;&#039;port&#039;&#039; corresponding to your proxy server. For example, on Windows:&lt;br /&gt;
 &amp;gt; set HTTP_PROXY=myproxy:8765&lt;br /&gt;
would instruct the stride runner to use the proxy named &amp;lt;tt&amp;gt;myproxy&amp;lt;/tt&amp;gt; on port &amp;lt;tt&amp;gt;8765&amp;lt;/tt&amp;gt; to communicate via HTTP protocol.&lt;br /&gt;
&lt;br /&gt;
== License Activation ==&lt;br /&gt;
&lt;br /&gt;
The stride executable requires a valid license to run. The first time you execute stride (and any other time a valid license is not found), you will be prompted to accept the Stride Framework License Agreement (distributed in the host tools package). If you accept the agreement, you will then be prompted to enter a license activation code.&lt;br /&gt;
&lt;br /&gt;
At this point, enter the activation code supplied by S2 Technologies to perform Internet activation and download of your license. You must be connected to the Internet for this to succeed. Once you have a valid license on your computer, the Internet connection is no longer necessary.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
Refer to [[Running Test Units]] for additional examples.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Category:Test Units]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9636</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9636"/>
		<updated>2009-04-09T23:18:01Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* 3.0.0201b */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Test Points]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
== AutoScript ==&lt;br /&gt;
* A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in [[AutoScript|AScript]] that is always active so that an internal discriminant value may be set or read regardless of the active member.&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
* Test Unit [[Pass/Fail Macros]] do not support pointer arguments.&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[AutoScript|AScript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to [[STRIDE Studio]] Trace View post filtering - to include matching call/return events.&lt;br /&gt;
* Bitfield members are not listed in [[STRIDE Studio]] Autosense.&lt;br /&gt;
* Fixed incorrect IM generation for Remote Interceptors, i.e., a Dynamic Delegate without Tracing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
 stride.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9635</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9635"/>
		<updated>2009-04-09T23:17:48Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* 3.0.0201b */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Test Points]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
== AutoScript ==&lt;br /&gt;
* A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in [[AutoScript|AScript]] that is always active so that an internal discriminant value may be set or read regardless of the active member.&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
* Test Unit [[Pass/Fail Macros]] do not support pointer arguments.&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[AutoScript|AScript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to [[STRIDE Studio]] Trace View post filtering - to include matching call/return events.&lt;br /&gt;
* Bitfield members are not listed in [[STRIDE Studio]] Autosense.&lt;br /&gt;
* Fixed incorrent IM generation for Remote Interceptors, i.e., a Dynamic Delegate without Tracing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srtest.h&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
 stride.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9628</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9628"/>
		<updated>2009-04-09T01:04:25Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Usability Improvements */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
== AutoScript ==&lt;br /&gt;
* A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in [[AutoScript|AScript]] that is always active so that an internal discriminant value may be set or read regardless of the active member.&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[AutoScript|AScript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to Trace View post filtering - to include matching call/return events.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
 stride.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9627</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=9627"/>
		<updated>2009-04-09T01:02:57Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Union Discriminant Accessor */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
=== Union Discriminant Accessor ===&lt;br /&gt;
&lt;br /&gt;
A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in [[AutoScript|AScript]] that is always active so that an internal discriminant value may be set or read regardless of the active member.&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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[AutoScript|AScript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to Trace View post filtering - to include matching call/return events.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9626</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9626"/>
		<updated>2009-04-09T01:02:25Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* 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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
=== Union Discriminant Access in Ascript ===&lt;br /&gt;
Using ascript to access an internal discriminant field of a union in a script may generate errors if the union member containing the discriminant field is inactive. A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in ascript that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
== AutoScript ==&lt;br /&gt;
* A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in [[AutoScript|AScript]] that is always active so that an internal discriminant value may be set or read regardless of the active member.&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[AutoScript|AScript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to Trace View post filtering - to include matching call/return events.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
 stride.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9625</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9625"/>
		<updated>2009-04-09T01:01:23Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Fixes */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
=== Union Discriminant Access in Ascript ===&lt;br /&gt;
Using ascript to access an internal discriminant field of a union in a script may generate errors if the union member containing the discriminant field is inactive. A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in ascript that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
== AutoScript ==&lt;br /&gt;
* A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in [[AutoScript|AScript]] that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[AutoScript|AScript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to Trace View post filtering - to include matching call/return events.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
 stride.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9624</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9624"/>
		<updated>2009-04-09T01:01:02Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* 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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
=== Union Discriminant Access in Ascript ===&lt;br /&gt;
Using ascript to access an internal discriminant field of a union in a script may generate errors if the union member containing the discriminant field is inactive. A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in ascript that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
* In IM generation, a misalignment of conditional blocks involving pointers containing discriminated unions for pointer setup was fixed.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
== AutoScript ==&lt;br /&gt;
* A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in [[AutoScript|AScript]] that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[AutoScript|AScript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to Trace View post filtering - to include matching call/return events.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
 stride.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9623</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9623"/>
		<updated>2009-04-09T00:58:58Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* 3.0.0201b */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
=== Union Discriminant Access in Ascript ===&lt;br /&gt;
Using ascript to access an internal discriminant field of a union in a script may generate errors if the union member containing the discriminant field is inactive. A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in ascript that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
* In IM generation, a misalignment of conditional blocks involving pointers containing discriminated unions for pointer setup was fixed.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[AutoScript|AScript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to Trace View post filtering - to include matching call/return events.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
 stride.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9622</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=9622"/>
		<updated>2009-04-09T00:58:13Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* 3.0.0104c */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
=== Union Discriminant Accessor ===&lt;br /&gt;
&lt;br /&gt;
A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in [[AutoScript|AScript]] that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[AutoScript|AScript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to Trace View post filtering - to include matching call/return events.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9621</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=9621"/>
		<updated>2009-04-09T00:57:54Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Union Discriminant Accessor */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
=== Union Discriminant Accessor ===&lt;br /&gt;
&lt;br /&gt;
A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in [[AutoScript|AScript]] that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[Ascript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to Trace View post filtering - to include matching call/return events.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9620</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=9620"/>
		<updated>2009-04-09T00:57:35Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Union Discriminant Accessor */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
=== Union Discriminant Accessor ===&lt;br /&gt;
&lt;br /&gt;
A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in [[AutoScript|Ascript]] that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[Ascript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to Trace View post filtering - to include matching call/return events.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9619</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=9619"/>
		<updated>2009-04-09T00:56:53Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* 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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
=== Union Discriminant Accessor ===&lt;br /&gt;
&lt;br /&gt;
A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in [[Ascript]] that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[Ascript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to Trace View post filtering - to include matching call/return events.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9618</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=9618"/>
		<updated>2009-04-09T00:52:58Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* 3.0.0104c */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Fixed misalignment of conditional blocks involving pointers containing discriminated unions, during pointer setup in IM generation.&lt;br /&gt;
* Added new &amp;quot;_Discriminant&amp;quot; member to union objects in [[Ascript]] that is always active. This allows access to internal discriminants regardless of which member is currently active.&lt;br /&gt;
* Enhancement to Trace View post filtering - to include matching call/return events.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9617</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=9617"/>
		<updated>2009-04-09T00:47:12Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* 3.0.0104c */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* &lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9616</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=9616"/>
		<updated>2009-04-09T00:46:10Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* 3.0.0104b */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9615</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=9615"/>
		<updated>2009-04-09T00:40:50Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Usability Improvements */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9614</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=9614"/>
		<updated>2009-04-09T00:39:53Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Fixes */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
=== Union Discriminant Access in Ascript ===&lt;br /&gt;
&lt;br /&gt;
Using ascript to access an internal discriminant field of a union in a script may generate errors if the union member containing the discriminant field is inactive. A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in ascript that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9611</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9611"/>
		<updated>2009-04-08T20:19:22Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Union Discriminant Access in Ascript */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
=== Union Discriminant Access in Ascript ===&lt;br /&gt;
Using ascript to access an internal discriminant field of a union in a script may generate errors if the union member containing the discriminant field is inactive. A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in ascript that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
* In IM generation, a misalignment of conditional blocks involving pointers containing discriminated unions for pointer setup was fixed.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
 stride.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9610</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=9610"/>
		<updated>2009-04-08T20:18:44Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Union Discriminant Access in Ascript */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
=== Union Discriminant Access in Ascript ===&lt;br /&gt;
&lt;br /&gt;
Using ascript to access an internal discriminant field of a union in a script may generate errors if the union member containing the discriminant field is inactive. A new synthesized &amp;quot;_Discriminant&amp;quot; field has been added as a member of the union object in ascript that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
*In IM generation, a misalignment of conditional blocks involving pointers containing discriminated unions for pointer setup was 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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9609</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=9609"/>
		<updated>2009-04-08T20:16:56Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Usability Improvements */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
=== Union Discriminant Access in Ascript ===&lt;br /&gt;
&lt;br /&gt;
Using ascript to access an internal discriminant field of a union in a script may generate errors if the union member containing the discriminant field is inactive. A new synthesized &amp;quot;_Discriminant&amp;quot; field union member has been added to the union object in ascript that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
*In IM generation, a misalignment of conditional blocks involving pointers containing discriminated unions for pointer setup was 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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9608</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9608"/>
		<updated>2009-04-08T20:16:09Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Usability Improvements */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
=== Union Discriminant Access in Ascript ===&lt;br /&gt;
Using ascript to access an internal discriminant field of a union in a script may generate errors if the union member containing the discriminant field is inactive. A new synthesized &amp;quot;_Discriminant&amp;quot; field union member has been added to the union object in ascript that is always active so that the discriminant value may be set or read regardless of the active member. The synthesized field exists for all unions with a discriminant, whether internal or external.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
* In IM generation, a misalignment of conditional blocks involving pointers containing discriminated unions for pointer setup was fixed.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
 stride.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9607</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=9607"/>
		<updated>2009-04-08T20:02:27Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Fixes */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
*In IM generation, a misalignment of conditional blocks involving pointers containing discriminated unions for pointer setup was 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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9606</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9606"/>
		<updated>2009-04-08T20:01:44Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Fixes */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
* In IM generation, a misalignment of conditional blocks involving pointers containing discriminated unions for pointer setup was fixed.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
 stride.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9564</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9564"/>
		<updated>2009-04-06T18:10:15Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Fixes */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9563</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=9563"/>
		<updated>2009-04-06T18:10:00Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Fixes */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9562</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=9562"/>
		<updated>2009-04-06T18:03:45Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* New Trace View Filtering Setting */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== Trace View Filtering === &lt;br /&gt;
&lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
*[9134] Misaligned brackets in IM&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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9561</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9561"/>
		<updated>2009-04-06T18:03:07Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Usability Improvements */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
*[9134] Misaligned brackets in IM&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9560</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9560"/>
		<updated>2009-04-06T18:02:57Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Usability Improvements */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Trace View Filtering === &lt;br /&gt;
A new post-filter setting exists for Trace Views. The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
*[9134] Misaligned brackets in IM&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9559</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=9559"/>
		<updated>2009-04-06T18:01:08Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Usability Improvements */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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;
=== New Trace View Filtering Setting === &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Post Filtering&amp;quot; tab in the Filters dialog and the &amp;quot;Filter String&amp;quot; dialogs now both have check boxes that read &amp;quot;Do not filter out any matching events&amp;quot;, which are unchecked by default. When checked, and when filters are in effect, for any remaining (ie. not filtered out) items that have corresponding return or call event items, these corresponding items will remain visible even if they would normally be filtered out.&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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
*[9134] Misaligned brackets in IM&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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9557</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9557"/>
		<updated>2009-04-06T17:34:58Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Fixes */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Using Testpoints|Testpoints]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new set of [[Test Point Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Space ===&lt;br /&gt;
A new utility script is available to upload test results to STRIDE Test Space. (Consult your S2 Technologies representative for more information on STRIDE Test Space.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
*[9134] Misaligned brackets in IM&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Using Testpoints|Testpoints]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The signature of the [[Platform_Abstraction_Layer#PAL_Input.2FOutput_Services|PAL IO Service]] callback registrars (&#039;&#039;palOutPndReg()&#039;&#039;, &#039;&#039;palOutRdyReg()&#039;&#039; and &#039;&#039;palInReg()&#039;&#039;) has changed. Instread of palBOOL, now they return the previously registreted callback or palNULL if not such set.&lt;br /&gt;
* The public Test Services &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* In [[SLAP]] the user implemented s2slapDataReady() has been removed in favor of a new callback registrar s2slapRegDataReadyCb(). If implementing a custom [[Platform_Abstraction_Layer|PAL]] make sure to register your callback when initializing the IO services.&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Application&#039;s Code ==&lt;br /&gt;
* Any inclusion of &#039;&#039;srtestmacro.h&#039;&#039; in the user&#039;s source should be replaced by inclusion of &#039;&#039;srtest.h&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;srIMON&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;STRIDE_ENABLED&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#if STRIDE_ENABLED&lt;br /&gt;
... &lt;br /&gt;
#endif /*STRIDE_ENABLED*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any reference to &#039;&#039;imDELEGATE&#039;&#039; macro in the user&#039;s code should be replaced by reference to &#039;&#039;imINTERCEPT&#039;&#039; macro:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
int foo(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return imINTERCEPT(depend)(x) + y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any captured function for the purpose of interception (formally known as delegation) should be enhanced with the new [[scl_function]] attributes:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;GROUP_ID&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of Runtime Test Service &#039;&#039;srTestSuiteAddTest()&#039;&#039; API should be replaced with (renamed to) &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Build Integration ==&lt;br /&gt;
* Any Target compiler switch (preprocessor directive) using srIMON should be replaced with new one using STRIDE_ENABLED:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cc -DSTRIDE_ENABLED=1 -I ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Any use of [[s2sinstrument|STRIDE instrument tool]] &amp;quot;SPD[uoed]#&amp;lt;group_id&amp;gt;&amp;quot; mode option should be updated according to the new format &amp;quot;SPI[T]&amp;quot; (along with any needed changes to the associated [[scl_function]] pragma). This is necessary especially when as formally called Delegates were generated. For example:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=Dued#mygroup(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Should be changed to:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void foo(void);&lt;br /&gt;
#pragma scl_function(foo, &amp;quot;REFERENCE&amp;quot;, &amp;quot;EXPLICIT&amp;quot;, &amp;quot;mygroup&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; s2sinstrument --mode=PIT(foo) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* STRIDE Runtime install test causes linkage errors.&lt;br /&gt;
* Setting a [[Function_Double|function double]] may cause a crash.&lt;br /&gt;
* STRIDE Runtime file srtest.h may generate errors when compiled with old C++ compilers.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 Makefile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Intermittent palWait()/palNotify() failures when using [[Linux SDK]] in [[Linux_SDK#RTSINGLEPROC|multi-process]] mode.&lt;br /&gt;
* [[WinMobile SDK]] fails to build.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[Linux SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 palcfg.h&lt;br /&gt;
 palIO.c&lt;br /&gt;
 palOS.c&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following [[WinMobile SDK]] files have been modified:&#039;&#039;&lt;br /&gt;
 stride.mak&lt;br /&gt;
 palIO.c&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.01xx&amp;diff=9556</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=9556"/>
		<updated>2009-04-06T17:34:02Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Fixes */&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;
&#039;&#039;&#039;Important&#039;&#039;&#039;: An upgrade to the 3.0.0102 or newer release will require a re-issue of all license files as the underlying licensing scheme has changed. See the  [[STRIDE_3.0.01xx#3.0.0102|3.0.0102 Release Notes]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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 using an SCL Wizard: &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;
*[[Scl_struct_sized|Variable sized structures]] can now be specified for payload members and global types&lt;br /&gt;
*[[Scl_conform|Conformant arrays]] can now be specified for payload members and global types&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;
=== 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 (stride.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;
A new script (s2WindowsBuildTestApp.pl) to launch building the Windows Off-Target application from within STRIDE studio has been added. See [[Windows Off-Target SDK]] for more details.&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 [[Desktop 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;
*[9134] Misaligned brackets in IM&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;
Existing Host Apps developed against the old &#039;&#039;&#039;hostapphrt&#039;&#039;&#039; and &#039;&#039;&#039;hostapptrt&#039;&#039;&#039; libraries should be updated to use the new [[Windows Off-Target SDK]] as follows: &lt;br /&gt;
*replace %STRIDE_DIR%\inc with %STRIDE_DIR%\SDK\Windows\src and %STRIDE_DIR%\SDK\Runtime in your project&#039;s include path&lt;br /&gt;
*replace %STRIDE_DIR%\lib with %STRIDE_DIR%\SDK\Windows\lib in your project&#039;s library path&lt;br /&gt;
*replace hostapphrt/hostapptrt.lib with stride.lib in your library list&lt;br /&gt;
*replace the include of hostapp.h with include of stride.h &lt;br /&gt;
*replace all calls to HostAppXXX() following the samples in the [[Windows Off-Target SDK#Creating_Off-Target_App_Projects|SDK]]&lt;br /&gt;
*remove srHOST and srWIN32 preprocessor definitions&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
== 3.0.0101a ==&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.0101b ==&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_Overview|Samples]] has been implemented.&lt;br /&gt;
* In [[STRIDE Studio]] the processing of Trace information has been optimized.&lt;br /&gt;
* A set of simpler high level APIs were added to the [[Linux_SDK|PAL for Linux]].&lt;br /&gt;
* The Linux tools package now contains the [[Runtime_Reference|STRIDE Runtime]] source and a set of generic [[Platform_Abstraction_Layer|PAL]] implementations. &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;
&lt;br /&gt;
Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []: &lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]]. &lt;br /&gt;
* Several minor issues in [[AutoScript]]. &lt;br /&gt;
&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;
== 3.0.0103 ==&lt;br /&gt;
&lt;br /&gt;
* Implemented the new [[scl_struct_sized]] pragma for specifying variable sized structures.&lt;br /&gt;
* Added a new Sized Structure Wizard to Studio.&lt;br /&gt;
* Updated the [[scl_conform]] pragma to allow the specification of payload members.&lt;br /&gt;
* Added a new Conformant Array Wizard to Studio.&lt;br /&gt;
* Removed all frameworks and packages that had been part of previous StoneSteps releases. [[WorkspaceSetup.pl]] has been modified and no longer supports the notion of frameworks. This script can still be used to create canonical STRIDE workspaces for automated testing.&lt;br /&gt;
* Packaged two new platform SDKs, [[WinMobile SDK]] and [[Linux SDK]]. The previously introduced simple set of APIs in Linux PAL have been replaced by the new implemented in the Linux SDK.&lt;br /&gt;
* The [[Windows Off-Target SDK]] has been reimplemented. You need to update your Windows Off-Target Apps following the instructions in the [[Windows_Off-Target_SDK#Creating_Off-Target_App_Projects|SDK]].&lt;br /&gt;
* Packaged [[Build Tools]] as standalone archives (tgz or zip) for the supported platforms (Linux and Windows, currently).&lt;br /&gt;
* Packaged the STRIDE Runtime source files as a separate zip archive.  The same source is available in our [[:Category:SDKs|SDKs]], so customers only need this source package if they are not using a prepackaged SDK.&lt;br /&gt;
* The STRIDE host (STRIDE Desktop) installation now has no options - only the full installation is available.  This installs all available host components, including the [[Build Tools]] for Windows.&lt;br /&gt;
* We have made changes to the way we recommend customers validate their target STRIDE integration. See [[Verifying Installation]] for more information.&lt;br /&gt;
* Added/renamed several utility scripts in &#039;&#039;%STRIDE_DIR%/Scripts&#039;&#039;.&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0103&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, and &#039;&#039;&#039;3.02&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [1627] PAL_IO_BUF_MAX_SIZE exceeded.&lt;br /&gt;
* Several minor issues in STRIDE [[Build Tools]].&lt;br /&gt;
* Several minor issues in [[STRIDE Studio]].&lt;br /&gt;
* Unable to use Windows PAL for device driver testing.&lt;br /&gt;
* Deadlock in shared memory/multi-process enabled Linux applications.&lt;br /&gt;
* Compilation error STRIDE Runtime source when srCFG_VAR_ARGS_ENABLED not set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Most of the Runtime files have been modified due to sintax cleanup. The following new files have been added:&#039;&#039;&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Linkage problem with the STRIDE Runtime source when compiled along with customer source.&lt;br /&gt;
* Externally loaded in [[STRIDE Studio]] cross-platform built database may produce warnings.&lt;br /&gt;
* Syntax error in [[WinMobile SDK]] source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime files have been modified:&#039;&#039;&lt;br /&gt;
 srinstall.h&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* Syntax error (extra semicolons) in the STRIDE Runtime source. &#039;&#039;The following files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.c&lt;br /&gt;
&lt;br /&gt;
* Unable to upload in [[STRIDE Studio]] to portal space with spaces in the name.&lt;br /&gt;
* Missing settings folder and incorrect makefile in [[WinMobile SDK]] package. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
  stride.mak&lt;br /&gt;
* Minor issue in [[Linux SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  makefile&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103c ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard uses back slashes (&#039;&#039;&#039;..\myfile.h&#039;&#039;&#039;) as path delimiter when inserting include statements which may fail to compile with some targets.&lt;br /&gt;
* Due to restrictions in some embedded C runtime libraries Multi-Process support in [[Linux SDK]] doesn&#039;t work. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  palOS.c&lt;br /&gt;
  palcfg.h&lt;br /&gt;
* Incomplete resource cleanup on initilization failure in [[Linux SDK]] and [[WinMobile SDK]]. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  stride.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0103d ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] SCL Wizard may include the same header file more then ones.&lt;br /&gt;
* STRIDE Runtime C++ source fails to compile with limited capability compilers - no namespace support. Using compiler switch the user would be able to enable/disable that feature:&lt;br /&gt;
 -DsrCPP_HAS_NAMESPACE=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default it is enabled.&lt;br /&gt;
&#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  sr.h&lt;br /&gt;
  srtest.h&lt;br /&gt;
  srtest.cpp&lt;br /&gt;
&lt;br /&gt;
* Compilation of STRIDE Runtime source in strict ANSI C mode omits several warnings. &#039;&#039;The following source files have been modified:&#039;&#039;&lt;br /&gt;
  srinstall.h&lt;br /&gt;
  srinstall.c&lt;br /&gt;
  srmem.c&lt;br /&gt;
  srmsgmar.c&lt;br /&gt;
  srmsgptr.c&lt;br /&gt;
  srtime.h&lt;br /&gt;
  srtime.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104 ==&lt;br /&gt;
&lt;br /&gt;
* A set of new [[Test_Units#ASSERT.2FEXPECT_Macros|Test Unit Macros]] has been created to make it easy to perform assertions within target test code and automatically annotate resulting reports in case of failures. A new sample Test Macro sample has been added.&lt;br /&gt;
* [[Linux_SDK|Linux SDK]] has been updated for certain targets. &lt;br /&gt;
* The srCFG_VAR_ARGS_ENABLED configuration option has been removed. Now using compiler switches the user would be able to enable/disable certain C/C++ language and CRT specific feature: &lt;br /&gt;
 -DsrCRT_HAS_WCHAR_T=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_LONG=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_LONG_DBL=&amp;lt;0|1&amp;gt;&lt;br /&gt;
 -DsrCRT_HAS_VAR_ARGS=&amp;lt;0|1&amp;gt;&lt;br /&gt;
where 1=enable and 0=disable. By default they are all enabled.&lt;br /&gt;
&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.0104&#039;&#039;&#039; is compatible with the Runtime Versions &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, and &#039;&#039;&#039;3.03&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been modified:&#039;&#039;&lt;br /&gt;
 sr.h&lt;br /&gt;
 srapi.c&lt;br /&gt;
 srapirgl.h&lt;br /&gt;
 srapirgl.c&lt;br /&gt;
 srcfg.h&lt;br /&gt;
 srcgutil.h&lt;br /&gt;
 srcgutil.c&lt;br /&gt;
 srconn.c&lt;br /&gt;
 srinstall.h&lt;br /&gt;
 srinstall.c&lt;br /&gt;
 srtest.c&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestutil.h&lt;br /&gt;
 srutil.h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The following Runtime source files have been added:&#039;&#039;&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
 srutil.c&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104a ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[STRIDE Studio]] fails to automatically upload results to Portal.&lt;br /&gt;
* Unable to compile [[scl_test_cclass]] with pointer member data.&lt;br /&gt;
&lt;br /&gt;
== 3.0.0104b ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Defects corrected in STRIDE and the customer tracking number associated with them, if any, in brackets []:&#039;&#039;&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.01xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9384</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9384"/>
		<updated>2009-03-20T22:17:13Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Test Spaces */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Test Points]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new [[Test Points Sample]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Spaces ===&lt;br /&gt;
A new utility script is available to upload test results to a STRIDE Test Spaces server. (Consult your S2 Technologies representative for more information on STRIDE Test Spaces.) The [[s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Test Points]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The public Test Units &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Step 1 ==&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9383</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9383"/>
		<updated>2009-03-20T22:15:08Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Test Spaces */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Test Points]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new [[Test Points Sample]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Spaces ===&lt;br /&gt;
A new utility script is available to upload test results to a STRIDE Test Spaces server. (Consult your S2 Technologies representative for more information on STRIDE Test Spaces.) The [s2Publish.pl]] script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Test Points]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The public Test Units &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Step 1 ==&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9382</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9382"/>
		<updated>2009-03-20T22:14:34Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Usability Improvements */&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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Test Points]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new [[Test Points Sample]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
=== Test Spaces ===&lt;br /&gt;
A new utility script is available to upload test results to a STRIDE Test Spaces server. (Consult your S2 Technologies representative for more information on STRIDE Test Spaces.) The &#039;&#039;&#039;[s2Publish.pl]]&#039;&#039;&#039; script can be added to your STRIDE workspace script collection to upload your test results. Or, [[s2Publish.pl]] may be used from the command line.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Test Points]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The public Test Units &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Step 1 ==&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9381</id>
		<title>STRIDE 3.0.02xx</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=STRIDE_3.0.02xx&amp;diff=9381"/>
		<updated>2009-03-20T22:10:09Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* 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.02xx (code name &#039;&#039;Beacon&#039;s&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
Please review this information before upgrading from an earlier version. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;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.02xx. &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 many key usability improvements and bug fixes. &lt;br /&gt;
&lt;br /&gt;
== Usability Improvements ==&lt;br /&gt;
=== Test Double ===&lt;br /&gt;
Now in the context of a [[Test_Units|Test Unit]] a dependent function call can intercepted and replaced with a user defined [[Function Double]].&lt;br /&gt;
A set of new [[Test Double Samples]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Test Points ===&lt;br /&gt;
To support asynchronous tasks testing a set of new [[Test Points]] APIs has been implemented. In the context of a [[Test_Units|Test Unit]] test point expectations could be set and validated.&lt;br /&gt;
A new [[Test Points Sample]] for Test Units has been added.&lt;br /&gt;
&lt;br /&gt;
=== Build Integration ===&lt;br /&gt;
A new STRIDE_ENABLED compiler switch (preprocessor directive) has been added to allow control over the compilation of STRIDE injected source ([[Test_Units#Test_Macros|Test Macros]] or [[Name Mangling]] macros). The use of srIMON compiler switch (preprocessor directive) has been deprecated in favor of STRIDE_ENABLED.&lt;br /&gt;
&lt;br /&gt;
= Change Details  =&lt;br /&gt;
&lt;br /&gt;
== Fixes ==&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;
*In [[STRIDE Studio]] &amp;quot;Connectivity Options&amp;quot; dialog, &amp;quot;Serial Port&amp;quot; list is not automatically refreshed on open.&lt;br /&gt;
*In [[STRIDE Studio]] automatic results upload to portal fails when server address ends with / &lt;br /&gt;
*In [[STRIDE Studio]] &amp;quot;Link Statistics&amp;quot; dialog says &amp;quot;Not Connected&amp;quot; when there is a connection.&lt;br /&gt;
* [[Transport_Server_Component|STRIDE Transport Server]] consumes 100% CPU when Serial Transport enabled.&lt;br /&gt;
&lt;br /&gt;
== SCL Pragmas ==&lt;br /&gt;
*The syntax of [[scl_function]] and [[scl_func]] pragmas has been expanded with a set of new optional attributes that would allow specification of function interception.&lt;br /&gt;
&lt;br /&gt;
== Build Tools ==&lt;br /&gt;
*The options of &#039;&#039;&#039;[[s2sinstrument]]&#039;&#039;&#039; have been changed to support handling of [[Function Double]].&lt;br /&gt;
&lt;br /&gt;
== Runtime ==&lt;br /&gt;
* STRIDE Host Release &#039;&#039;&#039;3.0.02xx&#039;&#039;&#039; is compatible with the Runtime Version &#039;&#039;&#039;3.00&#039;&#039;&#039;, &#039;&#039;&#039;3.01&#039;&#039;&#039;, &#039;&#039;&#039;3.02&#039;&#039;&#039;, &#039;&#039;&#039;3.03&#039;&#039;&#039;, and &#039;&#039;&#039;3.04&#039;&#039;&#039;&lt;br /&gt;
* Implemented a set of routines to support [[Function Double]]&lt;br /&gt;
* Implemented a set of routines to support [[Test Points]]&lt;br /&gt;
* Implemented a set of [[Test_Units#Log_Macros|logging macros]]&lt;br /&gt;
* The public Test Units &#039;&#039;srTestSuiteAddTest()&#039;&#039; API has been renamed to &#039;&#039;[[Test_Units#srTestSuiteAddCase|srTestSuiteAddCase()]]&#039;&#039;&lt;br /&gt;
* &#039;&#039;Most of the Runtime, [[GRS]] and [[SLAP]] files have been modified. It is recomended that you update them all.&#039;&#039;&lt;br /&gt;
* &#039;&#039;The following Runtime files have been removed:&#039;&#039;&lt;br /&gt;
 srtest.cpp&lt;br /&gt;
 srtestmacros.h&lt;br /&gt;
 srtestmacros.c&lt;br /&gt;
 srtestmacros.cpp&lt;br /&gt;
* &#039;&#039;The following new Runtime files have been added:&#039;&#039;&lt;br /&gt;
 srtestpp.cpp&lt;br /&gt;
* &#039;&#039;All [[Linux SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
* &#039;&#039;All [[WinMobile SDK]] files have been modified.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Host ==&lt;br /&gt;
* The Host Runtime Daemon process (s2shost.exe) has been removed, its functionallity is now part of the Transport Server (s2stpsrv.exe).&lt;br /&gt;
&lt;br /&gt;
= Migration to 3.0.02xx  =&lt;br /&gt;
&lt;br /&gt;
Recommended steps for migration from a previous version: &lt;br /&gt;
&lt;br /&gt;
== Step 1 ==&lt;br /&gt;
&lt;br /&gt;
= Minor and Patch releases =&lt;br /&gt;
&lt;br /&gt;
== 3.0.0201a ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:3.0.02xx]]&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Initialize.pm&amp;diff=9380</id>
		<title>Studio:Initialize.pm</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Initialize.pm&amp;diff=9380"/>
		<updated>2009-03-20T21:54:35Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This package provides a simple procedural interface that simplifies the STRIDE initialization logic required for scripts that execute outside of the [[STRIDE Studio]] environment.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
use strict;&lt;br /&gt;
use Win32::TieRegistry(Delimiter=&amp;gt;&amp;quot;/&amp;quot;);&lt;br /&gt;
use File::Spec;&lt;br /&gt;
use Win32::OLE;&lt;br /&gt;
Win32::OLE-&amp;gt;Option(Warn =&amp;gt; 3);&lt;br /&gt;
   &lt;br /&gt;
use vars qw($StrideDirectory $StrideLibDirectory);&lt;br /&gt;
   &lt;br /&gt;
BEGIN {&lt;br /&gt;
    $StrideDirectory = $Registry-&amp;gt;{&amp;quot;LMachine/SOFTWARE/S2 Technologies/STRIDE/InstallDir&amp;quot;};&lt;br /&gt;
    $StrideLibDirectory = File::Spec-&amp;gt;catdir($StrideDirectory, &#039;lib&#039;, &#039;perl&#039;);  &lt;br /&gt;
}&lt;br /&gt;
use lib $StrideLibDirectory;&lt;br /&gt;
use S2S::Initialize qw(Init MakeReport);&lt;br /&gt;
    &lt;br /&gt;
Init(database =&amp;gt; &#039;../my.sidb&#039;, autoConnect =&amp;gt; 1);&lt;br /&gt;
# your code here&lt;br /&gt;
MakeReport(&#039;myResult.html&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
       &lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
The following functions are all exported on request only (EXPORT_OK).&lt;br /&gt;
&lt;br /&gt;
;Init (database =&amp;gt; &#039;path&#039;, autoConnect =&amp;gt; 1)&lt;br /&gt;
:When a script is executed outside of the STRIDE Studio context, this function creates and/or initializes several objects in the main namspace: ascript, reporter, testSuite, and transport.  If any of these objects already exist, they will be overwritten by Init.  If the autoConnect option is true, then this method will also initiate a target connection.  When the calling script is being executed in the Studio context, the initialization of the variables in main is skipped, but the autoConnect flag is still honored. This function returns 1 when the global objects have been set (when running outside of Studio&#039;s context) and 0 otherwise.&lt;br /&gt;
;Connect ([timeout])&lt;br /&gt;
:If not already connected, this initiates a connection to the target. An optional timeout (in seconds) argument can be given which specifies how long to wait for the connection to be established (default is 5 seconds). The Target connection parameters are specified in the [STRIDE_DIR]\bin\transport.cfg configuration file. The default values need to be adjusted to the test environment. Refer to the [[Transport_Configuration_File|Transport Configuration File page]] for more details.&lt;br /&gt;
;Disconnect&lt;br /&gt;
:Disconnects the target connection if current connected.&lt;br /&gt;
;MakeReport(&#039;path&#039;)&lt;br /&gt;
:This causes the current reporter data to be written to the file specified in &#039;path&#039;.  If the provided file is a relative path, it is assumed to be relative to the location of he currently executing script.&lt;br /&gt;
&lt;br /&gt;
;Publish(&#039;uploadPath&#039;, &#039;name&#039;, &#039;configPath&#039;)&lt;br /&gt;
:This uploads test results to a STRIDE Test Spaces server. If the optional &#039;uploadFile&#039; is specified, it is the upload source, otherwise the reporter object results are uploaded. If the optional &#039;name&#039; parameter exists, it is used to name the results set, otherwise a name will be created based on date/time. The default parameters in test_space.cfg (in the bin directory of your STRIDE installation) are used for uploading unless a &#039;configPath&#039; file is provided.&lt;br /&gt;
&lt;br /&gt;
[[Category: Libraries]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Initialize.pm&amp;diff=9379</id>
		<title>Studio:Initialize.pm</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Initialize.pm&amp;diff=9379"/>
		<updated>2009-03-20T21:53:29Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This package provides a simple procedural interface that simplifies the STRIDE initialization logic required for scripts that execute outside of the [[STRIDE Studio]] environment.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
use strict;&lt;br /&gt;
use Win32::TieRegistry(Delimiter=&amp;gt;&amp;quot;/&amp;quot;);&lt;br /&gt;
use File::Spec;&lt;br /&gt;
use Win32::OLE;&lt;br /&gt;
Win32::OLE-&amp;gt;Option(Warn =&amp;gt; 3);&lt;br /&gt;
   &lt;br /&gt;
use vars qw($StrideDirectory $StrideLibDirectory);&lt;br /&gt;
   &lt;br /&gt;
BEGIN {&lt;br /&gt;
    $StrideDirectory = $Registry-&amp;gt;{&amp;quot;LMachine/SOFTWARE/S2 Technologies/STRIDE/InstallDir&amp;quot;};&lt;br /&gt;
    $StrideLibDirectory = File::Spec-&amp;gt;catdir($StrideDirectory, &#039;lib&#039;, &#039;perl&#039;);  &lt;br /&gt;
}&lt;br /&gt;
use lib $StrideLibDirectory;&lt;br /&gt;
use S2S::Initialize qw(Init MakeReport);&lt;br /&gt;
    &lt;br /&gt;
Init(database =&amp;gt; &#039;../my.sidb&#039;, autoConnect =&amp;gt; 1);&lt;br /&gt;
# your code here&lt;br /&gt;
MakeReport(&#039;myResult.html&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
       &lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
The following functions are all exported on request only (EXPORT_OK).&lt;br /&gt;
&lt;br /&gt;
;Init (database =&amp;gt; &#039;path&#039;, autoConnect =&amp;gt; 1)&lt;br /&gt;
:When a script is executed outside of the STRIDE Studio context, this function creates and/or initializes several objects in the main namspace: ascript, reporter, testSuite, and transport.  If any of these objects already exist, they will be overwritten by Init.  If the autoConnect option is true, then this method will also initiate a target connection.  When the calling script is being executed in the Studio context, the initialization of the variables in main is skipped, but the autoConnect flag is still honored. This function returns 1 when the global objects have been set (when running outside of Studio&#039;s context) and 0 otherwise.&lt;br /&gt;
;Connect ([timeout])&lt;br /&gt;
:If not already connected, this initiates a connection to the target. An optional timeout (in seconds) argument can be given which specifies how long to wait for the connection to be established (default is 5 seconds). The Target connection parameters are specified in the [STRIDE_DIR]\bin\transport.cfg configuration file. The default values need to be adjusted to the test environment. Refer to the [[Transport_Configuration_File|Transport Configuration File page]] for more details.&lt;br /&gt;
;Disconnect&lt;br /&gt;
:Disconnects the target connection if current connected.&lt;br /&gt;
;MakeReport(&#039;path&#039;)&lt;br /&gt;
:This causes the current reporter data to be written to the file specified in &#039;path&#039;.  If the provided file is a relative path, it is assumed to be relative to the location of he currently executing script.&lt;br /&gt;
&lt;br /&gt;
;Publish(&#039;uploadPath&#039;, &#039;name&#039;, &#039;configPath&#039;)&lt;br /&gt;
:This uploads test results to the STRIDE Test Spaces server specified in the configuration file. If the optional &#039;uploadFile&#039; is specified, it is the upload source, otherwise the reporter object results are uploaded. If the optional &#039;name&#039; parameter exists, it is used to name the results set, otherwise a name will be created based on date/time. The default parameters in test_space.cfg (in the bin directory of your STRIDE installation) are used for uploading unless a &#039;configPath&#039; file is provided.&lt;br /&gt;
&lt;br /&gt;
[[Category: Libraries]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Studio:Transport_Configuration_File&amp;diff=9328</id>
		<title>Studio:Transport Configuration File</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Studio:Transport_Configuration_File&amp;diff=9328"/>
		<updated>2009-03-20T19:24:43Z</updated>

		<summary type="html">&lt;p&gt;Stevel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Transport configuration file contains default settings for the STRIDE [[Transport_Server_Component|Transport Server]], an out-of-process COM server that manages connections between host and target processes, and also provides loopback and diagnostic features. The configuration file is located under the STRIDE installation directory, in the &#039;&#039;&#039;bin&#039;&#039;&#039; folder, in the &amp;quot;transport.cfg&amp;quot; file. Users may edit this file to change configuration settings, but the file must not be moved or renamed.&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites  ===&lt;br /&gt;
&lt;br /&gt;
The Config::IniFiles package must be installed for perl scripts to read this formatted file. If using an ActiveState perl distribution, the command &#039;&amp;lt;b&amp;gt;ppm install config-inifiles&amp;lt;/b&amp;gt;&#039; will insure that it is installed.&lt;br /&gt;
&lt;br /&gt;
=== Sample configuration file ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
; Configuration file for STRIDE Unit runner (TestUnitRun.pl)&lt;br /&gt;
; (standard INI/CFG file format)&lt;br /&gt;
;&lt;br /&gt;
[General]&lt;br /&gt;
  ActiveTransport = Sockets (S2)&lt;br /&gt;
[Keep Alive]&lt;br /&gt;
  Active = yes&lt;br /&gt;
  Interval = 3000&lt;br /&gt;
  RetryCount = 2&lt;br /&gt;
  Timeout = 2000&lt;br /&gt;
[Sockets (S2)]&lt;br /&gt;
  DeviceAddress = localhost&lt;br /&gt;
  DevicePort = 8000&lt;br /&gt;
[Serial (S2)]&lt;br /&gt;
  SerialPort = COM2&lt;br /&gt;
  BaudRate = 57600&lt;br /&gt;
  DataBits = 8&lt;br /&gt;
  StopBits = 1&lt;br /&gt;
  Parity = none&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The &#039;&#039;&#039;General&#039;&#039;&#039; section ===&lt;br /&gt;
* The value of the &#039;&#039;&#039;ActiveTransport&#039;&#039;&#039; property should match a name provided by a transport DLL located in the default directory for transport DLLs, the &amp;quot;transports&amp;quot; folder under the STRIDE installation directory. This value should also match a Transport Properties section in the configuration file, described below.&lt;br /&gt;
&lt;br /&gt;
=== The &#039;&#039;&#039;Keep Alive&#039;&#039;&#039; section ===&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;Active&#039;&#039;&#039; property enables or disables the Runtime ping messages that get sent to the Target.&lt;br /&gt;
* The &#039;&#039;&#039;Interval&#039;&#039;&#039; property sets the time interval in milliseconds between pings.&lt;br /&gt;
* The &#039;&#039;&#039;RetryCount&#039;&#039;&#039; property sets the allowable number of ping failures. Once this number is exceeded, the connection to the target will be automatically closed.&lt;br /&gt;
* The &#039;&#039;&#039;Timeout&#039;&#039;&#039;property sets the ping timeout value in milliseconds. This controls the time that the Transport Server waits for a response to a ping message. If a response is not received within this time, it is considered a ping failure; once the number of ping failures specified in the Retry Count field is exceeded, the connection to the target is closed.&lt;br /&gt;
&lt;br /&gt;
=== The &#039;&#039;&#039;Transport Properties&#039;&#039;&#039; section ===&lt;br /&gt;
Each of these sections contain property settings that are specific to a particular transport DLL. By default, two transports are provided for - settings for the &#039;&#039;&#039;Socket&#039;&#039;&#039; and &#039;&#039;&#039;Serial&#039;&#039;&#039; transports that are installed with STRIDE. If a custom transport is added, make sure that the appropriate transport property names and values are represented in a new section, with the section name matching the custom transport name. Refer to the [[Media:s2sTransport.pdf|STRIDE Host Runtime Transport Specification]] document for more information on adding a custom transport DLL.&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Configuration]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Using_Test_Doubles&amp;diff=9216</id>
		<title>Using Test Doubles</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Using_Test_Doubles&amp;diff=9216"/>
		<updated>2009-02-12T19:10:11Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Creating Double Intercepts in the IM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The &#039;&#039;Function Double&#039;&#039; feature provides a means for intercepting C language functions on the target, and directing the call to a substitute function with identical parameters and return value. The use case is a unit test where the function under test uses a (&amp;quot;C&amp;quot;) function during its execution, and this dependency is simulated by a substitute or double function during testing. The unit test is able to control the substitution of the dependency during run time, and thereby verify the behavior of the function under test.&lt;br /&gt;
The following sample illustrates the relationship of the function under test and a dependency:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend.h&lt;br /&gt;
int depend(int x);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend.c&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
int depend(int x)&lt;br /&gt;
{&lt;br /&gt;
    return x + x;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// test.h&lt;br /&gt;
int test(int x, int y);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// test.c&lt;br /&gt;
#include &amp;quot;test.h&amp;quot;&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
int test(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return depend(x) * y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above sample, test() is the function under test and depend() is a dependency candidate for doubling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The steps required to achieve doubling of a dependency function are as follows:&lt;br /&gt;
#[[#Configuring_the_Double_Using_SCL|Configure the double parameters using SCL pragmas]] &lt;br /&gt;
#[[#Creating_Double_Intercepts_in_the_IM|Create the double intercepts in the IM]]&lt;br /&gt;
#[[#Switching_the_Double_Function_During_Runtime|Switch to/from the double function during runtime]]&lt;br /&gt;
&lt;br /&gt;
==Configuring the Double Using SCL==&lt;br /&gt;
&lt;br /&gt;
The syntax of the [[Scl_func|scl_func]] and [[Scl_function|scl_function]] pragmas have been expanded to include new &#039;&#039;&#039;&#039;&#039;optional&#039;&#039;&#039;&#039;&#039; attributes that allow the specification of function interception parameters. If these options are omitted, then the function is not a candidate for doubling.&lt;br /&gt;
&lt;br /&gt;
 #pragma scl_function(function-name [,&amp;lt;intercept&amp;gt;])&lt;br /&gt;
 #pragma scl_func(SUID, function-name [,&amp;lt;intercept&amp;gt;])&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;intercept&amp;gt;     = &amp;lt;context&amp;gt;, &amp;lt;name_mangling&amp;gt;, &amp;lt;group_id&amp;gt;&lt;br /&gt;
 &amp;lt;context&amp;gt;       = “REFERENCE” | “DEFINITION” (case insensitive)&lt;br /&gt;
 &amp;lt;name_mangling&amp;gt; = “EXPLICIT” | “IMPLICIT” (case insensitive)&lt;br /&gt;
 &amp;lt;group_id&amp;gt;      = [user defined identifier] (i.e. “^[A-Za-z_]\w*$”)&lt;br /&gt;
&lt;br /&gt;
===Context Option===&lt;br /&gt;
The &amp;lt;context&amp;gt; option in the syntax guide above allows either the &#039;&#039;&#039;&amp;quot;REFERENCE&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;&amp;quot;DEFINITION&amp;quot;&#039;&#039;&#039; strings. A &amp;quot;REFERENCE&amp;quot; context means the intercept is made at the function call, i.e., the intercept function is called instead of the dependency. A &amp;quot;DEFINITION&amp;quot; context means that the intercept is made at the function definition, i.e., the intercept function name is equivalent to the dependency name, and and is called in place of the dependency. These options are equivalent to the [[Intercept_Module#Owner.2FUser|user and owner delegate options]] that are in place for generating [[Intercept_Module#Delegate|delegates]].&lt;br /&gt;
&lt;br /&gt;
===Mangling Option===&lt;br /&gt;
The &amp;lt;name_mangling&amp;gt; option above allows either the &#039;&#039;&#039;&amp;quot;EXPLICIT&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;&amp;quot;IMPLICIT&amp;quot;&#039;&#039;&#039; strings. These settings are used to solve [[Name_Mangling#Name_Mangling_Conflicts|name mangling conflicts]] within your target source. &amp;quot;EXPLICIT&amp;quot; mangling requires the use of the &amp;quot;&#039;&#039;&#039;imINTERCEPT(&#039;&#039;&#039;&amp;amp;lt;function_name&amp;amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039;&amp;quot; macro, which explicitly mangles the name of &amp;quot;f()&amp;quot; to &amp;quot;__im_f()&amp;quot;. This macro is defined in the generated Intercept Module delegate mangling header file (xxxIM.h). Explicit mangling requires [[Intercept Module#Group ID|Group ID(s)]] to be defined (#define MyGroupID) in the source file of the caller/callee of the routine to protect against the inclusion of unnecessary defined types. &amp;quot;IMPLICIT&amp;quot; mangling performs no mangling, and requires none of these steps.&lt;br /&gt;
&lt;br /&gt;
===Group ID Option=== &lt;br /&gt;
As described in the above mangling option section, a [[Intercept Module#Group ID|Group ID]] is required for EXPLICIT mangling. The &amp;lt;group_id&amp;gt; string is specified in the pragma as shown. The Group ID(s) must be defined your source before including the Intercept Module delegate mangling header file (xxxIM.h). Please refer to an example of when and how this is done [[Name_Mangling#Mangling_Conflict_Example_2:_Two_users_of_a_routine.2C_f.28.29.2C_exist_in_the_same_source_file.2C_but_only_one_is_a_user_delegate|here]].&lt;br /&gt;
&lt;br /&gt;
===Dependency Interception===&lt;br /&gt;
In the above sample, depend() needs to be SCL captured and enabled for interception in a matter to be doubled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend_scl.h&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#pragma scl_function(depend, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;TEST_GROUP&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating Double Intercepts in the IM==&lt;br /&gt;
If a function has been configured as a double candidate using SCL as outlined in the above step, then the next step is to compile and bind using [[Build_Tools|STRIDE build tools]] and create the IM that contains the intercept for the double function. The options to [[S2sinstrument|s2sinstrument]] have been updated to support the function double feature as follows:&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;Option&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Change&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--default_mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;[#&amp;lt;group_id&amp;gt;]&lt;br /&gt;
| Deprecated&lt;br /&gt;
| Use the new format below.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--default_mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;&lt;br /&gt;
| New&lt;br /&gt;
| Optional. When present, sets the default generation mode. If not present the &amp;lt;mode&amp;gt; is assumed to be “I” for intercept-able functions and “S” for all others. &amp;lt;br&amp;gt;&lt;br /&gt;
The format of the &amp;lt;mode&amp;gt; is &amp;quot;SPI[T]&amp;quot;, where:&amp;lt;br&amp;gt;&lt;br /&gt;
“S” – stub&amp;lt;br&amp;gt;&lt;br /&gt;
“P” – proxy&amp;lt;br&amp;gt;&lt;br /&gt;
“I” – intercept&amp;lt;br&amp;gt;&lt;br /&gt;
“T” – trace &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;[#&amp;lt;group_id&amp;gt;] (&amp;lt;interface&amp;gt;[,&amp;lt;interface&amp;gt;…])&lt;br /&gt;
| Deprecated&lt;br /&gt;
| Use the new format below.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;(&amp;lt;interface&amp;gt;[,&amp;lt;interface&amp;gt;…])&lt;br /&gt;
| New&lt;br /&gt;
| Interface specific generation mode. The &amp;lt;mode&amp;gt; is the same as above. The &amp;lt;interface&amp;gt; is an interface name.&amp;lt;br&amp;gt;&lt;br /&gt;
This option could be repeated as many times as needed. It overrides any --default_mode option otherwise in effect.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where the allowed mode combinations are:&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;S&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;P&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Generate Stub&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Generate Proxy&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
| Generate Intercept for a Function Double (see &#039;&#039;&#039;&#039;&#039;Note&#039;&#039;&#039;&#039;&#039; below)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
| Generate Intercept for Dynamic Delegate&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
| Generate Intercept for Trace Delegate&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
| Generate Intercept for a Dynamic Delegate with Tracing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039; Currently the only option that supports Function Doubles is the &amp;quot;I&amp;quot; option &#039;&#039;by itself&#039;&#039;. Any other option combinations will not allow the double substitution at run-time as outlined in the next step. Also note that the absence of any options will default to the &amp;quot;I&amp;quot; option alone per interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once the IM has been successfully created, the source file containing the depend() implementation must be altered by defining the Group ID and including the generated Intercept Module delegate mangling header file (xxxIM.h):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend.c&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
/* define the Group ID before including the IM header */&lt;br /&gt;
#define TEST_GROUP&lt;br /&gt;
#include &amp;quot;strideIM.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int depend(int x)&lt;br /&gt;
{&lt;br /&gt;
    return x + x;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Switching the Double Function During Runtime==&lt;br /&gt;
The test unit will have access to the following STRIDE runtime macros for substituting a stub function for a double candidate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srDOUBLE_GET(fn, pfnDbl)&lt;br /&gt;
srDOUBLE_SET(fn, fnDbl)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
*&#039;&#039;&#039;fn&#039;&#039;&#039; is the function qualified by scl_function or scl_func as a dependency candidate, as above.&lt;br /&gt;
*&#039;&#039;&#039;pfnFbl&#039;&#039;&#039; is a pointer to a object of type srFnDbl_t, declared to hold the current value of the active double function.&lt;br /&gt;
*&#039;&#039;&#039;fnDbl&#039;&#039;&#039; is a function that is to be the current active double. &#039;&#039;The function passed in should &#039;&#039;&#039;always&#039;&#039;&#039; match the signature of the dependency candidate specified by &#039;&#039;&#039;fn&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039; the initial value of the current active double is always the dependency candidate function.&lt;br /&gt;
&lt;br /&gt;
These macros are defined in the STRIDE runtime header file &#039;&#039;&#039;sr.h&#039;&#039;&#039;. The following example shows how they are used in a [[Test_Units#C.2B.2B_Test_Classes|C++ test unit]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
extern &amp;quot;C&amp;quot; int depend_dbl(int a) { return a * a; }&lt;br /&gt;
&lt;br /&gt;
class Test: public stride::srTest&lt;br /&gt;
{ &lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
    Test()&lt;br /&gt;
    {&lt;br /&gt;
        srDOUBLE_GET(depend, &amp;amp;m_depend_dbl);&lt;br /&gt;
        srDOUBLE_SET(depend, depend_dbl);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ~Test()&lt;br /&gt;
    {&lt;br /&gt;
        srDOUBLE_SET(depend, m_depend_dbl);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    int test1(void) { return test(1, 2); }&lt;br /&gt;
    int test2(void) { return test(5, 6); }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   srFnDbl_t m_depend_dbl;&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
#pragma scl_test_class(Test)&lt;br /&gt;
#endif &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Reference]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Using_Test_Doubles&amp;diff=9215</id>
		<title>Using Test Doubles</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Using_Test_Doubles&amp;diff=9215"/>
		<updated>2009-02-12T19:09:14Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Creating Double Intercepts in the IM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The &#039;&#039;Function Double&#039;&#039; feature provides a means for intercepting C language functions on the target, and directing the call to a substitute function with identical parameters and return value. The use case is a unit test where the function under test uses a (&amp;quot;C&amp;quot;) function during its execution, and this dependency is simulated by a substitute or double function during testing. The unit test is able to control the substitution of the dependency during run time, and thereby verify the behavior of the function under test.&lt;br /&gt;
The following sample illustrates the relationship of the function under test and a dependency:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend.h&lt;br /&gt;
int depend(int x);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend.c&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
int depend(int x)&lt;br /&gt;
{&lt;br /&gt;
    return x + x;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// test.h&lt;br /&gt;
int test(int x, int y);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// test.c&lt;br /&gt;
#include &amp;quot;test.h&amp;quot;&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
int test(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return depend(x) * y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above sample, test() is the function under test and depend() is a dependency candidate for doubling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The steps required to achieve doubling of a dependency function are as follows:&lt;br /&gt;
#[[#Configuring_the_Double_Using_SCL|Configure the double parameters using SCL pragmas]] &lt;br /&gt;
#[[#Creating_Double_Intercepts_in_the_IM|Create the double intercepts in the IM]]&lt;br /&gt;
#[[#Switching_the_Double_Function_During_Runtime|Switch to/from the double function during runtime]]&lt;br /&gt;
&lt;br /&gt;
==Configuring the Double Using SCL==&lt;br /&gt;
&lt;br /&gt;
The syntax of the [[Scl_func|scl_func]] and [[Scl_function|scl_function]] pragmas have been expanded to include new &#039;&#039;&#039;&#039;&#039;optional&#039;&#039;&#039;&#039;&#039; attributes that allow the specification of function interception parameters. If these options are omitted, then the function is not a candidate for doubling.&lt;br /&gt;
&lt;br /&gt;
 #pragma scl_function(function-name [,&amp;lt;intercept&amp;gt;])&lt;br /&gt;
 #pragma scl_func(SUID, function-name [,&amp;lt;intercept&amp;gt;])&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;intercept&amp;gt;     = &amp;lt;context&amp;gt;, &amp;lt;name_mangling&amp;gt;, &amp;lt;group_id&amp;gt;&lt;br /&gt;
 &amp;lt;context&amp;gt;       = “REFERENCE” | “DEFINITION” (case insensitive)&lt;br /&gt;
 &amp;lt;name_mangling&amp;gt; = “EXPLICIT” | “IMPLICIT” (case insensitive)&lt;br /&gt;
 &amp;lt;group_id&amp;gt;      = [user defined identifier] (i.e. “^[A-Za-z_]\w*$”)&lt;br /&gt;
&lt;br /&gt;
===Context Option===&lt;br /&gt;
The &amp;lt;context&amp;gt; option in the syntax guide above allows either the &#039;&#039;&#039;&amp;quot;REFERENCE&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;&amp;quot;DEFINITION&amp;quot;&#039;&#039;&#039; strings. A &amp;quot;REFERENCE&amp;quot; context means the intercept is made at the function call, i.e., the intercept function is called instead of the dependency. A &amp;quot;DEFINITION&amp;quot; context means that the intercept is made at the function definition, i.e., the intercept function name is equivalent to the dependency name, and and is called in place of the dependency. These options are equivalent to the [[Intercept_Module#Owner.2FUser|user and owner delegate options]] that are in place for generating [[Intercept_Module#Delegate|delegates]].&lt;br /&gt;
&lt;br /&gt;
===Mangling Option===&lt;br /&gt;
The &amp;lt;name_mangling&amp;gt; option above allows either the &#039;&#039;&#039;&amp;quot;EXPLICIT&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;&amp;quot;IMPLICIT&amp;quot;&#039;&#039;&#039; strings. These settings are used to solve [[Name_Mangling#Name_Mangling_Conflicts|name mangling conflicts]] within your target source. &amp;quot;EXPLICIT&amp;quot; mangling requires the use of the &amp;quot;&#039;&#039;&#039;imINTERCEPT(&#039;&#039;&#039;&amp;amp;lt;function_name&amp;amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039;&amp;quot; macro, which explicitly mangles the name of &amp;quot;f()&amp;quot; to &amp;quot;__im_f()&amp;quot;. This macro is defined in the generated Intercept Module delegate mangling header file (xxxIM.h). Explicit mangling requires [[Intercept Module#Group ID|Group ID(s)]] to be defined (#define MyGroupID) in the source file of the caller/callee of the routine to protect against the inclusion of unnecessary defined types. &amp;quot;IMPLICIT&amp;quot; mangling performs no mangling, and requires none of these steps.&lt;br /&gt;
&lt;br /&gt;
===Group ID Option=== &lt;br /&gt;
As described in the above mangling option section, a [[Intercept Module#Group ID|Group ID]] is required for EXPLICIT mangling. The &amp;lt;group_id&amp;gt; string is specified in the pragma as shown. The Group ID(s) must be defined your source before including the Intercept Module delegate mangling header file (xxxIM.h). Please refer to an example of when and how this is done [[Name_Mangling#Mangling_Conflict_Example_2:_Two_users_of_a_routine.2C_f.28.29.2C_exist_in_the_same_source_file.2C_but_only_one_is_a_user_delegate|here]].&lt;br /&gt;
&lt;br /&gt;
===Dependency Interception===&lt;br /&gt;
In the above sample, depend() needs to be SCL captured and enabled for interception in a matter to be doubled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend_scl.h&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#pragma scl_function(depend, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;TEST_GROUP&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating Double Intercepts in the IM==&lt;br /&gt;
If a function has been configured as a double candidate using SCL as outlined in the above step, then the next step is to compile and bind using [[Build_Tools|STRIDE build tools]] and create the IM that contains the intercept for the double function. The options to [[S2sinstrument|s2sinstrument]] have been updated to support the function double feature as follows:&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;Option&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Change&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--default_mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;[#&amp;lt;group_id&amp;gt;]&lt;br /&gt;
| Deprecated&lt;br /&gt;
| Use the new format below.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--default_mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;&lt;br /&gt;
| New&lt;br /&gt;
| Optional. When present, sets the default generation mode. If not present the &amp;lt;mode&amp;gt; is assumed to be “I” for intercept-able functions and “S” for all others. &amp;lt;br&amp;gt;&lt;br /&gt;
The format of the &amp;lt;mode&amp;gt; is &amp;quot;SPI[T]&amp;quot;, where:&amp;lt;br&amp;gt;&lt;br /&gt;
“S” – stub&amp;lt;br&amp;gt;&lt;br /&gt;
“P” – proxy&amp;lt;br&amp;gt;&lt;br /&gt;
“I” – intercept&amp;lt;br&amp;gt;&lt;br /&gt;
“T” – trace &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;[#&amp;lt;group_id&amp;gt;] (&amp;lt;interface&amp;gt;[,&amp;lt;interface&amp;gt;…])&lt;br /&gt;
| Deprecated&lt;br /&gt;
| Use the new format below.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;(&amp;lt;interface&amp;gt;[,&amp;lt;interface&amp;gt;…])&lt;br /&gt;
| New&lt;br /&gt;
| Interface specific generation mode. The &amp;lt;mode&amp;gt; is the same as above. The &amp;lt;interface&amp;gt; is an interface name.&amp;lt;br&amp;gt;&lt;br /&gt;
This option could be repeated as many times as needed. It overrides any --default_mode option otherwise in effect.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where the allowed mode combinations are:&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;S&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;P&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Generate Stub&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Generate Proxy&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
| Generate Intercept for a Function Double (see &#039;&#039;&#039;&#039;&#039;Note&#039;&#039;&#039;&#039;&#039; below)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
| Generate Intercept for Dynamic Delegate&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
| Generate Intercept for Trace Delegate&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
| Generate Intercept for a Dynamic Delegate with Tracing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039; Currently the only option that supports Function Doubles is the &amp;quot;I&amp;quot; option &#039;&#039;by itself&#039;&#039;. Any other option combinations will not allow the double substitution at run-time as outlined in the next step. Also note that the absence of any options will default to the &amp;quot;I&amp;quot; option alone per interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once the IM has been successfully created, the source file containing the depend() implementation must be altered by defining the Group ID and including the generated IM header file (&amp;quot;&amp;lt;IM_Name&amp;gt;IM.h&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend.c&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
/* define the Group ID before including the IM header */&lt;br /&gt;
#define TEST_GROUP&lt;br /&gt;
#include &amp;quot;strideIM.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int depend(int x)&lt;br /&gt;
{&lt;br /&gt;
    return x + x;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Switching the Double Function During Runtime==&lt;br /&gt;
The test unit will have access to the following STRIDE runtime macros for substituting a stub function for a double candidate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srDOUBLE_GET(fn, pfnDbl)&lt;br /&gt;
srDOUBLE_SET(fn, fnDbl)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
*&#039;&#039;&#039;fn&#039;&#039;&#039; is the function qualified by scl_function or scl_func as a dependency candidate, as above.&lt;br /&gt;
*&#039;&#039;&#039;pfnFbl&#039;&#039;&#039; is a pointer to a object of type srFnDbl_t, declared to hold the current value of the active double function.&lt;br /&gt;
*&#039;&#039;&#039;fnDbl&#039;&#039;&#039; is a function that is to be the current active double. &#039;&#039;The function passed in should &#039;&#039;&#039;always&#039;&#039;&#039; match the signature of the dependency candidate specified by &#039;&#039;&#039;fn&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039; the initial value of the current active double is always the dependency candidate function.&lt;br /&gt;
&lt;br /&gt;
These macros are defined in the STRIDE runtime header file &#039;&#039;&#039;sr.h&#039;&#039;&#039;. The following example shows how they are used in a [[Test_Units#C.2B.2B_Test_Classes|C++ test unit]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
extern &amp;quot;C&amp;quot; int depend_dbl(int a) { return a * a; }&lt;br /&gt;
&lt;br /&gt;
class Test: public stride::srTest&lt;br /&gt;
{ &lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
    Test()&lt;br /&gt;
    {&lt;br /&gt;
        srDOUBLE_GET(depend, &amp;amp;m_depend_dbl);&lt;br /&gt;
        srDOUBLE_SET(depend, depend_dbl);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ~Test()&lt;br /&gt;
    {&lt;br /&gt;
        srDOUBLE_SET(depend, m_depend_dbl);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    int test1(void) { return test(1, 2); }&lt;br /&gt;
    int test2(void) { return test(5, 6); }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   srFnDbl_t m_depend_dbl;&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
#pragma scl_test_class(Test)&lt;br /&gt;
#endif &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Reference]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
	<entry>
		<id>https://www.stridewiki.com/index.php?title=Using_Test_Doubles&amp;diff=9213</id>
		<title>Using Test Doubles</title>
		<link rel="alternate" type="text/html" href="https://www.stridewiki.com/index.php?title=Using_Test_Doubles&amp;diff=9213"/>
		<updated>2009-02-12T19:00:19Z</updated>

		<summary type="html">&lt;p&gt;Stevel: /* Creating Double Intercepts in the IM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The &#039;&#039;Function Double&#039;&#039; feature provides a means for intercepting C language functions on the target, and directing the call to a substitute function with identical parameters and return value. The use case is a unit test where the function under test uses a (&amp;quot;C&amp;quot;) function during its execution, and this dependency is simulated by a substitute or double function during testing. The unit test is able to control the substitution of the dependency during run time, and thereby verify the behavior of the function under test.&lt;br /&gt;
The following sample illustrates the relationship of the function under test and a dependency:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend.h&lt;br /&gt;
int depend(int x);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend.c&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
int depend(int x)&lt;br /&gt;
{&lt;br /&gt;
    return x + x;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// test.h&lt;br /&gt;
int test(int x, int y);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// test.c&lt;br /&gt;
#include &amp;quot;test.h&amp;quot;&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
int test(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    return depend(x) * y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above sample, test() is the function under test and depend() is a dependency candidate for doubling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The steps required to achieve doubling of a dependency function are as follows:&lt;br /&gt;
#[[#Configuring_the_Double_Using_SCL|Configure the double parameters using SCL pragmas]] &lt;br /&gt;
#[[#Creating_Double_Intercepts_in_the_IM|Create the double intercepts in the IM]]&lt;br /&gt;
#[[#Switching_the_Double_Function_During_Runtime|Switch to/from the double function during runtime]]&lt;br /&gt;
&lt;br /&gt;
==Configuring the Double Using SCL==&lt;br /&gt;
&lt;br /&gt;
The syntax of the [[Scl_func|scl_func]] and [[Scl_function|scl_function]] pragmas have been expanded to include new &#039;&#039;&#039;&#039;&#039;optional&#039;&#039;&#039;&#039;&#039; attributes that allow the specification of function interception parameters. If these options are omitted, then the function is not a candidate for doubling.&lt;br /&gt;
&lt;br /&gt;
 #pragma scl_function(function-name [,&amp;lt;intercept&amp;gt;])&lt;br /&gt;
 #pragma scl_func(SUID, function-name [,&amp;lt;intercept&amp;gt;])&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;intercept&amp;gt;     = &amp;lt;context&amp;gt;, &amp;lt;name_mangling&amp;gt;, &amp;lt;group_id&amp;gt;&lt;br /&gt;
 &amp;lt;context&amp;gt;       = “REFERENCE” | “DEFINITION” (case insensitive)&lt;br /&gt;
 &amp;lt;name_mangling&amp;gt; = “EXPLICIT” | “IMPLICIT” (case insensitive)&lt;br /&gt;
 &amp;lt;group_id&amp;gt;      = [user defined identifier] (i.e. “^[A-Za-z_]\w*$”)&lt;br /&gt;
&lt;br /&gt;
===Context Option===&lt;br /&gt;
The &amp;lt;context&amp;gt; option in the syntax guide above allows either the &#039;&#039;&#039;&amp;quot;REFERENCE&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;&amp;quot;DEFINITION&amp;quot;&#039;&#039;&#039; strings. A &amp;quot;REFERENCE&amp;quot; context means the intercept is made at the function call, i.e., the intercept function is called instead of the dependency. A &amp;quot;DEFINITION&amp;quot; context means that the intercept is made at the function definition, i.e., the intercept function name is equivalent to the dependency name, and and is called in place of the dependency. These options are equivalent to the [[Intercept_Module#Owner.2FUser|user and owner delegate options]] that are in place for generating [[Intercept_Module#Delegate|delegates]].&lt;br /&gt;
&lt;br /&gt;
===Mangling Option===&lt;br /&gt;
The &amp;lt;name_mangling&amp;gt; option above allows either the &#039;&#039;&#039;&amp;quot;EXPLICIT&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;&amp;quot;IMPLICIT&amp;quot;&#039;&#039;&#039; strings. These settings are used to solve [[Name_Mangling#Name_Mangling_Conflicts|name mangling conflicts]] within your target source. &amp;quot;EXPLICIT&amp;quot; mangling requires the use of the &amp;quot;&#039;&#039;&#039;imINTERCEPT(&#039;&#039;&#039;&amp;amp;lt;function_name&amp;amp;gt;&#039;&#039;&#039;)&#039;&#039;&#039;&amp;quot; macro, which explicitly mangles the name of &amp;quot;f()&amp;quot; to &amp;quot;__im_f()&amp;quot;. This macro is defined in the generated Intercept Module delegate mangling header file (xxxIM.h). Explicit mangling requires [[Intercept Module#Group ID|Group ID(s)]] to be defined (#define MyGroupID) in the source file of the caller/callee of the routine to protect against the inclusion of unnecessary defined types. &amp;quot;IMPLICIT&amp;quot; mangling performs no mangling, and requires none of these steps.&lt;br /&gt;
&lt;br /&gt;
===Group ID Option=== &lt;br /&gt;
As described in the above mangling option section, a [[Intercept Module#Group ID|Group ID]] is required for EXPLICIT mangling. The &amp;lt;group_id&amp;gt; string is specified in the pragma as shown. The Group ID(s) must be defined your source before including the Intercept Module delegate mangling header file (xxxIM.h). Please refer to an example of when and how this is done [[Name_Mangling#Mangling_Conflict_Example_2:_Two_users_of_a_routine.2C_f.28.29.2C_exist_in_the_same_source_file.2C_but_only_one_is_a_user_delegate|here]].&lt;br /&gt;
&lt;br /&gt;
===Dependency Interception===&lt;br /&gt;
In the above sample, depend() needs to be SCL captured and enabled for interception in a matter to be doubled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend_scl.h&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#pragma scl_function(depend, &amp;quot;DEFINITION&amp;quot;, &amp;quot;IMPLICIT&amp;quot;, &amp;quot;TEST_GROUP&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating Double Intercepts in the IM==&lt;br /&gt;
If a function has been configured as a double candidate using SCL as outlined in the above step, then the next step is to compile and bind using [[Build_Tools|STRIDE build tools]] and create the IM that contains the intercept for the double function. The options to [[S2sinstrument|s2sinstrument]] have been updated to support the function double feature as follows:&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;Option&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Change&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--default_mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;[#&amp;lt;group_id&amp;gt;]&lt;br /&gt;
| Deprecated&lt;br /&gt;
| Use the new format below.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--default_mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;&lt;br /&gt;
| New&lt;br /&gt;
| Optional. When present, sets the default generation mode. If not present the &amp;lt;mode&amp;gt; is assumed to be “I” for intercept-able functions and “S” for all others. &amp;lt;br&amp;gt;&lt;br /&gt;
The format of the &amp;lt;mode&amp;gt; is &amp;quot;SPI[T]&amp;quot;, where:&amp;lt;br&amp;gt;&lt;br /&gt;
“S” – stub&amp;lt;br&amp;gt;&lt;br /&gt;
“P” – proxy&amp;lt;br&amp;gt;&lt;br /&gt;
“I” – intercept&amp;lt;br&amp;gt;&lt;br /&gt;
“T” – trace &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;[#&amp;lt;group_id&amp;gt;] (&amp;lt;interface&amp;gt;[,&amp;lt;interface&amp;gt;…])&lt;br /&gt;
| Deprecated&lt;br /&gt;
| Use the new format below.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;--mode&#039;&#039;&#039;=&amp;lt;mode&amp;gt;(&amp;lt;interface&amp;gt;[,&amp;lt;interface&amp;gt;…])&lt;br /&gt;
| New&lt;br /&gt;
| Interface specific generation mode. The &amp;lt;mode&amp;gt; is the same as above. The &amp;lt;interface&amp;gt; is an interface name.&amp;lt;br&amp;gt;&lt;br /&gt;
This option could be repeated as many times as needed. It overrides any --default_mode option otherwise in effect.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where the allowed mode combinations are:&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;S&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;P&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;I&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;T&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Generate Stub&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Generate Proxy&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
| Generate Intercept for a Function Double (see &#039;&#039;&#039;&#039;&#039;Note&#039;&#039;&#039;&#039;&#039; below)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
|&lt;br /&gt;
| Generate Intercept for Dynamic Delegate&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
| Generate Intercept for Trace Delegate&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
| Generate Intercept for a Dynamic Delegate with Tracing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039; Currently the only option that supports Function Doubles is the &amp;quot;I&amp;quot; option &#039;&#039;by itself&#039;&#039;. Any other option combinations will not allow the double substitution at run-time as outlined in the next step. Also note that the absence of any options will default to the &amp;quot;I&amp;quot; option alone per interface.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once the IM is successfully created alter the source file containing the depend() implementation by incluting the generated strideIM.h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// depend.c&lt;br /&gt;
#include &amp;quot;depend.h&amp;quot;&lt;br /&gt;
/* include this */&lt;br /&gt;
#define TEST_GROUP&lt;br /&gt;
#include &amp;quot;strideIM.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int depend(int x)&lt;br /&gt;
{&lt;br /&gt;
    return x + x;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Switching the Double Function During Runtime==&lt;br /&gt;
The test unit will have access to the following STRIDE runtime macros for substituting a stub function for a double candidate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
srDOUBLE_GET(fn, pfnDbl)&lt;br /&gt;
srDOUBLE_SET(fn, fnDbl)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
*&#039;&#039;&#039;fn&#039;&#039;&#039; is the function qualified by scl_function or scl_func as a dependency candidate, as above.&lt;br /&gt;
*&#039;&#039;&#039;pfnFbl&#039;&#039;&#039; is a pointer to a object of type srFnDbl_t, declared to hold the current value of the active double function.&lt;br /&gt;
*&#039;&#039;&#039;fnDbl&#039;&#039;&#039; is a function that is to be the current active double. &#039;&#039;The function passed in should &#039;&#039;&#039;always&#039;&#039;&#039; match the signature of the dependency candidate specified by &#039;&#039;&#039;fn&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039; the initial value of the current active double is always the dependency candidate function.&lt;br /&gt;
&lt;br /&gt;
These macros are defined in the STRIDE runtime header file &#039;&#039;&#039;sr.h&#039;&#039;&#039;. The following example shows how they are used in a [[Test_Units#C.2B.2B_Test_Classes|C++ test unit]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;srtest.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
extern &amp;quot;C&amp;quot; int depend_dbl(int a) { return a * a; }&lt;br /&gt;
&lt;br /&gt;
class Test: public stride::srTest&lt;br /&gt;
{ &lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
    Test()&lt;br /&gt;
    {&lt;br /&gt;
        srDOUBLE_GET(depend, &amp;amp;m_depend_dbl);&lt;br /&gt;
        srDOUBLE_SET(depend, depend_dbl);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ~Test()&lt;br /&gt;
    {&lt;br /&gt;
        srDOUBLE_SET(depend, m_depend_dbl);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    int test1(void) { return test(1, 2); }&lt;br /&gt;
    int test2(void) { return test(5, 6); }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   srFnDbl_t m_depend_dbl;&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
#ifdef _SCL&lt;br /&gt;
#pragma scl_test_class(Test)&lt;br /&gt;
#endif &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Reference]]&lt;/div&gt;</summary>
		<author><name>Stevel</name></author>
	</entry>
</feed>