...
.
. Change
class for a PANEL Web object.
.
Panelx.RemoveWebClass USING *CLASSES="bg-gradient opacity-25"
- Add an 'I97 subcode 9' error description to the 'Sunbelt PL/B Runtime
Reference' manual in the 'Error Messages' 'I Errors' section.
I97
09: Linux runtimes only support the socket interface
initialization parameters in a COMOPEN statement.
- In the 'PL/B Language Reference' manual, add a Note ( 5. ) to the
'AddColumn Method (DATATABLE)' section that reads as follows:
Note:
5. The COLUMNS collection allows access to a DATATABLE column
using the GETPROP or SETPROP statements. The collection uses
the following format:
[label] GetProp {object}.Columns({key}),{property}
Where:
label
Optional. A Program Execution Label.
object
Required. A DATATABLE object that is accessed.
key
Required. A decimal number or Numeric Variable that is
zero-based position of the column. Also, the key can be
specified using a Character String Variable or literal using
the 'column identification'. The 'column identification' is
defined using the *ID parameter for the 'AddColumn' method.
property
Required. The remaining line of the statement consist of
column properties found in the 'Column Properties
(DATATABLE)' section.
Example for DATATABLE Column properties using the COLUMNS collection:
Table1 DATATABLE
.
CREATE Table1
...
Table1.AddColumn USING 0 //Column 0 - Order Id
Table1.AddColumn USING 1 //Column 1 - Order Time
...
. Change the properties for the DataTable Column
.
SETPROP Table1.columns(0), *Title="Order Id":
*WebWidth="40px":
*Alignment=$LEFT
.
SETPROP Table1.columns(1), *Title="Order Time":
*WebWidth="120px":
*Alignment=$CENTER:
*DataType=$CDT_TIME:
*ContentType=$TC_EDITABLE:
*COMPUTE="CURTIME"
.
- In the 'PL/B Language Reference' manual, add a Note ( 6. ) to the
'AddRow Method (DATATABLE)' section that reads a follows:
Note:
6. The ROWS collection allows direct access to a DATATABLE row
using the GETPROP or SETPROP statements. The collection uses the
following format:
[label] GetProp {object}.Rows({key}),{property}
Where:
label
Optional. A Program Execution Label.
object
Required. A DATATABLE object that is accessed.
key
Required. A decimal number or Numeric Variable that specifies
a zero-based position of a row.
property
Required. The remaining line of the statement consist of
row properties found in the 'Row Properties
(DATATABLE)' section.
Example for DATATABLE Row properties using the ROWS collection:
Table1 DATATABLE
.
CREATE Table1
...
. Add columns as required by the application.
...
Table1.AddColumn USING 0 //Column 0 - Order Id
Table1.AddColumn USING 1 //Column 1 - Order Time
...
. Change the properties for the DataTable Columns
.
. See the DATATABLE 'AddColumn' Method.
...
. Add Rows as required by the application.
.
Table1.AddRow USING *Text=OrderId0: //String text
*subitem1=OrderTime0
.
Table1.AddRow USING *Text=NextId1: //String text
*subitem1=OrderTime1
...
SETPROP Table1.rows(0), *Selected=$OFF
.
SETPROP Table1.rows(1), *Selected=$ON //Select row 1
.
- In the 'PL/B Runtime Reference' manual, change the 'I (I/O) Errors'
section to include the Linux I90 error described as follows:
I90 - An error has occurred in a PL/B Linux runtime file variable
opened when using the 'SETMODE *LINUXREADLOCK=1' mode. This
error can only occur when a file variable is opened with
record locking enabled. This error indicates that an error
condition has been encountered when the Linux OS 'read locks'
are being used. The following subcode values are described
as follows:
99: An unrecoverable error has been encountered where the
Linux OS file handle is invalid.
100+nnn: A locking error has been encountered where the 'nnn'
value is 'errno' returned by the Linux OS. The Linux
OS errno values can be found in the 'Unix/Linux
Error Codes' section.
- In the 'PL/B Language Reference' manual, change the description/notes as
follows where COMFILE instructions can directly open/read/write Linux OS
devices:
COMOPEN - Add Note (11.) as follows:
11. For a Linux runtime, the {parameters} can be a file or device
name that is opened directly and used by COMREAD and COMWRITE
instructions.
Example:
COMOPEN comfile, "/dev/ttyS10"
COMREAD - Add Note (11.) as follows:
11. When using a Linux runtime where the {comfile} is opened for
a file/device, the *T timeout read control is not used.
COMWRITE - A Note (8.) as follows:
8. When using a Linux runtime where the {comfile} is opened for
a file/device, the following write controls are not used:
a) *T timeout write control is not used.
b) *DTR and *RTS write controls are not used.
COMSTAT - Add the Note (7.) and modify Note (6.) as follows:
6. Generic error codes that can occur for sockets, pipes,
or opened file/devices are:
7. When using a Linux runtime where the {comfile} is opened for
a file/device, the following information is returned:
Byte Description
1 Zero (0) if not opened or one (1) if opened.
2 Zero if writing is not available or one if writing
is available.
3 Zero if no data to read or one if data is available.
4 Zero if no error or one if error occurred.
5-12 Last generic error code.
13-20 Last native error code
- In the 'PL/B Language Reference' manual, a new keyword is added for the
GETMODE and SETMODE instructions with the following descriptions:
.................................................................
*LINUXREADLOCK (GETMODE)
*LINUXREADLOCK={0|1}
The value of this keyword identifies if the Linux OS read locks
can be used for PL/B file variables ( FILE, AFILE, IFILE ) opened
for record locking.
Value Description
0 Linux OS read locks are not to be used for any
file variables opened with this keyword value set to 0.
1 Linux OS read locks can be used for any file variables
opened with this keyword value set to 1.
Note the following:
1. If the 'LINUXREADLOCK' is set to 1, any file variable ( FILE,
AFILE, IFILE ) opened for record locking with LOCKAUTO, SINGLE,
and NOWAIT allows Linux 'read locks' to be used. In this case,
the Linux 'read locks' are ONLY used in the following PL/B
read instructions:
FILE - READ
AFILE - READ, READKG, READKGP
IFILE - READ, READKS, READKP
2. The use of Linux OS read locks is ONLY determined by the current
value of the LINUXREADLOCK keyword when the file variable is
opened using a PL/B OPEN instruction. Also, after a file
variable is opened with read locks being used, the Linux read
locks continue to be used until the file variable is closed
regardless of LINUXREADLOCK keyword setting.
.................................................................
*LINUXREADLOCK (SETMODE)
*LINUXREADLOCK={0|1}
The value of this keyword identifies if the Linux OS read locks
can be used for PL/B file variables ( FILE, AFILE, IFILE ) opened
for record locking.
Value Description
0 Linux OS read locks are not to be used for any
file variables opened with this keyword value set to 0.
1 Linux OS read locks can be used for any file variables
opened with this keyword value set to 1.
Note the following:
1. If the 'LINUXREADLOCK' is set to 1, any file variable ( FILE,
AFILE, IFILE ) opened for record locking with LOCKAUTO, SINGLE,
and NOWAIT allows Linux 'read locks' to be used. In this case,
the Linux 'read locks' are ONLY used in the following PL/B
read instructions:
FILE - READ
AFILE - READ, READKG, READKGP
IFILE - READ, READKS, READKP
2. The use of Linux OS read locks is ONLY determined by the current
value of the LINUXREADLOCK keyword when the file variable is
opened using a PL/B OPEN instruction. Also, after a file
variable is opened with read locks being used, the Linux read
locks continue to be used until the file variable is closed
regardless of LINUXREADLOCK keyword setting.
- In the 'PL/B Language Reference' manual, add the following Note
description to the PL/B OPEN instructions including:
OPEN (FILE)
OPEN (AFILE)
OPEN (FILELIST)
OPEN (IFILE)
Note:
N. When a file variable is opened using a Linux OS PL/B runtime,
the current 'SETMODE *LINUXREADLOCK={0|1}' value determines
whether Linux OS read locks can be used for PL/B read
statements using this file variable opened for record
locking. Also, note that the Linux OS read locks are ONLY
allowed for a file variable opened the LOCKAUTO, SINGLE,
and NOWAIT parameters. See the '*LINUXREADLOCK (SETMODE)'
description for more information.
When a file variable is opened to use Linux OS PL/B read
locks, the read locks are ONLY used for these PL/B read
statements:
FILE - READ
AFILE - READ, READKG, READKGP
IFILE - READ, READKS, READKP
- In the 'PL/B Language Reference', add the following paragraphs to the
'File and Record Locking' section:
Record Locking Linux OS Considerations
--------------------------------------
By default, the Sunbelt record locking implementation uses the Linux
OS write lock (exclusive lock) for each data record locked in a PL/B
data file. This insures that only one process can hold a lock for
any one specific data record.
However, the Linux OS also supports a read lock which allows multiple
processes to hold a read/shared lock on the same PL/B data file
record at the same time. The Linux PL/B runtime supports a
'SETMODE *LINUXREADLOCK={0|1}' instruction to allow files opened
with LOCKAUTO, SINGLE, and NOWAIT parameters to use Linux OS
read locks for PL/B read instructions. In this case, only the
following PL/B read instructions can apply/use the Linux OS
read/shared locks.
File Type PL/B Reads support Linux OS read locks
FILE - READ
AFILE - READ, READKG, READKGP
FILE - READ, READKS, READKP
- In the PL/B Runtime manual, add the 'WU' option to 'PLBCMP Command Line
Syntax' section described as follows:
- WU This option is used to set a PLC program header flag to
save a copy of the UDA when a PLC program is loaded. This
option is required to allow the MODULE object 'InitializeUda'
method to restore a programs UDA (User Data Area) to its
original state/values.
- In the 'PL/B Language Reference' manual, add the following descriptions
for the PL/B 'MODULE' object.
-----------------------------------------------------------------
MODULE
The MODULE instruction declares a PL/B module object variable. The
MODULE object is implemented as a PL/B runtime internal object
to manage the current program module being executed where it is
executing. The MODULE object provides an interface and control of
operations for PL/B programs including the main program and load
modules. The MODULE object declaration uses the following statement
format:
[label] MODULE
Where:
label
Optional. A Program Execution Label.
Flags Affected: NONE
Note the following:
1. The MODULE object represents the current PL/B program being
executed.
2. There are no properties for a MODULE object.
3. There are no events for a MODULE object.
4. There are no PL/B instructions other than methods that are
used with a MODULE object. The methods performed for the MODULE
object only take affect for the program module where the PL/B
runtime is executing. The MODULE object has the following
methods:
InitializeUda
This method is used to restore the current program module
UDA to be the same as originally loaded for the module.
UnLoad
This method is implemented to unload a load module when the
PL/B runtime is using the 'PLB_DYNAMICLOADMOD=ON' keyword.
This method can only be used to unload PL/B load modules.
This method can not unload the PL/B main program.
-----------------------------------------------------------------
InitializeUda Method (MODULE)
The InitializeUda method allows the current UDA (User Data
Area) variables for a program or a load module to be
re-initialized to the values and states the same as
initially loaded. This method ONLY initializes the UDA
for the current program or load module that is executing
this method. The 'InitializeUda' method requires that the
program/load module must be compiled using the 'WU' compiler
option. Otherwise, an O167 error occurs.
The format of this method is defined as follows:
[label] {object}.InitializeUda GIVING {return}:
USING [*FLAGS=]{flags}
Where:
label
Optional. A Program Execution Label.
object
Required. A MODULE object.
return
Optional. A Numeric Variable that is returned as a value
of zero when the method initializes the UDA.
flags
Optional. A Numeric Variable or decimal number that
identifies a bit mask where each bit invokes
a behavior for this method.
Flags Affected: EOS, OVER, ZERO
Note the following:
1. The EOS flag is always cleared.
2. The ZERO flag is set TRUE if the {return} value is zero.
Otherwise, the ZERO flag is set to FALSE.
3. The OVER flag is set TRUE if the {return} variable is too
small to receive the value without being truncated.
4. Warning:
A. If the current program/load module CAN NOT be
re-initialized, this method causes an O167 error. In
this case, the PL/B program/load module logic MUST
clear/reset any/all UDA variables needing
initialization.
5. The {flags} bit values are implemented to invoke
behaviors for the method as follows:
Value Description
0x00 - This value defaults to execute the full
initialization of the program/load module
UDA variables and states.
0x01 - This bit value causes a pass/fail return
value that indicates whether the PLC UDA
can be re-initialized or not. The
value of zero indicates that the PLC
can be re-initialized. A non-zero
value indicates that the method CAN NOT
be re-initialized. See Note (7).
6. When the InitializeUda method executes successfully,
the UDA is re-initialized in a manner similar to
the CHAIN. GLOBAL variables are not re-initialized.
However, GLOBAL GUI variables may or may not be
destroyed depending on how they are being used.
Only the UDA variables of the current program/load
module executing the InitializeUda method are
re-initialized as follows:
A. The non-common files are closed. If the main
program is being initialized, both common and
non-common files are closed.
B. The GUI objects are destroyed. However, GLOBAL GUI
variables may or may not be destroyed as follows:
1) If a GLOBAL GUI object is a child object to a
WINDOW or PANEL object that exists in the module
UDA, then it is destroyed.
2) If a GLOBAL GUI object in the module UDA has
been created and it is a child object to a
WINDOW or PANEL that exist in the UDA of a
different module, then it is not destroyed.
C. The XData, DateTime, Ftp, ComFile, and Collections
are re-initialized.
D. All of the current pending program/user events are
cleared.
E. All of the variable pointers are re-initialized.
This includes auto load DIM pointer are reset as
initially loaded.
7. The {return} values are described as follows:
Value Description
0 - The method executed successfully. If the
{flags} value is set to 0x01, then value
of zero indicates that the PLC can be
re-initialized. If the {flags} value of
0x01 is not used, then the value of
zero indicates that the PLC UDA was
re-initialized successfully.
1 - Error where the MODULE object is not
available.
2 - Error where the MODULE object does not
have a saved copy of the UDA. In this
case, compile the module using the
'WU' compiler option.
-----------------------------------------------------------------
UnLoad Method (MODULE)
The Unload method allows the current load module
to be unloaded and removed from the OS memory.
This method can ONLY be executed in the PL/B logic of
a load module. This method can not be executed for a standalone
PL/B program. Otherwise an O167 error occurs. This method
can ONLY be used when the PL/B runtime 'PLB_DYNAMICLOADMOD'
keyword is turned on. Otherwise an O167 error occurs.
The format of this method is defined as follows:
[label] {object}.Unload GIVING {return}[:
USING [*FLAGS=]{flags}]
Where:
label
Optional. A Program Execution Label.
object
Required. A MODULE object.
return
Optional. A Numeric Variable with a return value.
flags
Optional. A Numeric Variable or decimal number that
identifies a bit mask where each bit
invokes a behavior by this method.
Flags Affected: EOS, OVER, ZERO
Note the following:
1. The EOS flag is always cleared.
2. The ZERO flag is set TRUE if the {return} value is zero.
Otherwise, the ZERO flag is set to FALSE.
3. The OVER flag is set TRUE if the {return} variable is too
small to receive the value without being truncated.
4. Warning:
A. If the current load module CAN NOT be unloaded,
this method causes an O167 error.
B. The MODULE 'Unload' causes an O167 error if
the PL/B call stack contains multiple return stack
entries to the load module being unloaded.
5. The {flags} parameter is available for future behavior
usage.
Bit Value Description
0x0001 - This bit mask value causes the 'Unload'
method to return a numeric result
and the O167 error does not occur.
6. Successful execution of the MODULE 'Unload' method
occurs as follows:
6a. The load module UDA is re-initialized to detach all
pointers.
6b. All load module DMAKE type allocations are freed.
6c. All load module files are closed.
6d. All GUI objects are destroyed.
6e. All XData, DateTime, FTP, COMFILE, and
Collections are closed and cleared.
6f. All of the current load module pending
program/user events are cleared.
6g. The current load module is removed from the PL/B
runtime process descriptor linkage.
6h. The current load module memory is cleared and the
memory is freed/released back to the OS.
7. When an O167 error occurs, the extended data is reported as
follows where the result is a subcode. If the '*FLAGS=1'
option is used, only the result is returned in the {return}
numeric variable and the O167 error does not occur.
Result Description
1 - "Module data not found!"
2 - "Module UDA copy not available!"
3 - "Call stack depth 1 level minimum!"
4 - "Form object cleanup error!"
5 - "No client support!" (Plbclient used)
6 - "Client response incomplete!" (Plbclient used)
10 - "Dynamic Loadmod required!"
20 - "Call stack empty not allowed!"
21 - "Invalid stack entry bad addr!"
22
23
24 - "Modal stack entry!"
25 - "Call Stack duplicate error!"
- In the 'PL/B Language Reference' manual, modified the 'CHAIN'
instruction Note (2.) to read as follows:
Note:
2. If a drive or path is not specified as part of the program name,
the current directory is searched first. If unsuccessful, the
directories that have been established in the PLB_PATH
environment variable or SEARCHPATH instruction are searched.
- In the 'PL/B Runtime Reference' manual, add a U70 error to the
'U (Untrappable) Errors' which is described as follows:
Code Description
U70 This occurs when a CLASSMODULE encounters an error as a
PLBOBJECT is being destroyed. There can be a subcode
described as follows:
SubCode:
100 - A DESTORY PLBOBJECT operation failed with an
extended error description:
"CLASSMODERR: nnn"
Values ( 'nnn' )
1 - CLASSMODULE destroy does not find
MODULE identifier.
4 - CLASSMODULE UDA cleanup error
detected.
10 - CLASSMODULE was not loaded as
a Dynamic Load Module. See the
PLB_DYNAMICLOADMOD keyword.
21 - Invalid PL/B call stack return
address of zero found.
22 - PL/B call stack return address
23 to an address in the CLASSMODULE
being destroyed is not allowed.
24 - CLASSMODULE can not be destroyed
when a MODAL dialog is currently
active.
25 - Duplicated PL/B call stack entry
detected.
30 - Unexpected OS error occurred
freeing the CLASSMODULE load
module memory.
- In the 'PL/B Language Reference' manual, add the following descriptions
for the PLBOBJECT/CLASSMODULE support added in the 10.6 release.
CLASSMODULE
The CLASSMODULE compiler directive is required when compiling a
PL/B load module as a class to be accessed/used for a PL/B code
object (PLBOBJECT). This directive must be the first instruction
in the source for a load module. Otherwise, an appropriate compiler
error is generated. This instruction uses the following format:
CLASSMODULE
Flags Affected: None
Note the following:
1. The CLASSMODULE statement must be the first instruction in
the load module source module.
2. The CLASSMODULE invokes specialize compiler behaviors when
compiling a load module so it can be loaded and accessed
using a PLBOBJECT code object. These behaviors include the
following:
Plbcmp CLASSMODULE Behaviors
1) No common data allowed.
2) ROUTINE, LROUTINE, and PROCEDURE instructions are not
allowed.
3) CHAIN is not allowed.
4) TRAP is not allowed.
5) A CLASSMODULE instruction creates a SHUTDOWN as the
first instruction in a load module. Therefore, the
CLASSMODULE '.plc' program can not be executed as a
standalone program.
6) The compiler flags the '.plc' of the load module so
the PL/B runtimes can invoke specialized behaviors.
7) If PL/B instructions use a PLBOBJECT as a program is
compiled, the compiler accesses/extracts the current
CLASSMODULE FUNCTION labels to verify properties and
methods being accessed. This feature can only be
used if the CLASSMODULE '.plc' is exists when a
PLBOJBECT is being compiled into a PL/B program.
Otherwise, the compiler gives appropriate warning
messages.
3. When a CLASSMODULE load module is being loaded and used
for a PLBOBJECT. The following behaviors are expected.
1) All data declared in a CLASSMODULE load module is
private.
2) The PL/B runtime ONLY allows a CLASSMODULE load
module to be accessed by a PL/B instruction that
is using a PLBOBJECT code object.
3) The PLBOBJECT can be used in the following
instructions when accessing/using a CLASSMODULE.
CREATE OBJOBJECT
GETPROP OBJOBJECT, property=var...
SETPROP OBJOBJECT, property=var...
DESTROY OBJOBJECT
EVENTREG OBJOBJECT ... ( Windows Runtimes only! )
EVENTSEND *OBJOBJECT ... ( Windows Runtimes only! )
OBJOBJECT.Methods ...
4) There is a U70 error which can occur when a
CLASSMODULE is being accessed/used.
5) A CLASSMODULE load module must include two special
FUNCTIONS named as follows. If these functions do not
exist when a PLBOBJECT is used in a CREATE or
DESTROY instruction, an appropriate OBJECT error
occurs.
ClassCreate FUNCTION
ENTRY
.
. User create logic if needed.
.
FUNCTIONEND
ClassDestroy FUNCTION
ENTRY
.
. User destroy/cleanup logic if needed.
.
FUNCTIONEND
6) The CLASSMODULE PL/B source includes properties
and methods FUNCTIONs which are accessed using
GETPROP, SETPROP, and method. See the sample
CLASSMODULE skeleton found in the 'class_skeleton.pls'
sample program.
The PL/B Label syntax identifies a FUNCTION to
be used for a GETPROP, SETPROP or METHOD as
follows:
'Get_PROP' identifies a FUNCTION to be accessed
using a GETPROP instruction where 'PROP' is
the property name:
"GETPROP PLBOBJECT, *PROP={var}"
'Set_PROP' identifies a FUNCTION to be accessed
using a SETPROP instruction where 'PROP' is
the property name:
"GETPROP PLBOBJECT, *PROP={var}"
A simple PL/B Label for a FUNCTION identifies a
FUNCTION to be accessed using PL/B method syntax
as follows:
"GETPROP PLBOBJECT, *PROP={var}"
Examples:
// User defined GETPROP FUNCTIONs in CLASSMODULE:
*
.
Get_Prop1 FUNCTION //GETPROP 'Prop1' property
ENTRY
.
. User 'Prop1' logic.
.
FUNCTIONEND USING Prop1Value
*
.
Get_Prop2 FUNCTION //GETPROP 'Prop2' property
ENTRY
.
. User 'Prop2' logic.
.
RETURN USING Prop2String
.
FUNCTIONEND
// User defined SETPROP FUNCTIONs in CLASSMODULE.
*
.
Set_Prop1 FUNCTION //SETPROP 'Prop1' property
Prop1Val FORM 5
ENTRY
.
. User 'Prop1' logic with input 'Prop1Val' value.
.
FUNCTIONEND
*
.
Set_Prop2 FUNCTION //GETPROP 'Prop2' property
Prop2Str DIM 10
ENTRY
.
. User 'Prop2' logic with input 'Prop2Str' string.
.
.
FUNCTIONEND
// User defined FUNCTION Labels in CLASSMODULE
// accessed using PL/B method syntax.
*
.
DoReset FUNCTION //Class module 'DoReset'
// method.
dData DIM 100 // Parameter 1
nReset FORM 5 // Parameter 2
ENTRY
.
. User logic executed for class module
. 'DoReset' method.
.
RETURN USING S$CMDLIN
.
FUNCTIONEND
- In the 'PL/B Language Reference' manual, add the following descriptions
for the PL/B 'PLBOBJECT' code object.
.....................................................................
PLBOBJECT
The PLBOBJECT instruction declares a PL/B code object variable. The
PLBOBJECT variable provides the interface to a PL/B CLASSMODULE
load module using the CREATE, GETPROP, SETPROP, methods and
DESTROY instructions. The PLBOBJECT object is supported in EVENTREG
and EVENTSEND instructions.
(1) [label] PLBOBJECT [%][CLASS={targetclassmod}][(arraysize)]
(2) [label] PLBOBJECT
(3) [label] PLBOBJECT CLASS="targetclassmod"
(4) [label] PLBOBJECT CLASS="targetclassmod"(arraysize)
(5) [label] PLBOBJECT ^
Where:
label
Optional. A Program Execution Label.
%
Optional. Denotes the item as being GLOBAL.
arraysize
Required. An integer decimal constant, CONST variable, or EQUATEd
value indicating the number of array items.
^
Optional. Denotes the item as being a POINTER.
"targetclassmod"
Optional. A string literal that identifies the CLASSMODULE
load module program name to be access for the
PLBOBJECT. The targetclassmod string has a size
limit of 39 character and it can ONLY be specified
as the load module program named with the extension.
(Default extension is .plc).
Flags Affected: NONE
Note the following:
1. When a PLBOBJECT is declared with the CLASS keyword as shown
in format (3), the "targetclassmod" specifies the CLASSMODULE
load module '.plc' file name that is linked to this object.
Example:
TargetClass PLBOBJECT CLASS="classmodname.plc"
.
CREATE TargetClass
2. If the CLASS keyword is not specified with the PLBOBJECT
declaration as shown in format (2), the CLASS keyword must be
specified on the CREATE statement for the PLBOBJECT.
Example:
TargetClass PLBOBJECT
.
CREATE TargetClass, CLASS="classmodname.plc"
3. When the format (4) is used, the 'targetclassmod' string literal
is used to access the target CLASSMODULE load module file name
of 'targetclassmod.plc' for each PLBOBJECT array element created.
Examples:
Test1 PLBOBJECT //CLASS keyword for CREATE required.
Test2 PLBOBJECT CLASS="" //Compiler error is expected.
Test3 PLBOBJECT CLASS="MyClass" //"MyClass.plc"CLASSMODULE
// is used.
TestArr PLBOBJECT CLASS="XClass"(3) //"XClass.plc" CLASSMODULE is
// used for each PLBOBJECT
// array element.
gTest PLBOBJECT %CLASS="GlobClass" //"GlobClass.plc' CLASSMODULE
// is used for the Global
// PLBOBJECT.
.....................................................................
CREATE PLBOBJECT
The CREATE PLBOJECT statement initializes a PLBOBJECT object
variable. The statement format is:
[label] CREATE [plbobject][,CLASS={targetclassmod}]
Where:
label
Optional. A Program Execution Label.
plbobject
Required. The name of a previously declared PLBOBJECT object
variable.
targetclassmod
Optional. This CLASS parameter is a Character String Variable
or Character String Literal that identifies the
CLASSMODULE load module program name to be used
for the PLBOBJECT. This CLASS parameter is only
allowed when the PLBOBJECT declaration does not
include the CLASS keyword parameter.
Flags Affected: NONE
Note the following:
1. When the 'CREATE PLBOBJECT' statement is executed, the PL/B
runtime loads the CLASSMODULE load module with a unique
internal alias. This specific CLASSMODULE is used for all
PLBOBJECT instructions executed after the CREATE.
2. After the 'CREATE PLBOBJECT' load module is created, the PL/B
runtime invokes/executes the 'ClassCreate' FUNCTION in the
CLASSMODULE associated with the PLBOBJECT object. See the
CLASSMODULE descriptions for more information.
.....................................................................
Modify the GETPROP instruction to include a Note (12.) that reads
as follows:
Note:
12. When the object is a PLBOBJECT, the properties are retrieved
from a FUNCTION found in CLASSMODULE load module specified
by the PLBOBJECT object declaration. In this case, a PLBOBJECT
property name is accessing a FUNCTION in the CLASSMODULE
that has a PL/B label formatted as 'Get_PropName'. See
the CLASSMODULE descriptions for more information. Also,
the PLBOBJECT properties use the '*prop=value' syntax format.
Example:
GETPROP PLBOBJECT,*Prop1=value: //'Get_Prop1' in CLASSMODULE
*Prop2=value //'Get_Prop2' in CLASSMODULE
.....................................................................
Modify the SETPROP instruction to include a Note (13.) that reads
as follows:
Note:
13. When the object is a PLBOBJECT, the properties are accessed
in a FUNCTION found in CLASSMODULE load module specified
by the PLBOBJECT object declaration. In this case, a PLBOBJECT
property name is accessing a FUNCTION in the CLASSMODULE
that has a PL/B label formatted as 'Set_PropName'. See
the CLASSMODULE descriptions for more information. Also,
the PLBOBJECT properties use the '*prop=value' syntax format.
Example:
SETPROP PLBOBJECT,*Prop1=value: //'Set_Prop1' in CLASSMODULE
*Prop2=value //'Set_Prop2' in CLASSMODULE
.....................................................................
Modify the DESTROY instruction to include a Note (5.) that reads
as follows:
Note:
5. When a 'DESTROY PLBOBJECT' statement is executed, the PL/B
runtime invokes/executes the 'ClassDestroy' FUNCTION in the
CLASSMODULE associated with the PLBOBJECT object. See the
CLASSMODULE descriptions for more information. The
'ClassDetroy' FUNCTION is NOT executed, when a PLBOBJECT object
is destroyed implicitly during a CREATE, STOP or SHUTDOWN
operation. Also, 'DESTROY PLBOBJECT' operation unloads and
frees memory for the CLASSMODULE created for the PLBOBJECT.
.....................................................................
PLBOBJECT Methods
The PLBOBJECT object methods are contained in the CLASSMODULE load
module that is specified for the PLBOBJECT object declaration.
Therefore, any label for a FUNCTION in a CLASSMODULE load module that
DOES NOT have a prefix of 'Get_' or 'Set_' is identified as a method.
See the CLASSMODULE section for more information.
This means that all PLBOBJECT methods are user defined as coded into
a CLASSMODULE load module. The method uses the following format:
[label] {object}.method [GIVING {return}]:
[USING {paramvalue1}[:
{paramvalue2}][:
...]
Where:
label
Optional. A Program Execution Label
object
Required. A PLBOBJECT object that has been previously created.
property
Required. A method name that must be the same as a PL/B label
for a FUNCTION method coded into the PLBOBJECT
CLASSMODULE load module program.
return
Optional. A Numeric Variable or Character String Variable as
coded for the CLASSMODULE method.
paramvalueX
Optional. Depending on a method's logic coded for a CLASSMODULE
FUNCTION, the parameters are positional and typed based
on the input parameters to the FUNCTION.
Flags Affected: Depends on method FUNCTION
Note the following:
1. The PLBOBJECT method input parameters DO NOT support keyword
naming syntax.
2. The compiler can verify that the method name exists in the
CLASSMODULE load module '.plc' program file. If the CLASSMODULE
'.plc' program file can not be accessed/loaded, the compiler
gives appropriate warning messages.
Example:
...........................
'MyClass.plc' program compiled as CLASSMODULE load module.
...........................
CLASSMODULE
MyDiv FUNCTION //Method entry!
nValue FORM 5
ENTRY
.
RetRes FORM 5
.
. MyDiv logic to process nValue and calculate RetRes.
.
DIV "2", nValue, RetRes
.
FUNCTIONEND USING RetRes
...........................
'TestProg.plc' program using PLBOBJECT object
...........................
TestClass PLBOBJECT CLASS="MyClass.plc"
Result FORM 5
inValue FORM "10"
.
...
.
CREATE TestClass
.
TestClass.MyDiv GIVING Result USING inValue
.
.....................................................................
EVENTREG PLBOBJECT ( Windows Runtimes only! )
Modify the EVENTREG instruction to include note (25.) that reads
as follows:
Note:
25. After EVENTREG is executed for a PLBOBJECT object, the
expected {event} can be generated using the EVENTSEND
instruction which is executed from the CLASSMODULE load
module code. The generation of {event} is done using an
'EVENTSEND *CLASS...'instruction from code executing in a
CLASSMODULE load module which was loaded using a
'CREATE PLBOBJECT' instruction. The 'EVENTREG {plbobject}..."
instruction is only supported by a Windows Runtime.
( Plbwin, Plbnet, ... ).
Example of 'TestProgram.plc':
.
INCLUDE plbequ.inc
.
TestClass PLBOBJECT CLASS="MyClass.plc"
.
...
.
CREATE TestClass
.
EVENTREG TestClass, $CHANGE, ChangeFunc
...
SETPROP TestClass, *PROP1="10" //Change property!
.....................................................................
EVENTSEND *CLASS ... ( Windows Runtimes only! )
Modify the EVENTSEND instruction to include note (8.) that reads
as follows:
Note:
8. When the {object} is specified as *CLASS, the EVENTSEND must
be executed from the CLASSMODULE load module which has been
created/loaded using a 'CREATE PLBOBJECT' instruction. In this
case, the EVENTSEND immediately dispatches execution to the
PLBOBJECT object event handler routine which has been
registered using an EVENTREG instruction for the PLBOBJECT
object. When the event handler routine is finished and
returns, the program execution continues at the PL/B
statement following the EVENTSEND instruction. The
'EVENTSEND *CLASS, ..." instruction is only supported by a
Windows Runtime. ( Plbwin, Plbnet,... ).
Example of 'MyClass.plc':
.
CLASSMODULE
.
INCLUDE plbequ.inc
.
nProp1Count FORM 5 //Property One Count
.
...
.
Set_Prop1 FUNCTION //Prop1 property!!
ResetValue FORM 5
ENTRY
.
MOVE ResetValue, nProp1Count
.
EVENTSEND *CLASS,$CHANGE,RESULT=nProp1Count
.
FUNCTIONEND
- In the 'PL/B Language Reference' manual, add a BOOLEAN data type
described as follows:
BOOLEAN
The BOOLEAN is used to declare a decimal numeric variable that is
a FORM with a size of 1 byte that only contains a '0' (FALSE) or
a '1' (TRUE). The BOOLEAN uses one of the following formats:
(1) [label] BOOLEAN
(2) [label] BOOLEAN [TRUE | FALSE]
(3) [label] BOOLEAN ({arraysize})
(4) [label] BOOLEAN ({arraysize}),( [TRUE|FALSE] ),( [TRUE|FALSE] )
(5) [label] BOOLEAN ^
(6) [label] BOOLEAN ^({arraysize})
(7) [label] BOOLEAN [%][TRUE|FALSE]
(8) [label] BOOLEAN [%%]
(9) [label] BOOLEAN [*][TRUE|FALSE]
Where:
label
Optional. A Data Definition Label
%
Optional. Denotes the item as being GLOBAL.
%%
Optional. Denotes the item as GLOBAL but does not initialize it
in any way.
*
Optional. Denotes the BOOLEAN is used in COMMON.
FALSE
Optional. A keyword named 'FALSE' indicating a BOOLEAN value of
'0' zero.
TRUE
Optional. A keyword named 'TRUE' indicating a BOOLEAN value of
'1' one.
arraysize
Optional. An integer decimal constant, CONST variable or EQUATEd
value indicating the number of array items.
^
Optional. Denotes the item as being a POINTER.
Flags Affected: NONE
Note the following:
1. When a format includes the FALSE or TRUE keyword, the BOOLEAN
is initialized to a '0' or '1' value appropriately. If the
format does not include TRUE/FALSE, the default value is '0'
indicating FALSE.
2. The BOOLEAN variable has the same UDA format and behavior of
a FORM variable with a size of 1 whole decimal digit. However,
the BOOLEAN only contains a zero or one decimal value.
Any PL/B instruction that attempts to move, add or sub
only stores either a '0' or '1' in a BOOLEAN variable.
3. The BOOLEAN variable causes a compiler error when it is used
in these PL/B instructions:
COPYBYTES
COPYNEXT
COPYSTATUS
DECR
INCR
NFORMAT
RETCOUNT
SCRNSIZE
TRAPSIZE
WINSIZE
- In the 'Sunbelt PL/B Language Reference' manual, change the
'MOVE - Arithmetic Expression to Numeric Field' section as follows:
1) Modify the 'op' to include '**' as follows:
op
Required. One of the supported arithmetic operation types
(+, -, *, /, **).
- In the 'Sunbelt PL/B Language Reference' manual, change the 'CALC'
section as follows:
1) Modify the note (5.) to read as follows:
5. The arithmetic operations are performed left to right. Nesting
of operations is allowed using parentheses. However, if
parentheses are used in an equation, they must be balanced
(an equal number of left and right parenthesis). Nested
operations are performed first beginning at the lowest nesting
level and working outward.
The order of arithmetic operations in which the expressions are
evaluated is determined by the precedence of the operators
being used. The ordering is processed as followed.
1. negation (-) unary
2. power
3. multiplication and division
4. addition and subtraction
- In the PL/B Language Reference Manual, add the following method named
'SetWebTheme' to the RUNTIME object.
.........................................................................
SetWebTheme Method (RUNTIME)
The SetWebTheme method is used to set the default runtime settings which
are applied to give specific web object visual styles. The visual styles
are achieved by applying HTML with CSS classes to PL/B web objects using
jQueryUI themes and BootStrap 5 styles. The overall affect is to provide
consistent PL/B web object visual presentations with minimal user
program logic. This method uses the following format:
[label] {object}.SetWebTheme [GIVING {return}:]
USING [*Theme=]{theme}[:
[*Context=]{context}[:
[*Options=]{options}]
Where:
{label}
Optional. A Program Execution Label.
{object}
Required. A RUNTIME object type that is being accessed.
{return}
Optional. A Numeric Variable that receives the method result.
{theme}
Optional. A Numeric Variable or decimal number that specifies
the jQuery theme number to be used as default.
{context}
Optional. A Numeric Variable or decimal number that specifies
the BootStrap 5 context number to be used as default.
{options}
Optional. A Numeric Variable or decimal number the specifies
a bit mask value where each bit can invoke special
method behaviors.
Flags Affected: EOS, OVER, ZERO
Note the following:
1. This method dynamically changes the HTML classes. Each class in
the class string must be separated by a space.
2. The EOS flag is always cleared.
3. The ZERO flag is always set to TRUE with a return value of zero.
4. The OVER flag is always cleared.
5. The {theme} only replaces colors that are set to the default.
A non default background, text, or border color is not changed.
The {theme} values are defined as follows:
Theme Value JQueryUI Theme Name
0 - Default or Base
1 - black tie
2 - blitzer
3 - cupertino
4 - dark hive
5 - dot luv
6 - eggplant
7 - excite bike
8 - flick
9 - hot sneaks
10 - humanity
11 - le frog
12 - mint choc
13 - overcast
14 - pepper grinder
15 - redmond
16 - smoothness
17 - south street
18 - start
19 - sunny
20 - swanky purse
21 - trontastic
22 - ui darkness
23 - ui lightness
24 - vader
See this JQuery UI link under 'Gallery' to see an
example of the themes:
"https://jqueryui.com/themeroller"
6. The {context} values are defined as follows and the definitions
are found in the 'plbequ.inc':
Value Keyword in 'plbequ.inc'
0 $OC_DEFAULT
1 $OC_DANGER
2 $OC_DARK
3 $OC_INFO
4 $OC_LIGHT
5 $OC_PRIMARY
6 $OC_SECONDARY
7 $OC_SUCCESS
8 $OC_WARNING
See these links for more information on context
presentations:
"https://getbootstrap.com/docs/5.0/components/list-group
/#contextual-classes"
"https://getbootstrap.com/docs/5.0/components/buttons/"
7. The {options} bit mask values are defined as follows:
BootStrap 5 GRADIENT 0x00000001
This option bit value allows the runtime to apply the
BootStrap 5 'bg-gradient' classes to the PL/B web objects
to enhance the background color visual styles.
See this link for more information:
"https://getbootstrap.com/docs/5.0/utilities/background
/#background-gradient"
BootStrap 5 PROGRESS 0x00000002
This option bit value allows the runtime to apply a BootStrap
5 style to the PL/B PROGRESS web objects.
8. Examples when using PL/B Web Objects:
Run RUNTIME
.
. Enable the BootStrap 5 Gradient and Progress options
.
Run.SetWebTheme USING Options=3
.
.... Load program with PL/B Web objects
.
. Set/Change the program theme as desired/needed.
.
Run.SetWebTheme USING *CONTEXT=$OC_PRIMARY:
*THEME=19 //Sunny theme
.
- In the PL/B Language Reference Manual, modify the TREEVIEW 'INDENT
Property' section to include a Note (3.) that reads as follows:
3. If a TREEVIEW object has the BUTTONS property turned on and
an IMAGELIST is used and/or changed, the 'Indent' value is set
to the Windows OS default value. This behavior is required by
the Windows OS to insure proper operation by the TREEVIEW
control when a TREEVIEW button is clicked. This behavior is
expected as follows:
3a. When the TREEVIEW is being created.
3b. When the IMAGELIST property is changed using SETPROP.
3c. When the SetImageList method is executed.
3d. When an imagelist is altered or removed.
*==============================================================================
The following files have been changed as noted:
-------------------------------------------------------------------------------
PLBWEBSRV (HTML\JS\CSS)
- Modified to support 10.2A changes.
plbwebbasic.css 10.5B 230217
plbwebbasic.js 10.5B 230727
plbwebboot.html 10.5B 230727
plbwebctls.js 10.5B 230727
plbwebmob.js 10.0A 180402 Support jQuery Mobile
plbwebtvcssinfo.html 9.9 161028
plbmobstart.html 10.0A 180402 Support jQuery Mobile
plbwebstart.html 10.0A 180402
plbwebstartwv.html 10.5 220524 Support Bootstrap 5
plbwebstart99a.html 9.9A 170428
- Modified the 'plbwebbasic.js' and 'plbwebctls.js' to correct issues
where the GETITEM for an EDITDATATIME gave invalid results when a
CUSTOMFORMAT was being used.
-------------------------------------------------------------------------------
PLBWEBSRV
- Corrected a PWS TOOLBAR ToolButton size problem when using the
$TBSTYLEPUSH without 'BootStrap 5' support.
- Corrected GPF error for a Web ListView 'FindItem' method when the
*TEXT parameter was not specified in the PL/B program.
- Corrected a problem where a PWS GroupBox method 'SetWebStyle' did not
work as expected when attempting to set the CSS style 'font-size'.
-------------------------------------------------------------------------------
PLBWIN, PLBCON, PLBCLIENT
- Corrected a problem where a Web GroupBox object method 'SetWebStyle' did
not work when setting the CSS font styles.
-------------------------------------------------------------------------------
PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV
- Corrected a LL problem for NCHAR variables in a READ instruction. In
this case, the LL value of the NCHAR variable was invalid when the last
character in a NCHAR variable was an UTF8 encoded character.
-------------------------------------------------------------------------------
PLBWIN, PLBWEBSRV, ALL GUI CLIENTS
- Corrected a problem where the SETPROP for a LABEL Web object using the
TEXT property did not work properly when a NCHAR was used.
- Modified the 'SetWebStyle' method *FLAGS parameter to support a bit mask
value of '0x2' which allows CSS styles to be set for the label of the
Web objects CHECKBOX, GROUPBOX, and RADIO.
- Added the following methods named 'AddWebClass' and 'RemoveWebClass'
to all PL/B objects that can be created as a visible HTML object.
These methods allow direct manipulation of HTML object classes to
provide dynamic changes to the PL/B web object UI for end users.
See the Documentation section for the details.
- Added new RUNTIME method named 'SetWebTheme' that is used to set the
default runtime settings which are applied to give specific web object
visual styles. The visual styles are achieved by applying HTML with CSS
classes to PL/B web objects using jQueryUI themes and BootStrap 5 styles.
The overall affect is to provide consistent PL/B web object visual
presentations with minimal user program logic. See the Documentation
section for the details.
-------------------------------------------------------------------------------
PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV, ALL GUI CLIENTS
- Added a new method named 'EnsureVisible' for a DATATABLE.
See the Documentation section for the details.
- Modified the DATATABLE 'FindRow' method so the TBL_FIND_PARTIAL flag
setting causes the find operation to use a free float match from left to
right. The float match is not case sensitive.
- Modified LISTVIEW methods to allow UTF8 string data to be returned and
stored into a GIVING NCHAR variable.
- Modified the 'GetUnicode' method of an EDITTEXT object to allow the
return string to be stored using a GIVING NCHAR variable.
- Modified the SetUnicode method for the EDITTEXT and RICHEDITTEXT objects
to work properly when the READONLY property is turned on for the object.
-------------------------------------------------------------------------------
PLBWIN, PLBNET, ALL GUI CLIENTS
- In release 10.3A, the TREEVIEW methods SaveXMLFile, SaveXMLtoDim, and
LoadXMLFile were modified to handle illegal labels as required by XML
tags. When an illegal character is encountered in a label, it replaced
with an '_' character and the real label is added using a 'tvn'
attribute.
- The TREEVIEW methods SaveXMLFile and SaveXMLtoDim are modified to
support an '*OPTIONS' bit mask value 0x40 ( $TV_XMLWR_NOLABEL_KEEP ).
This bit mask value changes the behavior of these methods so the 'tvn'
attribute is NOT output to the XML data stream.
$TV_XMLWR_NOLABEL_KEEP 0x40 Prevent output of 'tvn' attribute
when a label contains invalid XML
tag character(s).
- Corrected a TREEVIEW 'LoadXmlFile' method problem where a GPF fault
might occur when loading the 'xml' data due to a buffer overflow. This
GPF problem could occur randomly depending on the memory usage of the
PL/B runtime process.
- Modified SetUnicode method for EDITTEXT and RICHEDITEXT objects to work
properly when the READONLY property is turned on for the object.
- Modified SetUnicode method for EDITTEXT object to correct a problem
where there could be no output to the EDITTEXT when a NCHAR variable
was being.
- Modified the EDITTEXT object 'GetUnicode' method to allow UTF8 string
data to be returned using a GIVING NCHAR variable.
- Corrected a problem where the output UTF8 data shown in a STATTEXT
object could be truncated using a 'SETPROP STATTEXT, TEXT=NCHAR'
operation.
- Corrected a problem where a GPF could occur when a WINDOW object
containing a RADIOGRP object was resized.
-------------------------------------------------------------------------------
PLBWIN
- Modified the DATATABLE HTML 'ListView' style to support user tabbing
actions when editable input fields are being used in the HTML
'ListView'. A tabbing action from another object onto the DATATABLE
HTML 'ListView' causes the focus to be set to the first editable input
field of the current active row.
- Modified the SETFOCUS to set the focus to the first editable input
field for the current active row for a DATATABLE HTML 'ListView'.
- When adding data to a DATATABLE using the 'AddRow' method, the
DATATABLE 'HtmlUpdate' method must be used before the SETFOCUS is
used. In this case, the following instruction sequence is recommended.
HtmlTable HTMLCONTROL //Web HtmlControl
...
Table1.HtmlBind Using HtmlTable,1 //Previously created Web HtmlControl
...
GETPROP Table1,*ActiveRow=RowId
Table1.AddRow Using "Unknown", RowId
SETPROP Table1,*ActiveRow=RowId
Table1.HtmlUpdate
SETFOCUS HtmlTable
- Modified to prevent DEBUG from breaking on a step-over or step-out when
using the 'sundebug' debugger.
- Updated the presentation for the WebView TREEVIEW styling.
- Added imagelist support to the Web version of TABCONTROLs.
- Modified to allow single quote characters to be used in Edit columns
for DATATABLE.
- Modified the runtime to allow a 'Ctrl-V' control to be passed to a
KEYIN so a paste action can occur.
- Corrected a problem where the WEBOBJECT property was not being used
on a CREATE FONT operation.
- Corrected issues for a DATATABLE and WIN32 HTMLCONTROL.
- Corrected an image alignment problem for WebView TOOLBAR radio/check
buttons.
-------------------------------------------------------------------------------
PLB(LINUX)
- Modified ComOpen to give I97 subcode 9 error when using Linux plb
runtime. This corrects a problem because the Linux plb runtimes only
support sockets for COMFILE usage.
- Modified the SETMODE/GETMODE instructions to support a new keyword named
'*LINUXREADLOCK={0|1}'. If the 'LINUXREADLOCK' is set to 1, any file
variable ( FILE, AFILE, IFILE ) opened for record locking with
LOCKAUTO, SINGLE, and NOWAIT allows Linux 'read locks' to be used. In
this case, the Linux 'read locks' are ONLY used in the following PL/B
read instructions:
FILE - READ
AFILE - READ, READKG, READKGP
IFILE - READ, READKS, READKP
Note:
1. When Linux 'read locks' are used, this allows multiple end users
to access the same data record in a file at the same time. The
intended purpose of this behavior is to improve the overall
performance of end user programs where reading record IO is
done at a higher percentage of time.
2. If a WRITE or UPDATE operation is performed on a record that
currently has a Linux 'read lock' applied, the write/update
operation MUST first change the 'read lock' into a 'write lock'
before the phyical file data record is written.
If there are multiple different end user programs that have a
Linux 'read locks' on the same data file record at the same
time, the write/update operation generates an I90 error. This
occurs because the Linux OS can ONLY change a 'read lock' to
a 'write lock' when one end user program has a 'read lock'
for a data file record.
3. If a file variable ( FILE, AFILE, IFILE ) is opened with Linux
'read locks' enable, all of the READLK and READxxLK instructions
ONLY lock a data file record using a Linux 'write lock'. In this
case, the READLK and READxxLK instructions set the LESS flag
if a data file record is already locked with Linux 'read locks' or
a 'write lock'.
- Modified the COMOPEN instruction to allow the parameter to contain
a Linux file or device name. By adding this capability, a Linux PLB
program can use the COMREAD and COMWRITE instructions to perform IO
operations on file/device data streams. Also, the COMSTAT, COMCHECK,
and COMCLR instructions have been updated to support the Linux
file/device operations.
Example:
C COMFILE
D1 DIM 1
nCnt FORM 5
Status DIM 20
.
COMOPEN C, "/dev/ttySxx" //Valid device required!
.
. Wait for input data available for reading with 10 sec timeouts.
.
LOOP
COMCHECK C, "001", "10", Status //Wait for read true
IF OVER
KEYIN *T0, D1; //Allow user exit 'ctrl+C'
CONTINUE //Continue waiting
ENDIF
.
. Read Data
.
COMREAD C; *LL, S$CMDLIN;
TYPE S$CMDLIN
IF NOT EOS
INCR nCnt
DISPLAY nCnt, "...Data '", *LL, S$CMDLIN, "'"
ENDIF
REPEAT
.
-------------------------------------------------------------------------------
PLBCMP
- Added a new compiler 'WU' option to the compiler. This option is
used to set a PLC program header flag to save a copy of the UDA
when a PLC program is loaded. This option is required to allow
the MODULE object 'InitializeUda' method to restore a programs
UDA (User Data Area) to its original state/values.
- Add support for PL/B PLBOBJECT object. The CLASS object is implemented
to allow a CLASSMODULE load module to be loaded and executed using the
PL/B instructions as follows:
CREATE
GETPROP
SETPROP
Methods
DESTROY
- Added support for a CLASSMODULE compiler directive. The CLASSMODULE
MUST be declared as the first instruction in a load module. The
CLASSMODLE invokes behaviors in both the PL/B compiler and behaviors
in the PL/B runtimes which can be found in the 'Documentation Section'.
The CLASSMODULE is required to compile a load module with properties
and methods used when loaded using 'CREATE PLBOBJECT'.
- Modified to synchronize the case of nested RECORD member names of the
LIKE RECORD members to be the same as the PARENT RECORD member names.
This corrects issues where LIKE RECORD members were being declared
only as uppercase labels.
- Modified the compiler to support a BOOLEAN data type. In this case, the
BOOLEAN declaration is the same implementation as a 'FORM 1' that only
allows a '0' or '1' value. The BOOLEAN syntax is as follows:
BOOLEAN
BOOLEAN [TRUE | FALSE]
BOOLEAN ({arraysize})
BOOLEAN ({arraysize}),( [TRUE|FALSE] ),( [TRUE|FALSE] )
BOOLEAN ^
BOOLEAN ^({arraysize})
BOOLEAN [%][TRUE|FALSE]
BOOLEAN [*][TRUE|FALSE]
-------------------------------------------------------------------------------
SUNIDE.PLC
- Added Git support.
- Modified the Clean function to support cleaning a project or a program.
- Corrected source program following.
- Modified label lookups to support records.
- Moved the revision stamp format option to the Options/Behavior tab.
- Added an optional revision stamp field to the Replace in Files function.
-------------------------------------------------------------------------------
DESIGNER.PLC
- Corrected code line starting value.
- Now sets the modified flag when called from the IDE to update the code
section.
- Removed duplicate LabelText Appearance property from the definitions
file.
- Added support for the Alert and Alert Dismiss values to the Appearance
property.
- Added the Format Source selection to the Edit Menu.
- Corrected handling of the &OBJNAME code substitution keyword.
- Added a show group id toggle button to the outline window toolbar.
- Added a Show item to the outline window shortcut menu to allow selection
of the additional object values displayed.
- Corrected handling of the Align to Grid option.
-------------------------------------------------------------------------------
SUNCS21.OCX
- Updated to identify PL/B language constructs as follows:
BOOLEAN and BOOL
SELECT, WHEN, and DEFAULT
CLASSMODULE, PLBOBJECT, .UnLoad, and .InitializeUda
-------------------------------------------------------------------------------
EDITOR.PLC
- Modified to cleanup various editing issues.
-------------------------------------------------------------------------------
SCHEMAEDITOR.PLC
- Added validation of index columns after column selection.
-------------------------------------------------------------------------------