|
Release versioning of the scripting engine will no longer depend upon the build
increment to identify minor revisions. This mechanism renders the "version"
pragma directive virtually unusable as it is not designed to regard point
build information. Henceforth, while the build increment may be used
internally, the minor designator (and, when appropriate, the major designator)
will be incremented for each release to once again enable accurate versioning
within scripts. Point build increment information will only be displayed in
test releases.
|
|
The Object Agent Interface has been altered slightly and is now versioned
to prevent Object Agent libraries from being loaded that do not support the
current interface specifications. Appendix B of the LScript documentation
has been updated to reflect these changes and to document the versioning
mechanism.
|
|
A new inline selection mechanism has been added to the language syntax.
An "inline index" is now available for use that allows you to select an
item from a list of values based upon an expression that must evaluate
to an integer index value.
The syntax of the inline index is quite similar to that of the inline
selection mechanism. Whereas inline selection utilizes the "?:" token
pair to perform boolean (true/false) selection:
pinfo[count][WOBBLEMAG] = wobble ? 30 : 10;
The inline index uses the "?" operator to perform its indexing selection:
pinfo[count][WOBBLEMAG] = wobble ? @30,15,10@;
If the index value is less than 1 or greater than the highest offset of
the list of values provided, then a 'nil' value will be returned.
Any data type capable of being indexed can be used on the right side of
the "?" operator, while any expression that evaluates to an integer index
value can be used on the left:
str = "This is my string";
x = selectChar() ? str; // if selectChar() returns 6, x becomes "i"
which = 1 ? 15; // 'which' becomes 15
which = 3 ? 15; // 'which' becomes 'nil'
mySel = offset[5] ? @1,2,3,4,5,6,7@;
mySel = offset[5] ? offset; // use element #5 value to select
// another element!
|
|
Corrections have been made to the Lscript Pre-processor to help keep line
numbers synchronized for error-reporting purposes when "@insert" files are
used.
|
|
The Modeler Layer functions (getempty(), getemptyfg(), getemptybg(), etc.)
have been altered to return a single 'nil' value instead of an array of
'nil' values if conditions warrant. This is intended to cut down on memory
consumption by not creating an array, and to speed up the function calls
themselves.
bg = getempty()
if(bg[1] == nil) // no longer valid
if(bg == nil) // now, the correct way to check
|
|
Under Intel platforms, the configuration system has been enhanced to first
check for registry key values in the HKEY_CURRENT_USER\\Software\\NewTek\\LScript
global registry entry before going to the plug-in specific entry below it.
This allows for values to be established that can apply to ALL classes of
LScript plug-in, instead of having to duplicate entries across all registry
entries.
For instance, I personally place my LibraryPath key setting into this
registry entry so that all LScript plug-ins (both Modeler and Layout) look
in the same location(s) for insert files and shared libraries.
(When the Visual C++ compiler is updated by Microsoft beyond v4.0 on the
DEC Alpha platform, this mechanism will also work for that platform. To
date, the Visual C++ compiler for DEC Alpha does not even give software
developers access to the registry because of its age.)
|
|
The vmag() function now correctly accepts a vector data type as well as
three numeric data values.
|
|
A 'nil' return value is now properly supported from Object Agents.
|
|
Corrected stack indexing in the arithmetic minus (-) code.
|
|
Corrected the arithmetic multiply (*) code to return an integer value
when two integer values are multiplied, instead of a floating point
value.
|
|
The internal structure of compiled scripts has been reformatted to support
new language features and to correct bugs. Because of this, existing
compiled scripts must be recompiled in order to be used with the new
run-time plug-ins.
|
|
The IPC mechanism has been enhanced to support array queue members.
These new member types are declared and accessed just as any local
LScript array:
@insert "/lights.inc"
...
// 'TOTALLIGHTS' defined as 200 in "lights.inc"
expose light[TOTALLIGHTS] as LightQueue;
...
for(x = 1;x <= TOTALLIGHTS;x++)
light[x] = <0,0,0>;
As each array element consumes a queue slot entry, there is a practical
limit to the size of the array, dictated by the resources available in
your operating system.
|
|
A new Layout script compiler and run-time plug-ins have been added to
the LScript family of scripting plug-ins. The Layout compiler is a
Layout Generic plug-in that is non-architecture-specific. Layout run-time
plug-ins support Image Filter, Object Replacement, Item Motion,
Displacement Map, and Procedural Texture architectures.
|
|
The Modeler run-time plug-in has had a filename change. The original
file 'ls-rt.p' has been changed to 'lsrt-md.p' to conform to the new
run-time plug-in naming standard.
|
|
Numerous other internal corrections and enhancements have been effected
to remove bugs and support changes and additions to the LScript family
(for instance, support for the needs of the new Layout compiler).
|