The index validation code for the generalopts[] array was excluding the last element
([7]) in the array.
|
Run-time parsing code would begin producing processing delays that were somewhat
logarithmically proprotional to the number of lines of code in the compiled script.
It manifested at a certain script size (the start of the upward curve of the
logarithmic line), and load times would gradually increase thereafter.
|
Due to their storage and retrieval from binary disc files, the 'true' and 'false'
constant values were not always being evaluated correctly in the run-time
environment.
|
Tab page selections made prior to posting a Requester were being overridden and
initialized to the first page in the reqpost() code.
|
The Displacement Object Agent's 'source' data member was being hidden by a break in
the program's logic flow.
|
The watchdog mechanism used to prevent infinite recursion in refresh callbacks
(activated when setvalue() is called for a control while in that control's active
refresh UDF) was somehow broken during v2.6 development. This has been corrected.
|
Single-element return values (usually 'nil') applied to associative assignments would
generate an "illegal assignment type" error message. Now in such cases all assignment
variables are simply left with their initialized 'nil' values and no error is
generated.
|
Assignment of sub-arrays to array elements, for example:
PolysPoints[i][5] = polyinfo(PolyNum[i]);
were not being marked as the correct type on assignment. This left them vulnerable
to the LScript garbage collector, causing the arrays to be reclaimed and cleared at
the end of the assignment statement.
|
The ctlgroup() functionality, apparently long broken, has been fixed.
|
Script re-entrancy would be a problem when a redraw callback returned control to
Layout while it was processing (for instance, when an info() call was made to
pause script execution). Re-entrancy during this situation is now watched for,
and avoided.
|
Attempting to display a PointID in Layout using info() (or warn() or error()) would
result in a crash.
|
Some existing compiled Modeler LScripts could experience problems with the way
the automattic points[] and polygons[] arrays are now managed by the LScript
engine. This problem would most often manifest as the "attempt to access undeclared
array ..." error message.
Code has been added to trap this condition when loading compiled scripts and to
fix up their references to these arrays.
|
Negative numbers in the "Days until expiration" and "Usage count" fields of the
LScript compiler interface were not being disallowed.
|
The new binary() function would not return documented results when the maximum
bit size in the second argument matched the number of bits in an integer (i.e.,
[sizeof(int) * 8] on any platform).
|
The Scene Object Agent's animfilename data member was incorrectly mapped to the
current scene's name.
|
The recovery password and expiration message controls of the Modeler LScript compiler
interface were never enabled.
|
Vector values would not display properly with the info()/warn()/error() functions.
|
A temporary script structured employed by the Modeler LScript compiler was not being
clear upon creation, leaving all of its data members in an undefined state. This
could manifest as odd errors in both the compile and the resulting compiled file.
|
The Modeler setlayer() and setblayer() functions could cause memory overruns if the
number of layers specified (in an array) exceeded a certain count.
|
The Modeler LScript compiler was not properly initializing values in a temporary
script structure used during compiling. This could cause random problems with both
the compile and the resulting compiled script.
|
The automated handling of the change of object identifiers was checking for a false
condition, leading in some states to a bypass of the update.
|
Cross-platform path conversion code in LScript has been re-worked to more accurately
fit literal path strings in the script to the platform where they are used.
|
The reqposition() function was mistakenly using the provided X value for both X and
Y position.
|
The application of run-time identifier construction to array referencing, i.e.:
save_type`current_expr[i] = ...
was broken.
|
Sequential variable handling in the LScript pre-processor failed to generate the correct
names when base names included an underscore charaacter ('_').
|
Compiled LScripts that used store() and recall() would sometimes fail to restore saved
values until other scripts were first executed.
|
Activating the debugger in a Shader's process() function caused re-entrancy problems,
often resulting in a crash of the application. This condition has been trapped, and
subsequent calls to process() while the debugger is active are discarded. Be aware
that activating the debugger will likely generate incorrect results in the output
of the shader script (i.e., the resulting image will not be shaded correctly) due
to the discarded calls.
|
The RenderThreads() function was not correctly filtering the provided integer values to
ensure that they matched what Layout was expecting.
|
Unterminated multi-line comments would crash the application; now an error message is
generated.
|
An internal token used to represent the foreach() iterator had some extra settings added
to the compiled file format in LScript v2.6. However, the run-time building code was not
checking the version of the file format, and problems were occurring when this internal
token was processed in previous versions. This usually manifested as an "internal
inconsistency" error when scripts compiled with older versions of the LScript compiler
were run with v2.6 or higher.
|
Informational popups generated in Layout with info()/warn()/error() no longer consumes
the first message slot with the identification of the script that is posting the
message. Instead, the name of the script is now appended to the title of the window,
leaving both message slots available to the script.
|
The ctlpopup() control now has the ability to generate its contents dynamically. By
specifying the name of a UDF as the third argument instead of an array-type value,
the popup will query the indicated UDF for the contents of the popup each time the
list is displayed.
...
ctl[EXPRLST_CTL] = ctlpopup("Expressions",1,"popup_expr_list");
...
The callback UDF should return one or more strings, either individually or as an
array reference.
...
popup_expr_list
{
return(expr_list); // expr_list[] is constructed elsewhere in the script
}
...
|
In order to allow scripts to be more flexible in handling changes in the environment,
two methods have been added to the Object Agents that manage information for Scene
object.
isValid() will cause the object identifier cached in the Object Agent to be validated
against those objects in the Scene. If the object identifier is no longer valid, then
Boolean false is returned.
isOriginal() will indicate whether the underlying object identifier has been changed
by some event in the Scene (typically object loading or removal). If Boolean true is
returned, then the object identifier has not changed since the Object Agent was
created.
|
The pack() method now also handles associative arrays. Any keys whose elements are
'nil' will be removed from the array.
|
The getdir() function was incorrectly stripping the trailing slash from paths that
point at the root drive under Windows. This had the effect of making an absolute
path relative, leaving the working directory whatever was current on that drive.
|
The File() constructor was erroneously adding a leading colon to provided path
names on the Mac.
|
The SchematicPosition() CS function was incorrectly converting provided numeric values
into whole integers before applying them to the schematic view.
|
Countdown reminders in compiled files were not being displayed when scripts were
loaded and activated as regular plug-ins.
|
The keys() method was not returning a 'nil' value when all elements in an associative
array were cleared by the pack() method.
|
The active data member of the Control Object Agent was not being recognized as
valid.
|
The matchdirs() command was miscounting found subdirectories on the Mac, resulting
in a nil return value.
|
The setValue() method of the Texture Layer Object Agent was not processing the provided
argument correctly for the TXLRIMAGE mode. It would result in incorrect images being
applied, or even an application crash.
|
Arguments to the TXTAG_WREPEAT and TXTAG_HREPEAT modes of the Texture Layer Object
Agent setValue() method were not being retrieved from the correct memory location. This
resulted in an error message about the provided argument's type.
|
When using a Surface Object Agent's setValue() function when that Surface had a name
that contained spaces, a crash of the application could result.
|
Multiple-element assigments to the 'this' pointer were using an uninitalized variable reference.
This problem was reported by a compiler warning, and has not appeared to manifest in any way
during script execution.
|
Transparency colors specified when creating a Glyph were not being processed correctly, resulting
in no transparency happening at all.
|