# DADiSP 6.5 B05 Release Notes

#### SPL Enhancements

#### Static Variables

Static variables are persistent from one call of a function to
another. Static variables can be local to a particular function or
local to all functions within particular SPL file. A static
variable behaves like a local variable in that variable is only
accessible to the function that declares the static variable or if
file based, to the functions declared within the same file.

For example:

sumval(x)
{
static sum = 0;
sum += x;
return(sum);
} |

The function

*sumval* returns the sum of the current input value and
all previous values. The static variable

*sum* behaves like a local
variable except it is persistent from one call to

*sumval* to
another.

Static variables can be file based such that all functions within
the same SPL file have access to the variable.

// sumval.spl
static sum = 0;
sumval(x)
{
sum += x;
return(sum);
}
currsum()
{
return(sum);
} |

In this case,

*sumval* behaves identically to the previous example and

*currsum*
returns the current sum.

#### File Based Global Variables

Global variables can be specified on a file basis.

// myfun1.spl
extern a = 10;
extern b = 20;
myfun1()
{
return(b);
}
myfun2(x)
{
a = x;
b = a * a;
}
c1 = myfun1();
c1 == 20;
myfun2(5);
a == 5;
b == 25;
c2 = myfun1();
c2 == 25; |

Variables

*a* and

*b* are global variables accessible to both functions

*myfun1* and

*myfun2*. File based external variables are initialized when
the SPL function is first loaded, whether automatically loaded or explicitly loaded.

#### Custom Dialog Forms

The

*@form* and

*@endform* keywords enable custom dialog
box templates to directly embed related SPL code in the same file. For
example, the following dialog generates a random series with user
defined length and delta X values:

// test.pan - form based dialog
@panel
@form
// default initial length and deltax if not defined
{defvar("_form_dlen", 1000)}
{defvar("_form_dx", 0.01)}
Test Menu
// get integer value, "%" sets value immediately
Length: <% w{25}>~_form_dlen = <{_form_dlen}>~input(2)
// get real value, "%" sets value immediately
DeltaX: <% w{25}>~_form_dx = <{_form_dx}> ~input(1)
<L>
// generate data when OK pressed
~form_gendata(_form_dlen, _form_dx)
@endform
// SPL code
form_gendata(len, dx)
{
// format and set the current window formula
eval(sprintf("W0 := gnorm(%d, %g)", len, dx));
} |

The above form creates the following custom dialog box:

When the OK button is pressed, the embedded

*form_gendata()* function
executes and produces a formula in the current window based on the
input values.

Any SPL code can be embedded in the form after the

*@endform*
statement.

#### New @@ Concatenate Operator

*a = b @@ c* is more compact and equivalent to

*a = concat(b, c)*
#### New @= Append Operator

*a @= b* is equivalent to

*append(a, b)*. The

*@=* operator appends the
series

*b* to the end of series

*a* in place.

*a @= b* is much faster
than

*a = a @@ b* for large series because

*@=* operates on the
existing series whereas

*@@* creates and assigns a new series.

#### Compatible Operators

The

*.** scalar multiply

*./* scalar divide and

*.'* real transpose operators
are supported for convienence with legacy M file code.