Date: 01-31-2003 Subject: RELEASE 8.7 Runtime Files *============================================================================== Notes for some NEW Items: - Sunbelt PL/B IDE (Integrated Development Environment for PL/B) Totally new program that allows you to create program/system projects. The projects allow you to edit, compile, debug and run your programs without ever going to a command propmt. It also keeps track of what files a program depends on and if one of those files changes, then it compiles the dependent program. There are many other features of this new and exciting product. Please see the enclosed help file for more information. - Sunbelt Administration Services for Server Products. The ADMIN features are turned off by default. .INI file changes must be made to enable these features. Please see the included .INI files for the File Manager and Application Server. For detailed informtion see the 'ADMIN' section in this .RFM file. - Sunbelt WATCH program that has many of the Administration Services function already implimented. - New PL/B Statements CLEARADR, LOADADR, STOREADR ADMLOGON, ADMLOGOFF, ADMGETINFO, ADMSETINFO, ADMCOMMAND - New PLBCMP Options '-c[="command"]' - New PLC command header format for Unix '-zc=3' - Vendor Compatibility Mode - GUI Objects LISTVIEW line item color control methods added. VARIANT Safearray support added. - PLB386 support has been dropped. For character mode support please use PLBCON instead. *============================================================================== Notes for WARNINGS: - The PLB386 (WATCOM) runtime has been dropped as a supported runtime in release 8.7. - PL/B programs compiled using the new '-c' compiler option or using the new UNIXCMD directory cannot be executed using any runtime versions prior to version 8.7. A U12 error is given. - The 8.7 version of the SUNFHSYS.DLL cannot be used with any prior releases of PLBWIN. A U40 error is given if this is attempted. Also, the 8.7 version of a PLBWIN runtime cannot be used with any prior releases of SUNFHSYS.DLL. In this case, an 'Entry Point Not Found' error is given. - Cross platform file access is no longer supported in PL/B. You should not try to access a file on windows from windows and unix at the same time. Also you should not try to access a file on unix from unix and windows at the same time. The ability to access files on other platforms is one of the reasons for Sunbelt File Manager and/or Sunbelt Application Server. If you need to have cross platform file support, then you should use one of these products. We have determined there are too many inconsistencies concering file accesses on the various platforms to have a truly reliable system. As we work towards 64 bit file support, the problem even becomes more accute as the various systems are not compatible with each other. We have even found a statement that NETBUI does not support file accesses beyond 32 bits. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Made modifications to allow multiple PRTPAGE statements to be cached. This provides better throughput performance when interfacing with the PLBCLIENT module. Prior to this change, the individual control actions in a single PRTPAGE statement were cached but the next PRTPAGE statement flushed cached operations. - Add Client and File administration functions. See the 'ADMIN' section of this .RFM for more information. - Two new keywords have been added to the Application Server to require user logon and/or ip filtering for all PLBCLIENTs accessing the server. These keywords must be added to the PLBSERVE.INI configuration file to provide secured access to the Application Server. The keywords are described as follows: PLBCS_KEYFILE={keyfile} The Application Server uses the data found in the {keyfile} file to determine if a PLBCLIENT can have access to the server. The specifications for the user logon data in the {keyfile} are identical to the SUNFM documentation. A PLCLIENT user must have a valid 'PLBCS_LOGON={logonkey}' specified in the PLBCLIENT.INI file before a user can execute programs on a secured Application Server that is using the PLBCS_KEYFILE settings. PLBCS_IPFILE={filename} If this keyword is declared in the PLBSERVE.INI configuration file, the Application Server performs IP address filtering when a PLBCLIENT attempts to gain access to the server. The setup and details for the data specified in the {ipfilter} file is the same as documented for the SUNFM documentation. - Implemented keep-alive support for the Unix Application Server runtime. This insures that a server child process can detect situations where a client user workstation is rebooted while a PL/B application is still executing. - Added a new server option named '-r'. This option reset the license for a new authorization number. This allows the authorization license to be reset real time. This eliminates the need to bring the server down and reload it to change the supported number of connections. Note, that no more than five reset are allowed. After five reset have been detected, the server must be reloaded to reset an authorization license. - Corrected a F05 problem when passing an AUTOMATION object as a CALL(S) ROUTINE parameter where the AUTOMATION object is created at the client workstation. - Corrected a problem where a socket error (10054) was being logged when a child process was terminating. This mistaken socket error is no longer being logged. ------------------------------------------------------------------------------- PLBCLIENT- Modified to support new message for cached PRTPAGE statement. PLBCLICON - The PLBCLIENT/PLBCLICON modules now support a logon keyword named 'PLBCS_LOGON={logonkey}'. This keyword must be specified when accessing an Application Server that expects logon identification. If this keyword is specified, the {logonkey} string specifies the identification key used by PLBSERVE to allow client access. The {logonkey} string must be composed of up to sixteen (16) hexadecimal digits that must match the expected logon identification by the Application Server. If the PLBCS_LOGON key does not allow access to the Application server, the client access is disconnected. ------------------------------------------------------------------------------- PLBWIN - Added support to generate keep-alive messages for all PLBSERVE file manager servers currently connected to a runtime program. PLB (UNIX) This support is needed to prevent a file manager child thread from becoming hung when a PC workstation was rebooted. This capability is enabled by default. However, a new keyword named 'PLB_FMKEEPALIVE={on|off}' disables this keepalive support for a runtime if needed. - All of the runtimes have been modified to support an optional new header command line format. See the PLBCMP description for more detail. This new module format allows execution of a PLC module on a Unix platform where the Unix OS recognizes the command header and automatically invokes the runtime using the command line embedded in the PLC module. - Modified the PREP statements for IFILE and AFILE variables to perform an internal lock. This change prevents more than one process from performing the PREP operation at exactly the same time. **WARNING** It is NOT good programming practice to allow more than one user program to PREP the same AAM/ISI files in a multi-user environment. The default action for the PREP instruction for an AFILE/IFILE is to TRUNCATE the text data file and initialize the AAM/ISI files. Improper use of PREP can result in corrupted or lost records when executed by multiple users against the same AAM/ISI files. The PREP statement can now generate an I01 or an I77 io error. The I01 error can occur if an OS error occurs while locking the data file. This error should not occur unless the OS is failing. The I77 error is given if the PL/B runtime does not support the capability to truncate a data file. Contact the Sunbelt Technical Support if this error occurs. This error should never occur in a released runtime. - The {mode} parameter for a OPEN/PREP of an IFILE has been modified to support a new MODE control bit. The CMP_ISI_BLOCK bit definition has been added. This control bit causes the runtime Isam processing to always allocate/extend the ISI file by 8 isam sectors (4096) bytes. CMP_ISI_BLOCK - 0x00000100 - Allocate 8 isam sectors This capability can help improve performance for an application that writes a high number of isam records in a batch mode. - Added new keyword named *USEDBCTYPE={dnumnvar} to the GETMODE and SETMODE statements. The default setting for this keyword is zero. When this keyword is set to zero, the enhanced TYPE statement specifies variable type values as implemented specific for SUNBELT. When this keyword value is set to non-zero, the enhanced TYPE statement specifies variable type values as implemented for SWDBC compatibility. In addition, a new keyword named 'PLB_USEDBCTYPE={on|off}' has been added. This keyword controls the enhanced TYPE statement variable types the same as described for the *USEDBCTYPE keyword used by a SETMODE statement. - The TYPE statement has been enhanced to allow language variable types and array dimensions to be determined when a program is being executed. Notice that the extended TYPE instruction syntax format is only allowed by the compiler when the '-zc=3' option is specified. Format: [label] TYPE {dest} [label] TYPE {var}[,{type}[,Dim1[,Dim2[,Dim3]]]] Where: {dest} - When the first syntax format is used, the {dest} variable can only be a DIM type variable. In this case, the TYPE instruction executes in a traditional manner to verify whether the string contents is a valid numeric format or not. {var} - The {var} operand variable can be specified as any valid data variable reference type. The second syntax format returns the type and dimensions for a data variable reference. {type}- The {type} operand can be an INTEGER or NUMERIC variable that returns a numeric value to identify the {var} variable type. Note, that the values stored into the {type} operand can be controlled by the runtime keyword 'PLB_USEDBCTYPE={on|off}' and the SETMODE keyword named *USEDBCTYPE={dnumnvar}. The type values being returned are specified for a SUNBELT (default) set of values or for a SWDBC compatibility set of values. Data Type SUNBELT SWDBC DIM 32 (0x0020) 1 FORM 16 (0x0010) 2 INTEGER (1) 264 (0x0108) 2 INTEGER (2) 520 (0x0208) 2 INTEGER (3) 776 (0x0308) 2 INTEGER (4) 1032 (0x0408) 2 DIMARRAY 96 (0x0060) 3 FORMARRY 97 (0x0061) 4 INTEGERARRAY 98 (0x0062) 4 FILELIST 20 (0x0014) 5 VARLIST 04 (0x0004) 5 FILE 64 (0x0040) 6 IFILE 65 (0x0041) 7 AFILE 66 (0x0042) 8 COMFILE 71 (0x0047) 9 PFILE 67 (0x0043) 15 SNDFILE 68 (0x0044) DBFILE 69 (0x0045) BFILE 70 (0x0046) ADMIN 73 (0x0049) GUI OBJECTS Values Below 16 BUTTON (0x0130) 16 CHECKBOX (0x0230) 16 CHECKGRP (0x0330) 16 DATALIST (0x0430) 16 DIALOG (0x0530) 16 EDITTEXT (0x0630) 16 ICON (0x0730) 16 MENU (0x0830) 16 MOUSE (0x0930) 16 MOVIE (0x1030) 16 PICT (0x1130) 16 POPUPMENU (0x1230) 16 RADIOGRP (0x1330) 16 RADIO (0x1430) 16 SUBMENU (0x1530) 16 STATTEXT (0x1630) 16 TIMER (0x1730) 16 COLOR (0x1830) 16 FLOATMENU (0x1930) 16 FONT (0x2030) 16 GROUPBOX (0x2130) 16 IMAGELIST (0x2230) 16 LISTVIEW (0x2330) 16 PROGRESS (0x2430) 16 HSCROLLBAR (0x2530) 16 VSCROLLBAR (0x2630) 16 STATUSBAR (0x2730) 16 TREEVIEW (0x2830) 16 TOOLBAR (0x2930) 16 WINDOW (0x3030) 16 COMBOBOX (0x3130) 16 SHAPE (0x3230) 16 SLIDER (0x3330) 16 TABCONTROL (0x3430) 16 COLLECTION (0x3530) 16 PLBFORM (0x3630) 16 LINE (0x3730) 16 Reserved (0x3830) 16 CONTAINER (0x3930) 16 CONTROL (0x4030) 16 VARIANT (0x4130) 16 Reserved (0x4230) 16 MAINWINDOW (0x4330) 16 STATUSPANEL (0x4430) 16 TOOLBUTTON (0x4530) 16 {Dim1}- Numeric variable to return a first dimension size if the {var} is an array. If the {var} is not an array, a value of zero is returned. {Dim2}- Numeric variable to return the size of the second dimension if the {var} is a two dimensioned array. If the {var} variable is not a two dimensioned array, a value of zero is returned. {Dim3}- Numeric variable to return the size of the third dimension if the {var} is a three dimensioned array. If the {var} variable is not a three dimensioned array, a value zero is returned. Note: 1. The enhanced syntax format for the TYPE statement that allows variable type and array dimension operands is only supported by the compiler when a program is compiled using the 'zc=3' compiler option. Use of the 'zc=3' option causes array dimension information to be stored into the UDA of a PLC module. - Support for a new CLEARADR instruction has been added. The CLEARADR statement clears/detaches each pointer variable found in an operand list. If a list variable is an array of pointers, each pointer in the array is cleared/detached. Format: [label] CLEARADR {varptr}[,{varptr}[, ...]] Where: {varptr} - Any PL/B variable that is a pointer. Also, {varptr} can be an array that contains pointers. Flags: None Affected Notes: 1. If the {varptr} is an array of pointers, each pointer in the array is cleared/detached. 2. Each {varptr} is detached from any previous variable or pointer. Once a {varptr} variable is unattached, the {varptr} variable must be reattached by either a MOVEADDR, MOVEPTR, SMAKE, LOADADR, or STOREADR instruction prior to being referenced. See MOVEADDR instruction item (4.) for error details. Example: A DIM ^ B FORM ^ C INTEGER ^ . BUT BUTTON ^ . DIMARR DIM ^(3) pDIMARR DIM ^[] . VARLIST VARLIST ^ . CLEARADR A,B,C,BUT,DIMARR,pDIMARR,VARLIST - Support for a new LOADADR instruction has been added. The LOADADR statement loads the address of a variable found in a variable list into a destination pointer. The selection of a variable from the variable list is determined by the index value. Format: [label] LOADADR {destptr}{sep}{index}{sep}{var}[,{var}...] [label] LOADADR {destptr}{sep}{index}{sep}{varlist} [label] LOADADR {destptr}{sep}{index}{sep}{array} Where: {destptr} - The destination variable can be any pointer variable type. {index} - The index is a numeric variable or numeric literal value whose value indicates which variable from the variable list is retrieved. {var} - Any variable data type whose type is the same as the {destptr}. If the {destptr} variable is a VAR typeless variable, any {var} variable type is allowed. {varlist} - The {varlist} can be any VARLIST variable whose pseudo type is compatible with the {destptr} when it is a DIM, FORM, or INTEGER pointer type. The {varlist} variable can be any pseudo type when the {destptr} is a VARLIST pointer type. {array} - The {array} variable be any array variable whose data type is compatible with the {destptr} variable. The {index} value is used to reference individual elements in the {array} variable. However, if the {destptr} is an Array Pointer variable, it is processed as a single variable in the variable list. In this case, the address of the {array} variable is loaded into the {destptr}. Flags: None Affected Notes: 1. If the {index} value is zero or greater than the number of variables processed in the variable list, no action is taken. In this case, the {destptr} remains unchanged. Example: A DIM 1 B DIM 1 C DIM 1 DARR DIM 2(3) DARR1 DIM 2(3) DARR2 DIM 2(3) . F1 FORM "1" F2 FORM "2" F3 FORM "3" . pDARR DIM ^[] pDIM DIM ^ pVARL VARLIST ^ pTYP VAR ^ . NDX FORM "2" . VARLDIM VARLIST A, B, C VARLNUM VARLIST F1, F2, F3 . LOADADR pDIM, NDX, A, B, C LOADADR pDIM, NDX, VARLDIM ;Process VARLIST items LOADADR pDIM, NDX, DARR ;Process DARR items LOADADR pDARR, NDX, DARR, DARR1, DARR2 LOADADR pVARL, NDX, VARLDIM, VARLNUM LOADADR pTYP, NDX, A, F1, VARLDIM, pDARR - Support for a new STOREADR instruction has been added. The STOREADR statement stores the address of a variable into a pointer variable found in a variable list. The selection of the destination variable in the variable list is determined by the index value. Format: [label] STOREADR {var}{sep}{ndx}{sep}{varptr}[,{varptr}...] [label] STOREADR {var}{sep}{ndx}{sep}{varlist} [label] STOREADR {var}{sep}{ndx}{sep}{array} Where: {var} - The source variable can be any variable type. {index} - The index is a numeric variable or numeric literal value whose value indicates the variable from the variable list that is updated. {varptr} - Any pointer variable data type whose type is the same as the {var}. {varlist} - The {varlist} can be any VARLIST variable whose pseudo type is compatible with the {var} when it is a DIM, FORM, or INTEGER variable type. The {varlist} variable items are processed in this case to determine the destination pointer to store the {var} address. {array} - The {array} variable can be any array variable of pointers whose data type is compatible with the {var} variable. The {index} value references individual elements in the {array} variable. Flags: None Affected Notes: 1. If the {index} value is zero or greater than the number of variables processed in the variable list, no action is taken. In this case, no variable is changed. Example: pA DIM ^ pB DIM ^ pC DIM ^ . ADIM DIM 1 . DARR DIM 2(3) . pDARR DIM ^[] ;DIM Array Pointer pDARR1 DIM ^[] pDARR2 DIM ^[] pDARR3 DIM ^[] . DARRPTR DIM ^(3) ;Array of DIM pointers . pTYP VAR ^ ;Typeless Pointer pTYP1 VAR ^ pTYP2 VAR ^ pTYP3 VAR ^ . NDX FORM "2" . VARLDIM VARLIST pA, pB, pC pVARL1 VARLIST ^ pVARL2 VARLIST ^ pVARL3 VARLIST ^ . STOREADR ADIM, NDX, pA, pB, pC STOREADR pTYP, NDX, pTYP1, pTYP2, pTYP3 STOREADR DARR, NDX, pDARR, pDARR1, pDARR2 STOREADR ADIM, NDX, VARLDIM STOREADR ADIM, NDX, DARRPTR STOREADR VARLDIM, NDX, pVARL1, pVARL2, pVARL3 ------------------------------------------------------------------------------- PLBWIN - Modified the LISTVIEW SortColumn method to support two new sorting types. The new types allow sorting that is not case sensitive. The new {type} values are as follows: 11 - Sort Alpha ascending (Not Case Sensitive) 12 - Sort Alpha descending (Not Case Sensitive) - Modified the LISTVIEW object to support two new methods named 'InsertColumnBgClr' and 'InsertColumnFgClr'. These new methods allow data columns to be inserted into a LISTVIEW that can be used to control the Foreground and Background colors for line item. LISTVIEW Methods .-------------------- . InsertColumnBgClr Method . The InsertColumnBgClr method inserts a special column into a LISTVIEW object that allows specification of the background color of a line item row. The data string stored into each subitem for this column specifies a hex string that represents the RGB value used for a line item. The expected string format of a line item color is '0xRRGGBB'. The method uses the following format: [label] {object}.InsertColumnBgClr [GIVING {return}]: USING [*Index=]{index} Where: label is an optional Program Execution Label. object is a required Listview object that is accessed. return is an optional numeric Variable that receives the return value. index is a required decimal number or Numeric Variable that specifies the index of the new column. Flags Affected: EOS, OVER, ZERO Note the following: 1. The background color column is inserted with a width size of zero. This allows the color column to exist and be used in a LISTVIEW without being visible to a user. 2. It is also possible to use SortColumn to sort the color data items. This allows grouping of line items by color. 3. Upon completion, {return} contains the new column number or -1 if the method fails. 4. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 5. If {return} is too small to contain the result of the method, the OVER Condition Flag is set (TRUE). 6. The EOS Condition Flag is always cleared (FALSE). .-------------------- . InsertColumnFgClr Method . The InsertColumnFgClr method inserts a special column into a LISTVIEW object that defines the foreground color of a line item row. The data string stored into each subitem for this column specifies a hex string that represents the RGB value of the color for a line item. The expected string format of a line item color is '0xRRGGBB'. The method uses the following format: [label] {object}.InsertColumnFgClr [GIVING {return}]: USING [*Index=]{index} Where: label is an optional Program Execution Label. object is a required Listview object that is accessed. return is an optional numeric Variable that receives the return value. index is a required decimal number or Numeric Variable that specifies the index of the new column. Flags Affected: EOS, OVER, ZERO Note the following: 1. The foreground color column is inserted with a width size of zero. This allows the color column to exist and be used in a LISTVIEW without being visible to a user. 2. It is also possible to use SortColumn to sort the color data items. This allows grouping of line items by color. 3. Upon completion, {return} contains the new column number or -1 if the method fails. 4. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 5. If {return} is too small to contain the result of the method, the OVER Condition Flag is set (TRUE). 6. The EOS Condition Flag is always cleared (FALSE). - Modified the VARIANT object to support VARIANT ARRAYs. This support is implemented as follows: 1. The VARTYPE property value can now include a $VT_ARRAY value (0x2000) in a CREATE VARIANT operation to cause a one dimensioned VARIANT ARRAY to be created with a single VARIANT element. The number of VARIANT elements can be changed using the new 'ResizeElements' method for the VARIANT object. 2. The $VT_ARRAY value CAN NOT be used for a VARTYPE value to change a variant type in a SETPROP operation. This causes an O132 error to occur. 3. A SETPROP operation to set the VARVALUE property for a VARIANT that was created using the $VT_ARRAY type changes the first variant value in the VARIANT ARRAY. 4. A GETPROP operation to get the VARVALUE or VARABSVALUE property value for a VARIANT that was created using the $VT_ARRAY type retrieves the first variant value in the VARIANT ARRAY. 5. Support for methods have been added to a VARIANT object. The following methods have been added for a VARIANT object to support VARIANT ARRAY(s). VARIANT Methods .-------------------- . GetDim Method . The GetDim method retrieves the number of dimensions defined for a VARIANT object. The method uses the following format: [label] {object}.GetDim GIVING {return} Where: label is an optional Program Execution Label. object is a required Variant object that is accessed. return is a Numeric Variable that gets the current number of dimensions for a VARIANT object. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. If the VARIANT object has a VARIANT ARRAY type, the returned value is the number of dimensions for the VARIANT ARRAY. Otherwise, the returned value is zero. .-------------------- . GetElement Method . The GetElement method retrieves the specified variant from the VARIANT ARRAY and return it in a PL/B VARIANT object. The method uses the following format: [label] {object}.GetElement GIVING {variant}: USING [*Index=]{index}[: [*Index1=]{index1}[: [*Index2=]{index2}[: [*Index3=]{index3}[: [*Index4=]{index4}]]]] Where: label is an optional Program Execution Label. object is a required Variant object that is accessed that has been created as a $VT_ARRAY. variant is a PL/B VARIANT object where the VARIANT ARRAY variant element is to be stored. If there is an error, the returned VARIANT has a VARTYPE of $VT_EMPTY. index is a numeric value that specifies the zero relative indexed value for the variant element in the first dimension of the VARIANT ARRAY. index1 is an optional numeric value that specifies the zero relative indexed value for the variant element in a second dimension of the VARIANT ARRAY. index2 is an optional numeric value that specifies the zero relative indexed value for the variant element in a third dimension of the VARIANT ARRAY. index3 is an optional numeric value that specifies the zero relative indexed value for the variant element in a fourth dimension of the VARIANT ARRAY. index4 is an optional numeric value that specifies the zero relative indexed value for the variant element in a fifth dimension of the VARIANT ARRAY. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO, OVER and EOS Condition Flags are always cleared (FALSE). 2. The PL/B CREATE VARIANT ARRAY operation can only create a one dimensioned VARIANT ARRAY. This methods supports multiple dimensions for a VARIANT ARRAY that has been created by a CONTROL or another third party application. .-------------------- . GetElemCount Method . The GetElemCount method retrieves the element count for a specified VARIANT ARRAY dimension. A value of zero is returned if there are no elements for a dimension. The method uses the following format: [label] {object}.GetElemCount GIVING {return}: [USING [*DIMPOS]{dimpos}] Where: label is an optional Program Execution Label. object is a required Variant object that is accessed. return is a Numeric Variable that gets the current number of variant elements found in a VARIANT ARRAY dimension. dimpos is an optional numeric value that specifies the VARIANT ARRAY dimension to retrieve the variant element count for. If the {dimpos} is not specified, the method retrieves the variant element count for the first dimension as a default. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). .-------------------- . SetElemCount Method . The SetElemCount method allows the number variant elements to be changed for a single dimensioned VARIANT ARRAY. The method uses the following format: [label] {object}.SetElemCount [GIVING {return}]: USING [*Size=]{size} Where: label is an optional Program Execution Label. object is a required Variant object that is accessed. return is an optional numeric variable that gets the current return value. size is a numeric value that specifies the new variant element count for a single dimensioned VARIANT ARRAY. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. If the {object} is a $VT_ARRAY variant and the returned value is zero, the resizing action was successful. A non-zero value in this case indicates that the resizing was unsuccessful. 4. If the {object} is a $VT_ARRAY variant and the {size} value is zero, this is an error and no resizing action is performed. The returned value is non-zero in this case. 5. If the {object} is NOT a $VT_ARRAY variant, the returned value is zero and no action is performed. .-------------------- . PutElement Method . The PutElement method stores a PL/B VARIANT object into the specified variant element of the VARIANT ARRAY. The method uses the following format: [label] {object}.PutElement [GIVING {return}]: USING [*Value=]{variant}: [*Index=]{index}[: [*Index1=]{index1}[: [*Index2=]{index2}[: [*Index3=]{index3}[: [*Index4=]{index4}]]]] Where: label is an optional Program Execution Label. object is a required Variant object that is accessed that is created as $VT_ARRAY type. return is an optional numeric variable to receive the returned value. If the variant was stored successfully a returned value is zero. Otherwise, a non-zero value is returned. variant is a PL/B VARIANT object that is placed into the VARIANT ARRAY. index is a numeric value that specifies the zero relative indexed value for the variant element in the first dimension of the VARIANT ARRAY. index1 is an optional numeric value that specifies the zero relative indexed value for the variant element in a second dimension of the VARIANT ARRAY. index2 is an optional numeric value that specifies the zero relative indexed value for the variant element in a third dimension of the VARIANT ARRAY. index3 is an optional numeric value that specifies the zero relative indexed value for the variant element in a fourth dimension of the VARIANT ARRAY. index4 is an optional numeric value that specifies the zero relative indexed value for the variant element in a fifth dimension of the VARIANT ARRAY. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO, OVER and EOS Condition Flags are always cleared (FALSE). 2. The PL/B CREATE VARIANT ARRAY operation can only create a one dimensioned VARIANT ARRAY. This method supports multiple dimensions for a VARIANT ARRAY that has been created by a CONTROL or another third party application. - Two new methods have been added for a TREEVIEW object. The methods are named GETITEMSTATE and SETITEMSTATE. The methods are described as follows: TREEVIEW Methods .-------------------- . GetItemState Method . The GetItemState method retrieves the current state flags, overlay image index, and state image index for a specified line item in a TREEVIEW object. The method uses the following format: [label] {object}.GetItemState GIVING {return}: USING [*Item=]{item}[: [*StateMask=]{statemask}] Where: label is an optional Program Execution Label. object is a required TREEVIEW object that is accessed. return is a numeric value whose integer bit map represents the item state flags as follows: bits 0 - 7 - Item state flags 8 - 11 - Item overlay image index 12 - 15 - State image index statemask is a numeric value whose integer bit map mask identifies the state member bits that are valid to be retrieved. This parameter is optional. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. The following is a description of the returned state flag bit map values: State flag description: Set of bit flags and image list indexes that indicate the item's state. When setting the state of an item, the stateMask member indicates the bits of this member that are valid. When retrieving the state of an item, this member returns the current state for the bits indicated in the StateMask member. ......................... . Item State Flags . Bits 0 through 7 of this member contain the item state flags. The following is a list of possible item state flags. TVIS_BOLD 0x0010 The item is bold. TVIS_CUT 0x0004 The item is selected as part of a cut-and-paste operation. TVIS_DROPHILITED 0x0008 The item is selected as a drag-and-drop target. TVIS_EXPANDED 0x0020 The item's list of child items is currently expanded; that is, the child items are visible. This value applies only to parent items. TVIS_EXPANDEDONCE 0x0040 The item's list of child items has been expanded at least once. This value applies only to parent items. TVIS_EXPANDPARTIAL 0x0080 Available in Version 4.70 of commctrl. A partially expanded tree-view item. In this state, some but not all of the child items are visible and the parent items plus symbol is displayed. TVIS_SELECTED 0x0002 The item is selected. Its appearance depends on whether it has the focus. The item is drawn using the system colors for selection. ......................... . Overlay Image Index . Bits 8 through 11 of this state member specify the one-based overlay image index. The overlay image is superimposed over the item's icon image. If these bits are zero, the item has no overlay image. To isolate these bits, use the TVIS_OVERLAYMASK mask. When you set or retrieve an item's overlay image index, you must specify the TVIS_OVERLAYMASK in the Statemask member. TVIS_OVERLAYMASK 0x0F00 Mask for the bits used to specify the item's overlay image index. ......................... . State Image Index . A state image is displayed next to an item's icon to indicate an application-defined state. Specify the state image list by executing the SetImageList method. To set an item's state image, include the TVIS_STATEIMAGEMASK value in the StateMask. Bits 12 through 15 of the state member operand specify the index in the state image list of the image to be drawn. To indicate that the item has no state image, set the index to zero. This convention means that image zero in the state image list cannot be used as a state image. To isolate bits 12 through 15 of the state member, use the TVIS_STATEIMAGEMASK mask. When you set or retrieve an item's state image index, you must specify the TVIS_STATEIMAGEMASK in the Statemask member. TVIS_STATEIMAGEMASK 0xF000 Mask for the bits used to specify the item's state image index. 4. The following is a description of the returned StateMask flag bit map values: StateMask flag description: Bits of the state member that are valid. If you are retrieving an item's state, set the bits of the stateMask member to indicate the bits to be returned in the state member. If you are setting an item's state, set the bits of the stateMask member to indicate the bits of the state member that you want to set. To set or retrieve an item's overlay image index, set the TVIS_OVERLAYMASK bits. To set or retrieve an item's state image index, set the TVIS_STATEIMAGEMASK bit. .-------------------- . SetItemState Method . The SetItemState method sets the current state flags, overlay image index, and state image index for a specified line item in a TREEVIEW object. The method uses the following format: [label] {object}.SetItemState [GIVING {return}]: USING [*Item=]{item}: [*State=]{state}[: [*StateMask=]{statemask}] Where: label is an optional Program Execution Label. object is a required TREEVIEW object that is accessed. return is an optional numeric value that is always zero. The returned value is not used. state is a numeric value whose integer bit map settings identify the state member bits to be set for a TREEVIEW object item. statemask is a numeric value whose integer bit map mask identifies the state member bits that are valid to be retrieved. This parameter is optional. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. The descriptions of the {state} and {statemask} are the same as specified in the GetItemState method. - Corrected a problem where a ROLLOUT operation for PLBWIN was closing managed files resulting in I05 errors. The ROLLOUT statement for PLBWIN has been corrected to temporarily close files exactly like an EXECUTE statement. - Corrected a problem where ALT+char sequences did not work for TOOLBAR buttons. The ALT+char sequences now work as expected. - Corrected a problem where execution of 'SETPROP obj,*ENABLED=0' was causing an O105 error. The error being reported now gives an O123 error in this case. - A GPF error was corrected when the MAINWINDOW object was used as the target window when executing a CREATE for the following objects: AUTOMATION, COLOR, MENU, FLOATMENU, MREGION, and TIMER. - Corrected a problem where use of the keyword PLB_RECORDLOCK=PHYSICAL was conflicting with an internal lock for files opened by a PLB Unix runtime. This problem could cause a program to hang indefinitely when opening and using files from a PLBWIN PL/B program accessing files on a Unix system. ------------------------------------------------------------------------------- PLBWIN - Modified the SPLOPEN output operations to reduce physical disk PLBCON io write operations when executing PRINT statements. This improves the spooled file output performance. ------------------------------------------------------------------------------- PLB (UNIX)-Corrected a problem where a READKS was always waiting for a timeout when Record Locking was being used. This was causing unexpected poor program performance when using Record Locking. ------------------------------------------------------------------------------- PLBCMP - The compiler has been modified to support a new option '-c[="command line"]'. This option causes the PLC module output to contain a new header format that includes the "command line" that is specified. If the '-c' option is specified without a user command line, a default command 'plb' is put into the new header. This new command line header format allows a PLC module to be executed on a Unix platform directly without specifying a runtime on the command line. Also, a new compiler directive named 'UNIXCMD ["command line"]' has been added. If this new directive is specified in the source of a PL/B application, the PLC output for the application is generated for the new PLC header format. The PLC header in this case contain the "command line" data or a default 'plb' command line. Note: 1. The '-c' command line option overrides any UNIXCMD directives found in a program's source. The compiler gives an appropriate compiler WARNING if a UNIXCMD is ignored. 2. When the new PLC command line header format is used, 2. All 87 runtimes recognize and properly execute a program with the new PLC command line header format. However, if the new PLC module format is executed by a runtime for a prior release, a U12 error occurs. - The compiler has been modified to allow the '-zc' option to have an optional compatibility value. The new accepted format is '-zc[=n]'. The 'n' value in this case can have one of the following values: ZC - Compile in Datapoint DOS mode ZC=0 - Compile in Sunbelt Mode ZC=1 - Compile in Datapoint DOS mode ZC=2 - Compile in Datapoint RMS mode ZC=3 - Compile in DBC mode - If the compiler is compiling for the 'ZC=3' mode, the following statement syntax formats are supported. DimArray DIM 6[3], INITIAL "123", "abc", "xyz" FormArray FORM 6[3], INITIAL 1, 2, 3 IntArray INTEGER [3], INITIAL 1, 2, 3 . Int INTEGER "123" TypeLess VAR @ TypeLessArr VAR [3]@ . DimPtr DIM @ DimArr DIM [3]@ DimArrPtr DIM @[] Dim2ArrPtr DIM @[,] Dim3ArrPtr DIM @[,,] . TYPE TypeLess, TYP,DZ1,DZ2,DZ3 MOVEADR TypeLess, DimPtr MOVEPTR TypeLess, DimPtr CALL XXX USING DimArray . XXX ROUTINE DimArrPtr RETURN . YYY ROUTINE TypeLess RETURN . Note: 1. For the 'ZC=3' compatibility mode, the following data PL/B language statements have been modified to support the alternate syntax forms. ---------------------------------------------- DIM Variable The DIM variable has been modified to support the following alternate statement syntax formats when compiling with the 'ZC=3' compiler option. Formats: (ZC=3 Compatibility Mode) [label] DIM [*][%]{size}({arraysize}), INITIAL "????", ... [label] DIM ({arraysize})@ [label] DIM @() [label] DIM @(,) [label] DIM @(,,) a. The first format supports a new array initialization syntax form. b. The second format supports a new DIM syntax for an array of DIM pointers. c. The third format specifies a new DIM ARRAY POINTER construct. The DIM ARRAY POINTER can contain an address of a DIM ARRAY. d. The fourth format specifies a two dimensioned DIM ARRAY POINTER construct. The two dimensioned DIM ARRAY POINTER can contain an address of a two dimensioned DIM ARRAY. e. The fifth format specifies a three dimensioned DIM ARRAY POINTER construct. The three dimensioned DIM ARRAY POINTER can contain an address of a three dimensioned DIM ARRAY. Example: DimArray DIM 6[3], INITIAL "123", "abc", "xyz" DimArr DIM [3]@ ;Array of 3 pointers DimArrPtr DIM @[] ;Array Pointer 1 dimension Dim2ArrPtr DIM @[,] ;Array Pointer 2 dimensions Dim3ArrPtr DIM @[,,] ;Array Pointer 3 dimensions . MOVEADR DimArray, DimArrPtr DISPLAY DimArrPtr(2) ---------------------------------------------- FORM Variable The FORM variable has been modified to support the following alternate statement syntax formats when compiling with the 'ZC=3' compiler option. Formats: (ZC=3 Compatibility Mode) [label] FORM [*][%]{size}({arraysize}), INITIAL {dvalue}, .. [label] FORM ({arraysize})@ [label] FORM @() [label] FORM @(,) [label] FORM @(,,) a. The first format supports a new array initialization syntax form. The {dvalue} in this syntax form is a decimal immediate value without '"' double quote characters. b. The second format supports a new FORM syntax for an array of FORM pointers. c. The third format specifies a new FORM ARRAY POINTER construct. The FORM ARRAY POINTER can contain an address of a FORM ARRAY. d. The fourth format specifies a two dimensioned FORM ARRAY POINTER construct. The two dimensioned FORM ARRAY POINTER can contain an address of a two dimensioned FORM ARRAY. e. The fifth format specifies a three dimensioned FORM ARRAY POINTER construct. The three dimensioned FORM ARRAY POINTER can contain an address of a three dimensioned FORM ARRAY. Example: FormArray FORM 2.2[3], INITIAL 1.5, 2.5, 3.5 FormArr FORM [3]@ ;Array of 3 pointers FormArrPtr FORM @[] ;Array Pointer 1 dimension Form2ArrPtr FORM @[,] ;Array Pointer 2 dimensions Form3ArrPtr FORM @[,,] ;Array Pointer 3 dimensions ---------------------------------------------- INTEGER Variable The INTEGER variable has been modified to support the following alternate statement syntax formats when compiling with the 'ZC=3' compiler option. Formats: (ZC=3 Compatibility Mode) [label] INTEGER [*][%]{size}({arraysize}), INITIAL {dvalue}, .. [label] INTEGER ({arraysize})@ [label] INTEGER @() [label] INTEGER @(,) [label] INTEGER @(,,) [label] INTEGER {value} a. The first format supports a new array initialization syntax form. The {dvalue} in this syntax form is a decimal immediate value without '"' double quote characters. b. The second format supports a new INTEGER syntax for an array of INTEGER pointers. c. The third format specifies a new INTEGER ARRAY POINTER construct. The INTEGER ARRAY POINTER can contain an address of a INTEGER ARRAY. d. The fourth format specifies a two dimensioned INTEGER ARRAY POINTER construct. The two dimensioned INTEGER ARRAY POINTER can contain an address of a two dimensioned INTEGER ARRAY. e. The fifth format specifies a three dimensioned INTEGER ARRAY POINTER construct. The three dimensioned INTEGER ARRAY POINTER can contain an address of a three dimensioned INTEGER ARRAY. f. The sixth format allows an INTEGER to be specified where the {value} is a numeric literal without a size specification. In this case, the INTEGER size defaults to an 4-byte integer. Example: IntArray INTEGER [3], INITIAL 1, 2, 3 IntArr INTEGER [3]@ ;Array of 3 pointers IntArrPtr INTEGER @[] ;Array Pointer 1 dimension Int2ArrPtr INTEGER @[,] ;Array Pointer 2 dimensions Int3ArrPtr INTEGER @[,,] ;Array Pointer 3 dimensions Int INTEGER "123" ;Default to 4 byte integer ---------------------------------------------- VAR Variable (New Statement) The VAR variable is a new language declaration statement that declares a typeless data variable pointer. A typeless variable can contain the address of any PL/B language variable. The Typeless variable can only be declared when the compiler 'ZC=3' option is used. Also it can only be used as an operand variable in the following statements: ROUTINE LROUTINE MOVEADR MOVEPTR TYPE (Enhanced format) STOREADR (New) LOADADR (New) CLEARADR (New) Formats: (ZC=3 Compatibility Mode) [label] VAR @ [label] VAR [{arraysize}]@ Example: TypeLess VAR @ TypeLessArr VAR [3]@ DimX INIT "ABC" FormX FORM "123.456" IntX INTEGER 1,"256" XType INTEGER 4 DimPtr DIM @ FormPtr FORM @ IntPtr INTEGER @ $08h INTEGER 1,"0x08" $10h INTEGER 1,"0x10" $20h INTEGER 1,"0x20" . CALL XXX USING DimX CALL XXX USING FormX CALL XXX USING IntX STOP . XXX ROUTINE TypeLess TYPE TypeLess, XType AND 0xFF,XType SWITCH XType CASE $20h MOVEADR TypeLess, DimPtr DISPLAY "DIM:",*LL,DimPtr CASE $10h MOVEADR TypeLess, FormPtr DISPLAY "FORM:",FormPtr CASE $08h MOVEADR TypeLess, IntPtr DISPLAY "INTEGER:",IntPtr DEFAULT DISPLAY "Input Variable Type Invalid!" ENDSWITCH RETURN ---------------------------------------------- MOVEADR and MOVEADDR Statements The MOVEADR/MOVEADDR statements have been modified to allow a VAR typeless variable or ARRAY POINTER variable in the source and destination operands. Example: See VAR description ---------------------------------------------- MOVEPTR Statement The MOVEPTR statement has been modified to allow a VAR typeless variable or ARRAY POINTER variable in the source and destination operands. ---------------------------------------------- ROUTINE/LROUTINE Statements The ROUTINE and LROUTINE variable list has been modified to allow a VAR typeless variable or ARRAY POINTER as valid variables. Example: See VAR description ---------------------------------------------- TYPE Statement The TYPE statement has been modified to accept an alternate syntax format. Format: (ZC=3 Compatibility Mode) [label] TYPE {var}[,{type}[,Dim1[,Dim2[,Dim3]]]] Note: 1. Please detailed discussion for the enhanced TYPE instruction in the PLBWIN/PLBSERVE/PLB section above. Example: See VAR description - Three new instructions have been added to provide vendor compatibility support for variable pointers. The new instructions are CLEARADR, LOADADR, and STOREADR. Please see the instruction descriptions in the PLBWIN/PLBSERVE/PLB section above. - Modified the compiler displayed output to be bold/high intensity. This makes the displayed output to be easier to view. - Modified MACRO processing to improve performance for compilation times. - Corrected a problem where the compiler was ignoring the optional MASK parameter if a preposition was used. The compiler now compiles correctly when a comma or preposition is used. - Corrected a problem where the compiler was not honoring the TEMP path for the cross reference temporary files or for the sorting of these files. Can provide dramatic speed improvements when a cross reference is generated and the source is on a network drive. - Corrected a problem with a TIFF image that used LZW compression that caused O103 errors. .-.Corrected a GPF problem when a PLFORM implied collection was added to a COLLECTION object. ------------------------------------------------------------------------------- PLBDSIGN - Modified the designer to examine a CONTROL type library output to be more detailed/precise for Safearrays. Also, if a USING parameter is identified as {out}, the VARPTR parameter is required. - Added an option to only allow a single instance of the designer to be loaded. - Corrected a problem where the designer would allow a form to opened multiple times. ------------------------------------------------------------------------------- UTILITY - SUNIDXNT and SUNINDEX Corrected a problem where an extra CR (0x0D) character was being logged for a Duplicate key record when using the '-l log' option. - PXLAT Modified the translation utility to accept the new PLC command line header format. ------------------------------------------------------------------------------- ADMEQU.INC - New include module that contains equates for ADMIN services. ------------------------------------------------------------------------------- PLBEQU.INC - Modified to include LISTOFF/LISTON to reduce listing output. - Modified to include $VT_ARRAY definitions for VARIANT objects. ------------------------------------------------------------------------------- PLBMETH.INC- Updated for VARIANT methods. - Updated the TREEVIEW object for new methods. ------------------------------------------------------------------------------- ADMIN - Administrative Services have been added to all of the Sunbelt server products. This includes the SUNFM File Manager, the PLBSERVE Application Server, and the PLBWIN Automation Server. The basic capabilities provided by the Administrative Services are as follows: 1. An Admin Main Task is created when a Sunbelt server is loaded. As client users access/use a server, data is automatically collected and maintained in a Admin Database. 2. The Admin Main Task allows PL/B programs to logon to the Administrative services to provide a user interface for administrators. 3. New Administrative statements have been added to the PL/B language to allow access to the Admin Database. The new Admin statements allow data to be retrieved to provide a real time view of the current client users making use of any server. In addition, the new Admin statements provide specific commands that can be sent to individual server child tasks to allow basic administrator controls for child tasks. --------------- -- ADMIN Errors All ADMIN statement errors are O155 errors with a sub-code. #define O155_failedtostartsocket 1 #define O155_badipaddr 2 #define O155_outofmemory 3 #define O155_socketcreatefail 4 #define O155_socketbindfail 5 #define O155_adminnotfound 6 #define O155_badversion 7 #define O155_unknownversion 8 #define O155_connectlost 9 #define O155_socketerr 10 #define O155_encryptstartup 11 ---------------------------------- -- Server Configuration Parameters The following configuration keyword parameters can be used in the server configuration/ini files SUNFM, PLBSERVE, or PLBWIN in Automation Server Mode. ADMIN_SUPPORT={ON|OFF} This parameter specifies whether the main admin task is created. A value of OFF prevents the main admin task from being created. A value of ON creates a main admin task. If the parameter is not found, the main admin task is created only if an ADMIN_HOSTNAME, or a server log file (FM_LOGNAME, FM_LOGFILE, PLBAS_LOGNAME, PLBAS_LOGFILE, PLBCS_LOGNAME, or PLBCS_LOGFILE) is found. ADMIN_PORTNUM={port number} This parameter specifies a port number for the admin logon task. If not provided, the default is 2101. ADMIN_HOSTNAME={hostname} This parameter specifies an I/P address for the admin logon task. If the parameter is not found, no admin logon task is created. If no admin logon task is created an ADMLOGON statement only works with the 'local' option for an I/P address. ADMIN_PUBLIC={public key} This parameter specifies a user provided public encryption key. ADMIN_KEYFILE={filename} This parameter specifies a LOGON key file. (Same as SUNFM) ADMIN_IPFILE={filename} This parameter specifies a I/P filtering file. (Same as SUNFM) ADMIN_DATASET={string} This parameter specifies a filter for data kept by the main admin task. This parameter is a quoted string of comma separated numbers, or number ranges(x-x). Each number represents a data type (same data types as used in the ADMGETINFO statement). This causes all data items to be cleared and items specified in the string to be set for collection. (e.g. - "1,20-22" would cause collection of data items 1, 20, 21 and 22) ADMIN_DATACLR={string} This parameter is like the ADMIN_DATASET parameter, but starts with all data items set and clears the items specified by the string. This parameter is not used if the ADMIN_DATASET parameter is specified. If neither ADMIN_DATACLR or ADMIN_DATASET is used, all data items are collected. ADMIN_LOGCHILD={ON|OFF} This parameter specifies if a child task should start with logging ON or OFF. The default is ON. ADMIN_LOGLEVEL={value} This parameter specifies the starting log level for all tasks. The default is log level 0. ---------------------------------- -- Client Configuration Parameters The following parameter keywords can be specified for a client in any PL/B runtime that supports the ADMIN statements. ADMIN_PUBLIC={public key} This parameter specifies a user provided public encryption key. ADMIN_LOGON={logon key} This parameter is the default value for the logon encryption key used if the ADMLOGON statement does not specify a logon key. The server must have a file name set in the ADMIN_KEYFILE configuration parameter. The use of this keyword is optional and not required in that the logon key value can be specified in the ADMLOGON statement parameters. ---------------------------- -- New Admin PL/B Statements ------------ -- ADMLOGON The ADMLOGON statement connects a ADMIN data variable with a admin server. [label] ADMLOGON {admin},{ipaddr},{port}[,{public}[,{logon}]] Where: {admin} - ADMIN data variable {ipaddr} - I/P Address of server {port} - Port number of server {public} - Optional public key {logon} - Optional logon key Flags: ZERO - This flag is set TRUE if the logon operation was completed without error. Otherwise, it is set to FALSE. Notes: 1) The optional public and logon keys override the ADMIN_PUBLIC and ADMIN_LOGON configuration parameters. 2) {ipaddr} can be set to "local" for local application server if this statement is being using by the Plbclient command. Any ADMIN_KEYFILE used by the local application server is still checked for security purposes. ------------ -- ADMLOGOFF The ADMLOGOFF statement disconnects a ADMIN data variable from a admin server. [label] ADMLOGOFF {admin} Where: {admin} - ADMIN data variable Flags: ZERO - This flag is always set to FALSE. ------------ -- ADMGETINFO The ADMGETINFO statement obtains data for the admin server. [label] ADMGETINFO {admin},{id},{type},{mask},{result} Where: {admin} - ADMIN data variable {id} - Admin ID of object {type} - Type of info {mask} - Mask to filter the request {result} - Data variable for result Flags: EOS - This flag is set TRUE if the {result} variable output is too small causing data to be truncated. Otherwise, it is set to FALSE. ZERO - This flag is set TRUE if the ADMGETINFO is returning data in the {result} variable. If there is no data to be returned, the ZERO flag is set FALSE. Notes: 1) {id} can be 0 for all, or a specific admin ID. 2) {type} is a number or string indicating the type or types of data to return. (see equ file for data item types) If the string is used it contains comma separated numbers. (e.g. "1,2,4") 3) {mask} is specific to the first data item in the {type} parameter. {mask} can be null to match all, or a string of characters. {mask} can contain a * to match a group of characters. {mask} can contain a ? to match a single character. {mask} can contain a leading <, >, =, >=, <=, <> if the first type is numeric. 4) {result} is always a test string. 5) Data items in result are separated by the ',' character. 6) Data groups in result are separated by the ';' character. 7) When {id} is set to 0, data group starts with admin ID. 8) File names are stored as {index name}%{data name}. ------------ -- ADMCOMMAND The ADMCOMMAND statement sends a command to the admin server. [label] ADMCOMMAND {admin},{cmd},{type},{mask}[,{value}] Where: {admin} - ADMIN data variable {cmd} - Command to execute {type} - Type of info {mask} - Mask to filter the request {value} - Optional new value Flags: ZERO - This flag is set TRUE to indicate that the command was completed successfully. Otherwise, it it is set to FALSE. Notes: 1) {cmd} is a number indicating the action to take. (see 'ADMEQU.INC' equate file) 2) The {type} and {mask} parameters are used to select the tasks to be sent the command. {type} is a number indicating the type data that the {mask} parameter is for. (see 'ADMEQU.INC' equate file) 3) {mask} is specific to the {type} parameter. {mask} can be null to match all, or a string of characters. {mask} can contain a * to match a group of characters. {mask} can contain a ? to match a single character. {mask} can contain a leading <, >, =, >=, <=, <> if the first type is numeric. 4) {value} specifies a new value if the command requires one. For example, the {value} for $ADMCMDSETLOGLEVEL command is a new log level. ------------ -- ADMSETINFO The ADMSETINFO statement sends data to a local admin main task. [label] ADMSETINFO {action},{type},{value} Where: {action} - Action of $ADMADD, $ADMDELETE, or $ADMREPLACE {type} - Type of info {value} - Value to set Flags: ZERO - This flag is set TRUE to indicate that the action was completed successfully. Otherwise, it it is set to FALSE. Notes: 1) An {action} of delete removes one entry matching the {type} and {value}. 2) An {action} of replace replaces one entry matching the {type} with the {value}. 3) The number used in the {type} parameter is a user defined number between 1000 and 2000. 4) {value} can be any text data. ---------------------------- -- PL/B EQU FILE DATA ------------ -- Admin General Ids The $CHILDTASKLIST or $ADMINTASKLIST can serve as an {id} to indicate which task list should be used to retrieve Admin database information. $CHILDTASKLIST EQU 0 $ADMINTASKLIST EQU 1 ------------ -- Admin Child Data Types These items are maintained by all child and admin tasks. The child data types can be used in an ADMGETINFO statement to return data to an Administration PL/B program. $ADMITEMADMID specifies an {id} assigned to each task upon startup. $ADMITEMADMID EQU 0 $ADMITEMUSERIP specifies the I/P address of the client for this task. $ADMITEMUSERIP EQU 1 $ADMITEMPROGRAMNAME specifies the name of the PL/B program running this task. $ADMITEMPROGRAMNAME EQU 2 $ADMITEMFILENAME specifies zero or more files the program has open. $ADMITEMFILENAME EQU 3 $ADMITEMUPTIME specifies the number of seconds that the task has been running. $ADMITEMUPTIME EQU 4 $ADMITEMLOGLEVEL specifies the tasks logging level (0-2). $ADMITEMLOGLEVEL EQU 5 $ADMITEMCLIVER specifies the basic client version. $ADMITEMCLIVER EQU 6 $ADMITEMTASKID specifies the thread id or pid. $ADMITEMTASKID EQU 7 $ADMITEMFULLCLIVER specifies the full client version. $ADMITEMFULLCLIVER EQU 8 $ADMITEMSHAREDMEM returns the 32 bit shared memory value. $ADMITEMSHAREDMEM EQU 9 $ADMITEMKEYNAME specifies the key name if a XXX_KEYFILE is used. $ADMITEMKEYNAME EQU 10 $ADMITEMLOGSTATE specifies whether logging is on (1) or off (0). $ADMITEMLOGSTATE EQU 11 $ADMITEMSENDBYTES specifies the number of bytes sent to the client from this child server task. $ADMITEMSENDBYTES EQU 12 $ADMITEMRECVBYTES specifies the number of bytes received from the client to this child server task. $ADMITEMRECVBYTES EQU 13 $ADMITEMRUNTYPE specifies the runtime type of the child task. The values are: 0 - Unknown 1 - ODBC 2 - Sun Access 3 - Windows version PL/B Runtime 4 - Unix version Plbserve 5 - Unix version PL/B Runtime 6 - WindowsCE Hand Held Runtime 7 - WindowsCE Palm Top Runtime 8 - WindowsCE Pocket PC Runtime 9 - Windows Console version PL/B Runtime 10 - Windows version Plbserve $ADMITEMRUNTYPE EQU 14 $ADMITEMIDLETIME specifies the number of minutes the child task has been idle since the last command was processed. $ADMITEMIDLETIME EQU 15 ------------ -- Admin Server Data Types These data types can be obtained only by using a $CHILDTASKLIST or $ADMINTASK {id}. $ADMITEMSRVVER specifies the version of the server. $ADMITEMSRVVER EQU 100 $ADMITEMLOGONCNT specifies the number logons since startup. $ADMITEMLOGONCNT EQU 101 $ADMITEMLOGONFAIL specifies the number logon failures since startup. $ADMITEMLOGONFAIL EQU 102 $ADMITEMSRVUPTIME specifies the number of seconds since startup. $ADMITEMSRVUPTIME EQU 103 $ADMITEMSRVTYPE specifies a server type of 1 for Application Server, 2 for File Manager, or 3 for Automation Server. $ADMITEMSRVTYPE EQU 104 $ADMITEMSRVEXENAME specifies the name of the server executable file. $ADMITEMSRVEXENAME EQU 105 $ADMITEMSRVININAME specifies the name of the server configuration file. $ADMITEMSRVININAME EQU 106 $ADMITEMSRVLOGNAME specifies the name of the server log file. $ADMITEMSRVLOGNAME EQU 107 $ADMITEMSRVCHILDCNT specifies the current number of child tasks running. $ADMITEMSRVCHILDCNT EQU 108 $ADMITEMSRVCHILDMAX specifies the maximum number of child tasks allowed. $ADMITEMSRVCHILDMAX EQU 109 -------------------------------- -- Admin PL/B Runtime Data Types These items are filtered out by default. To turn them on, use the ADMIN_DATASET or ADMIN_CLR options. $ADMITEMLOCKIO EQU 200 $ADMITEMRECORDLOCK EQU 201 $ADMITEMXPIO EQU 202 $ADMITEMW33RETRY EQU 203 -------------------------------- -- Admin Commands The following Admin Commands are for use with the ADMCOMMAND statement. These commands are sent to a child task to control basic operations. The commands are as follows: $ADMCMDSOFTTERM causes the program to act as if the next instruction to execute is a SHUTDOWN instruction or a File Manager child ask to terminate. $ADMCMDSOFTTERM EQU 1 $ADMCMDHARDTERM immediately kills or terminates the child task. This causes some resources to be lost until the server is totally shutdown. For a Windows server, this also can leave file handles opened. Any lost resources can only be recovered when a server main task is unloaded. $ADMCMDHARDTERM EQU 2 $ADMCMDLOGGINGON turns logging on for this task. $ADMCMDLOGGINGON EQU 3 $ADMCMDLOGGINGOFF turns logging off for this task. $ADMCMDLOGGINGOFF EQU 4 $ADMCMDSETLOGLEVEL allows the logging level to be set from 0 to 2. The level 0 logging allows error and basic information to be logged. Error levels 1 and 2 are available for future releases to allow additional information to be logged. $ADMCMDSETLOGLEVEL EQU 5 ;Value parameter is ;(0-2). $ADMCMDSHUTDOWNLOGON shutdown the Admin Logon Task. $ADMCMDSHUTDOWNLOGON EQU 7 -------------------------------- -- Admin Setinfo Actions These operations can be used for the ADMSETINFO {action}. These actions allow User Data in the Admin Database to to be processed. $ADMADD adds user data to the Admin database. $ADMADD EQU 1 $ADMDELETE removes user data from the Admin database. $ADMDELETE EQU 2 $ADMREPLACE replaces user data in the Admin database that has been previously added. $ADMREPLACE EQU 3 Date: 03-20-2003 Patch RELEASE 8.7A Runtime Files *============================================================================== Notes for some NEW Items: - Added new SPLITTER object. - Added new PANEL object. - Added new DOCK property. - Added new DOCKPADB, DOCKPADL, DOCKPADR, and DOCKPADT properties. - Added new MINEXTRA and MINSIZE properties. *============================================================================== Notes for WARNINGS: - The 8.7A PLBWIN and SUNFHSYS versions can not be used with any prior released versions. A U40 error will occur if the 8.7A Sunfhsys.dll version is used with an older release that causes a conflict. If the 8.7A PLBWIN is used with an older version of Sunfhsys.dll, then the following Windows OS error will occur: "Plbwin.exe - Entry Point Not Found! The procedure entry point FhSetPlbCurDir could not be located in the dynamic link library Sunfhsys.dll." *============================================================================== Notes for DOCUMENTATION: - For the PICT object note item number 4, the LZW and Packbits compression methods should be identified as separate methods. - Please remove the 'PLBWIN_MAXPROGVMEM' keyword from the PL/B reference manual. This keyword was removed in release 8.6A and replaced with command line '-mv' option. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Modified the Application Server to allow print spooling to occur at the system where the server is being executed. By default PRINT and SPLOPEN print operations are executed at the client workstation. A new keyword named 'PLBCS_APSPOOL={0|1|2}' has been added to change the default operations of the PLBSERVE server for printing. In addition, a new keyword named '*APSPOOL={0|1|2}' has been added for GETMODE/SETMODE statements to allow a program to control the default operations of the PLBSERVE server for printing. The following table shows the expected print spooling operations with and without the new keywords. Note: 1. With this change the '!' character can be included as the first character of a spool name. For PLBSERVE runtimes the '!' character always indicates that the spooled file/device exists at the client workstation and the '!' character is not part of the filename. For PLBWIN/PLB runtimes a leading '!' character in the file name is ignored and it is not part of the file name. Without New Keywords (Default actions) PRINT - Default printing is performed at the client. SPLOPEN - All spooling operations occur at the client. With 'PLBCS_APSPOOL=0' or 'SETMODE *APSPOOL=0' PRINT - Default printing is performed at the client. SPLOPEN - All spooling operations occur at the client. With 'PLBCS_APSPOOL=1' or 'SETMODE *APSPOOL=1' PRINT - Default printing is performed at the client when the printer device is set to be 'LPT(1-4):' in the screen definition file. If the screen definition file is changed to specify some other file name for a print device, then printing output is stored into the file at the server. SPLOPEN - All spooling operations for files occur at the server except if the file named is 'LPT(1-4):'. If a name 'LPT(1-4):' is specified, then the print spooling operation is performed at the client workstation. With 'PLBCS_APSPOOL=2' or 'SETMODE *APSPOOL=2' PRINT - Default printing is performed at the server. SPLOPEN - All spooling operations occur at the server. - Added a new keyword named 'PLBCS_LOGMAX=nnnnn' for the application server INI file. The 'nnnnn' value for this keyword specifies a maximum number of records that can be added to the log file. If this keyword is not specified or the 'nnnnn' value is set to zero, then an unlimited number of records will be written to the log file. However, if the 'nnnnn' value is set to a non-zero value, then the value specifies the maximum number of records that will be written to the log file. When the maximum record count is exceeded, then records are over written after the header at the beginning of the log file in a circular manner. - The format of the Application Server has been changed as follows: 1. Each record has a fixed length of 79 characters. Log records longer than 79 characters will wrap to the next log record. Records larger than 158 characters are truncated. 2. Each record has a field format as follows: YYYY-MM-DD HH:MM:SS NNNN L DATA Where: YYYY-MM-DD - Current date HH:MM:SS - Current time NNNN - Admin slot identification L - Application Server log level value DATA - Log data - The Windows Application Server has been modified to detect a program IP (Instruction Pointer) value of zero to prevent a GPF from occurring. When an IP value of zero is detected, the program thread being executed will attempt to recover a valid IP value before continuing. If a valid IP value is not available, then the program thread is terminated immediately. Information about an IP fault is logged into the Application Server log file. If the program is terminated, then a program image file is created with a name as 'CodePtr_NNNN.IMG'. The NNNN string identifies the thread id that had the fault. - Modified the PLBSERVE server runtime to prevent the program from terminating at the 256 instruction check event point when the PLBCLIENT has prematurely terminated. This change means that a program will only terminate after a PLBCLIENT process has prematurely terminated when the PLBSERVE executes a PL/B statement that requires access to the client workstation. This change is implemented as per user's request that the server program should be able to continue processing file updates after the PLBCLIENT workstation connection has terminated. It is the user's responsibility to insure that a program does not have any endless loops in a program that prevents access to a PLBCLIENT workstation. - Corrected a problem where a GPF could occur when multiple PL/B debug sessions were performing TP actions at the same time. - Corrected a problem where the OBJECTID property for a CHECKGRP and RADIOGRP object was not being set by a CREATE statement. Performing EVENTINFO or GETPROP operations to retrieve the OBJECTID was returning a zero value. - Corrected a GPF problem that could occur when a FORMLOAD operation was performed for a PLFORM depending on how the Windows OS allocated memory buffers. This problem was most likely to occur when the PLFORM included TOOLBAR or STATUSBAR objects. ------------------------------------------------------------------------------- PLBCLIENT- Added new keyword named 'PLBCS_CMDLN={prog}' that can be placed PLBCLICON into the 'PLBCLIENT.INI'. This keyword can be specified to give the default command line to be executed by PLBCLIENT.EXE when no command line parameters are given. - Corrected a problem where the client module could get a GPF error when a '.BMP' image could not be found when executing an AddBmpMasked method for an IMAGELIST object. ------------------------------------------------------------------------------- PLBSERVE - A new keyword named 'PLB_CURDIR={path}' has been added for the PLBWIN Windows version of the runtimes. Also, a new keyword named '*PLBCURDIR={svar}' has been added for the GETMODE/SETMODE statements. The runtime '-z{path}' runtime option also can be used. The need for he PLB_CURDIR directory is to address a Windows OS multiple thread issue where a change to the current working directory affects all of the threads. This problem can occur for the Application Server or the Automation Server when a PL/B application requires unique working directories for all threads. Any time that the PL/B current directory is set, then the runtime will perform the following actions when executing a program: 1. The PL/B current directory is used as the default directory for all OPEN or PREP operations when a path is not specified in the file name. 2. The PL/B current directory is used as the default directory when an BATCH/EXECUTE/ROLLOUT instruction is executed. 3. When the PL/B current directory is used/specified, the PATH CHANGE instruction will only change the PL/B current directory. If the PL/B current directory is NOT used/specified when the PATH CHANGE is executed, then only the OS working directory is set. 4. When the PL/B current directory is used/specified, the PATH CURRENT instruction will return the PL/B current directory buffer string. If the PL/B current directory buffer is not used/specified, then the PATH CURRENT returns the current OS working directory. 5. When the PL/B current directory is used/specified, the PATH CREATE instruction will use the PL/B current directory when the user specified string does not specify a pathed name. 6. When the PL/B current directory is used/specified, the PATH DELETE instruction will use the PL/B current directory when the user specified string does not specify a pathed name. - Corrected a problem where data could be displayed on the wrong line after a SCRNRESTORE or STATERESTORE operation. ------------------------------------------------------------------------------- PLBWIN - Corrected a problem where function key flags were being cleared PLBSERVE when executing under the PLBDBUG debugger and a 'STOP IF FKEY' PLB:UNIX statement was executed where a CHAIN is not performed. - Corrected a problem where a CHAIN statement was not clearing a FKEY (function key flag). - Corrected a problem where an indeterminate/unknown program error would occur if the S$RETVAL value was greater than 255 when a program performed a SHUTDOWN. - Corrected an I80 error that could occur while executing a REPOSIT instruction. The following code would cause the problem with a file size of 256 bytes. This error actually can occur when the true file size is less than a position value used for the first REPOSIT file position. $0 INTEGER 0 $1135h INTEGER 4,"0x1135" FILE FILE . OPEN FILE.... . REPOSIT FILE,$1135h REPOSIT FILE,$0 REPOSIT FILE,$1135h ;I80 error occurs! - Corrected a problem where an invalid generic string property for a Gui object was being reported as an O105 error in a GETPROP operation. This error has been changed to be an O123 error. - Corrected a problem where a F04 error would occur when a program was compiled using the 'zc=3' compiler option and a CALL USING list operand was a whole reference array and the ROUTINE list operand was an array of pointers. ------------------------------------------------------------------------------- PLBWIN - Modified the BATCH, EXECUTE, ROLLOUT, and SHUTDOWN statements to automatically attempt to use the current COMSPEC keyword command after a user specified command line fails to execute. The format of the second execution attempt in this case would be as follows: EXECUTE "User Command" ;If execution fails, then automatic ;retry as '%COMSPEC% /c User Command' - SPLITTER Object (NEW) A new GUI object named SPLITTER has been added for Windows runtimes. The SPLITTER object enables the user, at runtime, to resize an object that is docked to the edge of the SPLITTER object. When the user passes the mouse pointer over the SPLITTER object, the cursor changes to indicate that the object can be resized. The SPLITTER object enables the user to resize the docked object that has the same docking type and is immediately before it in z-order. To enable the user to resize a docked object, dock the object you want the user to be able to resize, and then dock a SPLITTER to the same value. When the mouse pointer is over a SPLITTER object and the mouse pointer is set to the resize indicator, then a user can click and hold the left mouse button. This causes the splitter bar to be activated where it can be moved to a new desired location. Properties BDRSTYLE BGCOLOR DOCK ENABLED HEIGHT LEFT MINEXTRA MINSIZE OBJECTID TOOLTIP TOP VISIBLE WIDTH ZORDER Events MOVE - PANEL Object (NEW) A new GUI object named PANEL has been added for Windows runtimes. The PANEL object is an object that can contain other objects, just as a WINDOW contains other objects. When an object is created in a PANEL object, it belongs to that PANEL object and will be enabled, disabled, hidden, made visible, or destroyed when one of these actions take place on the PANEL object. Properties ANCHOR AUTOSCROLL BDRSTYLE BGCOLOR DOCK DOCKPADL DOCKPADT DOCKPADR DOCKPADB ENABLED HEIGHT LEFT MINSCROLLH MINSCROLLV OBJECTID SCROLLBAR TOOLTIP TOP VISIBLE WIDTH WINOFFSETH WINOFFSETV ZORDER Events MOUSEDOWN MOUSEUP MOUSEMOVE PAINT RESIZE - ANCHOR Property (NEW) Format: ANCHOR=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property allows an object to be anchored to one or more edges of its parent object. The parent object can be either a Window or Panel object. Anchoring an object to its parent ensures that the anchored edges remain in the same position relative to the edges of the parent container when it is resized. By default objects are anchored to the top/left. The possible anchor values are as follows: $ANCHORBL - Bottom, Left $ANCHORBLR - Bottom, Left/Right $ANCHORBR - Bottom, Right $ANCHORTBL - Top/Bottom, Left $ANCHORTBLR - Top/Bottom, Left/Right $ANCHORTBR - Top/Bottom, Right $ANCHORTL - Top, Left $ANCHORTLR - Top, Left/Right $ANCHORTR - Top, Right Objects Supported: BUTTON CHECKBOX CHECKGRP COMBOBOX CONTAINER CONTROL DATALIST EDITTEXT GROUPBOX HSCROLLBAR ICON LISTVIEW MREGION MOVIE PANEL PICT PROGRESS RADIOGRP RADIO SHAPE SLIDER STATTEXT STATUSBAR TABCONTROL TOOLBAR TREEVIEW VSCROLLBAR dnumnvar values: $NONE EQU 0 $ANCHORBL EQU 1 $ANCHORBLR EQU 2 $ANCHORBR EQU 3 $ANCHORTBL EQU 4 $ANCHORTBLR EQU 5 $ANCHORTBR EQU 6 $ANCHORTL EQU 7 $ANCHORTLR EQU 8 $ANCHORTR EQU 9 - The DOCK property has been modified to support a $DOCKFULL mode. In addition, the DOCK property has been added to more objects. $DOCKFULL - The object takes up the rest of the docking space. Objects Supported: BUTTON CHECKBOX COMBOBOX CONTROL DATALIST EDITTEXT HSCROLLBAR LISTVIEW PANEL RADIO SLIDER SPLITTER STATUSBAR TABCONTROL TOOLBAR TREEVIEW VSCROLLBAR dnumnvar values: $DOCKBOTTOM EQU 1 ;Same as $WINDOCKBOTTOM $DOCKLEFT EQU 2 ;Same as $WINDOCKLEFT $DOCKNONE EQU 3 ;Same as $WINDOCKNONE $DOCKRIGHT EQU 4 ;Same as $WINDOCKRIGHT $DOCKTOP EQU 5 ;Same as $WINDOCKFULL $DOCKFULL EQU 6 ;New $WINDOCKBOTTOM EQU 1 $WINDOCKLEFT EQU 2 $WINDOCKNONE EQU 3 $WINDOCKRIGHT EQU 4 $WINDOCKTOP EQU 5 - DOCKPADB Property (NEW) Format: DOCKPADB=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: The DOCKPADB property identifies the padding between the bottom of a window and the first docked object. Objects Supported: PANEL WINDOW dnumnvar values: The value is a pixel value. - DOCKPADL Property (NEW) Format: DOCKPADL=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: The DOCKPADL property identifies the padding between the left side of a window and the first docked object. Objects Supported: PANEL WINDOW dnumnvar values: The value is a pixel value. - DOCKPADR Property (NEW) Format: DOCKPADR=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: The DOCKPADR property identifies the padding between the right side of a window and the first docked object. Objects Supported: PANEL WINDOW dnumnvar values: The value is a pixel value. - DOCKPADT Property (NEW) Format: DOCKPADT=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: The DOCKPADT property identifies the padding between the top of a window and the first docked object. Objects Supported: PANEL WINDOW dnumnvar values: The value is a pixel value. - MINEXTRA Property (NEW) Format: MINEXTRA=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: The MINEXTRA property specifies the minimum distance that must remain between the SPLITTER object and the edge of the opposite side of the closest object docked to the opposite side. Objects Supported: SPLITTER dnumnvar values: The value is a pixel value. - MINSIZE Property (NEW) Format: MINSIZE=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: The MINSIZE property specifies the minimum distance that must remain between the SPLITTER object and the edge of the object that the SPLITTER object is docked to. Objects Supported: SPLITTER dnumnvar values: The value is a pixel value. - Added the AUTOREDRAW property for the TREEVIEW object. - Modified the SortColumn method for a LISTVIEW object to preserve the checkbox states when the CHECKBOX property is set true. - Modified the LISTVIEW to update the colors for a line item when the text in a subitem was modified. - It was reported that a program executed on a Windows 98/NT system would go into an infinite loop when color control columns were added. This problem could not be reproduced on several Windows 98 systems available to the Sunbelt staff. However, in response to the reported issue the LISTVIEW object logic was modified to try and eliminate any possible cases of infinite loops when processing color control columns. - Corrected a PostScript printer color printing problem for advanced printing. The problem occurred because the data returned from the PostScript printer driver was causing the runtime to identify the printer as a non-colored printer. - Corrected a problem where the BDRSTYLE property was not being processed in a CREATE statement for a TOOLBAR. - Corrected a F05 error that would occur when a CALL using operand was a GUI MAINWINDOW object and the ROUTINE operand was a GUI WINDOW object pointer. - Corrected a F05 error that would occur when a CALL using operand was a GUI object (any type) and the ROUTINE operand was a VAR typeless variable. - Corrected a problem where the 8.7 PLBWIN runtime could not be loaded and executed on a Windows 95 system that did not provide the "Windows Socket 2" support. The 8.7A PLBWIN runtime has been modified to detect when "Windows Socket 2" support is not available and then load the runtime without ADMIN services. The ADMIN services are used to monitor Automation Server threads. One of the Sunbelt users has reported that there is a Microsoft upgrade file named 'WS2SETUP.EXE' that upgrades a Windows 95 system to provide the "Windows Socket 2" capability. This could allow a Windows 95 system to be upgraded so that the 8.7 PLBWIN runtime will load and provide full ADMIN services needed to support Automation Server. - Corrected a problem where a WINDOW object was being created with a larger size than expected when a CAPTION property was set off. ------------------------------------------------------------------------------- PLB:UNIX - Modified the GETFILE NAMETYPE keyword to return a value of 3 when a UNIX runtime is being used. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to give a syntax error when a generic property string format is used in a CREATE/GETPROP/SETPROP statement for any GUI objects except for AUTOMATION, CONTAINER, CONTROL, and VARIANT. This helps prevent situations where a generic property syntax problem could only be detected when the program was executed. Example: SETPROP BUTTON,*ENABLED=0 ;Gives compiler error! SETPROP BUTTON,ENABLED=0 ;Valid syntax format! - Modified the nested INCLUDE levels supported from 4 to 8 levels. - Modified the CREATE statement syntax to accept a PANEL object as the parent object. This syntax change applies to all objects that can be created with a parent window. Format: [label] CREATE [{window}|{panel};]{object}.... - Added support for new SPLITTER object. - Added support for new PANEL object. - Added support for new DOCK property. - Added support for new DOCKPADB, DOCKPADL, DOCKPADR, and DOCKPADT properties. - Added support for new MINEXTRA and MINSIZE properties. - Corrected a problem where the compiler was prematurely terminating with an I10 error when a user was using the 'PLB_OPENABS=ON' keyword. - Corrected a DIM array syntax error that would occur when using the 'zc#3' option. The following statement was causing an erroneous compilation error when using this option. Label DIM 1(2): ("a"): ("b") - Corrected a problem where an underscore character ('_') was causing a compilation error when it existed in a MACRO opcode name. - Corrected a F02 compiler error that would prematurely terminate the compiler. This could occur when an invalid variable was encountered when a LIST definition was active. ------------------------------------------------------------------------------- PLBDSIGN - Added a new Tool\Options checkbox 'Save File in Ansi'. When this option is unchecked, then PLF form program code is translated from ANSI to OEM data before it is written into the PLF form. If this option is checked, then PLF form program code is NOT translated and ANSI international data characters are written into the PLF form. - Corrected a problem where the &OBJNAME macro was not expanded properly into an object name. This was causing a compilation error to occur because an object name was truncated. - Corrected a problem where the current working directory for the designer was being changed when a form resource was added to a PLF form. - Corrected a problem where a WINDOW object was being created with a larger size than expected when a CAPTION property was set off. ------------------------------------------------------------------------------- UTILITY - Corrected a problem where the 8.7 SUNAAMDX.EXE utility did not execute properly when redirected key input was used as follows: sunaamdx file.txt,,l20;: parameter, in this case, identifies a starting record number and a record count to be retrieved. The string in this case is specified as follows: nnnn,mmmm Where: nnnn - identifies the starting record. mmmm - identifies the number of records to retrieve. Note: 1. Log records are packed into the result operand as data groups separated by a ';' character that represents an EOR; $ADMITEMSRVLOGRECS EQU 113 - The ADMSETINFO statement has been modified to support a new named $ADMLOG. The value for the $ADMLOG is a value of 4. The $ADMLOG action will cause the string to be placed into the server's log file. This action command can be used to store application log records directly into the log file of a server. $ADMLOG EQU 4 - Corrected a problem where an ADMGETINFO statement that retrieved more than 1024 bytes could cause indeterminate operations. This included the possibility of hanging a server application. ------------------------------------------------------------------------------- SUNIDE - Fixed a bug where compiler -E= option wasn't picking up the leading dot "." on the extension. - Fixed a bug where if a user defined extension was specified, filenames were built without the extension delimiter. - Added option to not show the IDE logo. - Fixed a bug where you could get multiple editor property windows. - Fixed a bug where new dependencies were not being processed. - Fixed a bug where an external editor would launch after stripping the path from a file name. This could cause the external editor to not find the file. - Fixed a problem where we were not looking for equated labels in INI compiler options. - Fixed a bug in Save Project As where a corrupt project file could be saved. - Added option to delete the make file when the IDE is finished with it. - Fixed a bug where some items on the project menu could be enabled with no project file open. - Added option to refresh dependencies to the TreeView right click and on the project menu. - Corrected a problem where if an error occurs while defining a new project, the new project dialog would close so a user would have to start over. - All IDE working scratch file names are now generated to be unique based on a time stamp. - The IDE now checks the version of the editor loadmod and gives a warning if a version other than expected is found. - Added override for PLB_SKIPFOCUS keyword because the IDE needs this events to restore state when re-activating. This is to try to address the issue where after the compiler executes, the window with focus may be indeterminate and tabs could be arbitrarily be added to a source. - Fixed a bug where if a source file was specified on the command line, the file could get truncated. - Fixed a problem where the working directory may not be properly stripped from a file name during makefile generation. - Modified the IDE to use splitters and panels and removed docking code and nearly 200 lines of child window updating code. - Fixed a bug where indeterminate results could occur if a nested include was the updated file that caused a compile. - Fixed a bug where an include could be mistaken for program's main source after a compile. - Added path squashing so the file name should always be visible on the status dialog during project opens and compiles - Made the Browse Labels tab sort the labels case insensitive - Fixed save all to detect if a save is canceled or fails. - Fixed build operation so if a save canceled or the editor fails to save at least one file, the build aborts. - Fixed a bug in the line parser where a comment after the second parameter in an IFEQ/XIF was being treated as part of the label to compare which would result in a bogus false if. This resulted in some conditional includes not being picked up by the IDE. - Fixed a bug in the line parser that would pick up a variable called "INC" as an include directive when it is the first variable after a line continuation. - Added logic to clear events when an MDIChild window gets focus to try to prevent bogus tabs from getting entered into the editor. - The dependency resolver was optimized to eliminate code and run faster. It also eliminates an infinite loop problem where a program could be copied to a project file several times. - Fixed a bug in printing where data would run off the end of the page (approximately 1" worth) to the right and bottom of the printable area. - The editor now saves and restores user defined hot keys for the editor. - The editor now saves and restores keyboard macros. - Corrected bad config file detection to prevent loading a corrupt config file. - Modified the print dialog to try to reliably retrieve a list of printers and addressed an issue where the ide may not be able to get a list of printers using the GETINFO PRINTERS. If no printer is selected, the user is presented with a windows printer selection dialog. - Fixed a problem where the TABS to spaces property in the editor was not working. - Modified the open and save file logic to honor the PLB_OEM keyword. ------------------------------------------------------------------------------- WATCH - Rewrote the data acquisition logic for improved performance. - Eliminated work files used during data acquisition. - Shortened descriptive fields in the treeview. - Moved client properties to a new dialog available with a right-click action. - Anchored screen items to allow resizing of the main form. - Added the ability to define aliases for IP addresses. - Divided index and data file names into separate columns. - Added an informational message window. - Added the ability to abort tasks (hard terminate). - Added client logging control. - Added right click on Tree View for expand or collapse below and expand or collapse all. ------------------------------------------------------------------------------- SUNSCAN - Added ROUTINE entry point so it can be used as LOADMOD. - Corrected problem where if last line did not have an EOR, then the prior line would not display properly. - Corrected problem where file position was reported for end of record instead of beginning of record. - Increased file position variables from 9 to 10 digits. - Corrected bug where function keys F1-F9 did not work if file was currently positioned at End of File. Date: 06-11-2003 Subject: Patch RELEASE 8.7B Runtime Files Included you will find the patch release of: PLBSERVE 8.7B 11 Jun 2003 8.7.0120 PLBCLIENT 8.7B 11 Jun 2003 8.7.0120 PLBCLICON 8.7B 11 Jun 2003 8.7.0120 PLBWIN 8.7B 11 Jun 2003 8.7.0120 PLBDSIGN 8.7B 11 Jun 2003 8.7.0120 SETGUID 8.7B 11 Jun 2003 8.7.0120 SUNMOD 8.7B 11 Jun 2003 8.7.0120 MAKEDEF 8.7B 11 Jun 2003 8.7.0120 SUNFYSYS.DLL 8.7B 11 Jun 2003 8.7.0120 SUNFHDLL.DLL 8.7B 11 Jun 2003 8.7.0120 SUNFHDLL.LIB 8.7B 11 Jun 2003 SUNSORT 8.7B 11 Jun 2003 SUNSRTNT 8.7B 11 Jun 2003 8.7.0120 ODSBAC32.DLL 8.7B 11 Jun 2003 PLBCMP 8.7B 11 Jun 2003 PLBDBUG 8.7B 11 Jun 2003 ADMEQU.INC 8.7B 28 Apr 2003 PLBEQU.INC 8.7B 24 Mar 2003 PLBMETH.INC 8.7B 27 May 2003 TXTMATCH.PLC 8.7B 11 Jun 2003 SUNIDE.PLC 8.7B 11 Jun 2003 EDITOR.PLC 8.7B 11 Jun 2003 MENUGEN.PLC 8.7B 11 Jun 2003 *============================================================================== Notes for some NEW Items: - Added new EXPLODE statement. - Added new IMPLODE statement. - Added Cache support for the Application Server. (Plbserve/Plbclient) - Added CACHELIST/CACHELISTEND statements for PL/B language. - Added PLBCLIUNX Unix Client for Application Server. - Added new Admin data types for ADMGETINFO statement. - Added EXPORT CODE submenu item to File menu for PLBDSIGN. - Added PLB_CLOCKUSEIP keyword and added CLOCKUSEIP keyword to GETMODE and SETMODE statements. - Added *ZFON and *ZFOFF controls for WRITE, DISPLAY, KEYIN, PRINT DBSEND, and PRTPAGE instructions. - Added PLBCS_NOCLIENT={on|off} for PLBSERVE server. - Added GETFNAME support for PLBCLIENT. - Added ROWSVISIBLE property for COMBOBOX. - Added AllowEmptyTab method for DATALIST. - Added *TASKID keyword for GETMODE. *============================================================================== Notes for WARNINGS: - If a mismatch version for an 8.7B PLBWIN and SUNDBSYS.DLL is detected, then a U40 error occurs. *============================================================================== Notes for DOCUMENTATION: - A new F09 error has been added to the PL/B runtimes. The F09 indicates that a list variable is invalid for an EXPLODE or IMPLODE statement. This error can occur when the source variable in an EXPLODE operation is the same as a destination list variable that is being processed. Also, this error occurs in an EXPLODE operation if a GUI Object variable is processed in the destination list and the delimiter parameter is NULL. In an IMPLODE statement, an F09 error occurs if an invalid GUI object is detected in the source list. - A new F10 error has been added to the PL/B runtimes. The F10 indicates that the delimiter variable contains a binary zero which is not allowed. This error can occur for an EXPLODE or IMPLODE statement. - The following must be included in the PL/B language reference under the CACHELIST/CACHELISTEND instruction descriptions. The "RSA Data Security, Inc. MD5 Message-Digest Algorithm" is used for the CACHELIST/CACHELISTEND group identification when caching is being used. - The CLOCK statement affects the LESS flag if the PLB_CLOCKUSEIP keyword or a SETMODE *CLOCKUSEIP string is set to an ip address. Otherwise, the LESS is not affected. See description below for more details. - Add the VISIBLE property to the TOOLBUTTON object. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - In release 8.7A, the PLBSERVE server was modified to prevent a program from terminating at the 256 instruction check event point when the PLBCLIENT has prematurely terminated. This change for 8.7A has caused problems resulting in hung threads at the application server because PL/B programs have logic resulting in endless loops that do not execute statements that require communication with a PLBCLIENT. Therefore, for the 8.7B patch release we are changing the default operation of the PLBSERVE server to detect a socket error at the 256 instruction check event point when the PLBCLIENT has prematurely terminated. In this case, the program at the server terminates immediately. This eliminates eliminate the hung thread situation. In addition, for those users who wish to execute in a manner that DOES NOT terminate a program at the 256-instruction check event point, a new keyword named 'PLBCS_NOCLIENT={ON|OFF}' can be specified in the PLBSERVE.INI file. Setting this keyword ON causes PLBSERVE to execute in a manner consistent with the 8.7A changes. - Modified the PLBSERVE server runtime to prevent the program from terminating at the 256 instruction check event point when the PLBCLIENT has prematurely terminated. This change means that a program only terminates after a PLBCLIENT process has prematurely terminated when the PLBSERVE executes a PL/B statement that requires access to the client workstation. This change is implemented as per user's request that the server program should be able to continue processing file updates after the PLBCLIENT workstation connection has terminated. It is the user's responsibility to insure that a program does not have - Modified the Application Server for the '-d3' option to create log files with the thread/process identification number included in the log file name. The log file names are 'plbwin_nnnn.log', 'plbwin1_nnnn.log', and 'plbwin2_nnnn.log' where 'nnnn' is the thread/process identification. - A new keyword named 'PLBCS_RECVTIMEOUT={seconds}' has been added to specify a maximum time allowed where no messages are received from the server while in a receive mode. If this timeout period expires, then a 'timeout expired' message is logged into the server log file and the socket connection is closed. If this keyword is not specified, then a default value of 130 seconds is used. If the {seconds} value is set to zero, then the receive timeout is disabled and the application program thread continues to wait for a received message until the socket connection is lost. - Corrected a UNIX release problem where the Admin service process could cause a SEGV error when the current child task count was being accessed. - Corrected a problem where an object method was causing a return value action to be executed when no return value was required. This problem could indeterminately prevent method buffering from occurring. - Corrected a UNIX release problem where a GETPROP operation might not retrieve valid data for a property. - Corrected a problem that would cause a GPF or SEGV error. This problem would occur if a SETPROP for a VISIBLE=1 property was executed for a COLLECTION object that contained a FORM object of a MODAL type and a program executed a CHAIN or STOP operation while the MODAL window was active. Also, note that this error would occur if the same opertions were executed using a PLFORM label reference of a MODAL form because the PLFORM label reference is actually a COLLECTION reference. This problem is now corrected. ------------------------------------------------------------------------------- PLBCLIENT- Added a new option named '-ver' that causes PLBCLICON to display a version, serial number and license-to information. - Rewrote TIMER object processing to avoid application conflict with Windows OS TCP/IP operations. This change was done to avoid potential lost messages that could cause a lost client to server connection. - A new keyword named 'PLBCS_RECVTIMEOUT={seconds}' has been added to specify a maximum time allowed where no messages are received from the server while in a receive mode. If this timeout period expires, then a 'communications problem' dialog is presented to the client user to allow the client task to continue or be aborted. If this keyword is not specified, then a default time of 300 seconds is used. If the {seconds} value is set to zero, then a receive timeout is disabled and the client task waits for an indefinite time for a message. - Corrected a problem where the processing of an ICON property in a CREATE statement that would cause a PLBSERVE on a Unix Forward Byte Ordered system to give a SEGV error. Please note that the program at the server was getting this SEGV error. ------------------------------------------------------------------------------- PLBCLIUNX- Added new character based Unix client utility to access a PLBSERVE Application Server. The PLBCLIUNX only supports character based applications that use DISPLAY/KEYIN operations. ------------------------------------------------------------------------------- PLBSERVE - Client caching support has been added for the Application Server. PLBCLIENT CACHE Overview This support allows client side caching of PL/B PLF forms, icons, pictures, sounds, and copyfile files. All icons, pictures, sounds, and copyfile files are cached both in memory in a 100 element LRU (Least Recently Used) list and on disk. Files can be deleted from the cache manually with no ill effect. Resources used during a PLF form load of a cached form are also cached. Languages Changes The filename specification for icons, pictures, sounds and the source file of a COPYFILE statement now allow a leading '?' or '*' character to be specified. (just as a '!' character is allowed) The '?' character is used to indicate that the file should be either obtained from the cache or from the server and placed in the cache. The '*' character is used to indicate that the file should be either obtained from the in-memory cache or from the server and placed only in the in-memory cache. New keywords have been added to the PLBSERVE configuration parameters that can be used to modify the caching behavior. These keywords are named PLBCS_CACHEICONS, PLBCS_CACHEPICTS, and PLBCS_CACHESNDS. The 8.7B designer has been changed to mark each PLF form with a GUID to identify the PLF form for caching. This allows the same PLF form, used in multiple programs, to be cached only once In addition, a new (ServerCanCache) property has been added to a PLF form to allow the caching of a PLF form to be turned off. This property is a designer only property. Each time a PLF form is written back to disk, the GUID is changed. If a GUID is not stored into a PLF form using the 8.7B designer, then a PLF form is cached as identified by a PLC compiled time stamp. This allows older programs compiled without GUID identifications to cache a PLF for each PLC program that includes the PLF form. This causes more cached items to be used at the client workstation. Each time a program is compiled and used, then a new PLF cache item is created. Old PLF cached items are removed from the client cache as each cached item {age} exceeds the PLBCS_CACHEAGE time period without being used. NOTE: 1. ANY FORM TO BE CACHED WITH THE OPTIMAL OR MOST EFFICIENT STORAGE/USAGE MUST BE LOADED AND SAVED BY THE 8.7B DESIGNER AND THEN COMPILED INTO A PL/B PROGRAM. 2. AN ALTERNATIVE TO ITEM (1.) IS TO USE THE 'SETGUID.EXE' UTILITY TO MODIFY A PLF FORM AND THEN COMPILE IT INTO A PL/B PROGRAM. 3. OLDER PROGRAMS THAT DO NOT HAVE 8.7B GUID IDENTICATION CACHE EACH PLF FORM INSTANCE BASED ON A COMPILE PLC TIME STAMP. THIS IS A NON-OPTIMAL CACHE. PROGRAMS OLDER THAN 8.4A CAN NOT BE CACHED UNLESS THEY ARE RECOMPILED BECAUSE THEY DO NOT HAVE AN ACCEPTABLE PLC TIME STAMP. Plbclient Changes When the Plbclient comes up for the first time during a day, the cache is aged and any files that have expired are purged. The default aging time is 7 days. A new keyword named PLBCS_CACHEAGE can be used to change the default cache aging time. A new Plbclient command line option named '-clear' has been added. This option causes all of the current cached items to be deleted. The following configuration parameters have been added: PLBCS_CACHE={ON/OFF} This parameter indicates if caching should be used or not. The current default is ON. PLBCS_CACHEDIR={Directory} This parameter is used to indicate the directory to store cached items in. The default is the PLBCSTEMP directory located in the same directory as the executing Plbclient command. PLBCS_CACHEAGE={age} The {age} parameter specifies the number of days a cached item is retained if not used. The default is 7 days. PLBCS_IMCOUNT={count} This parameter specifies the maximum number of in-memory cached items in a LRU list. The default is 100 items. PLBCS_IMSIZE={kb} The {kb} parameter specifies the maximum memory size in Kilobytes of the in-memory cache. The default is 0 for unlimited size. Plbserve Configuration Parameters PLBCS_CACHEICONS={NONE/MEM/DISK} This parameter specifies the default caching for any icon files obtained from this server. NONE - no caching (default) MEM - cache in-memory only DISK - cache in-memory and on disk. PLBCS_CACHEPICTS={NONE/MEM/DISK} This parameter specifies the default caching for any picture file obtained from this server. NONE - no caching (default) MEM - cache in-memory only DISK - cache in-memory and on disk PLBCS_CACHESNDS={NONE/MEM/DISK} This parameter specifies the default caching for any sound file obtained from this server. NONE - no caching (default) MEM - cache in-memory only DISK - cache in-memory and on disk - Added new PL/B language statements named CACHELIST and CACHELISTEND. These statements are new program control instructions that identify the beginning and ending points for a group of CREATE statements. The group of CREATE statements is assigned a group id and is then stored into the PLBCLIENT item cache when used. When an identical CACHELIST group is used in any program, then it is retrieved from the PLBCLIENT cache and used. This provides improved performance for programs that implement individual CREATE operations and are executed using the Application Server PLBSERVE runtime. Note: 1. The CACHELIST and CACHELISTEND instructions are executed as NOP instructions for all runtimes except for the PLBSERVE Application Server runtimes. 2. The current implementation for a CACHELIST/CACHELISTEND instruction group only allows CREATE statements. The only other instructions allowed between a CACHELIST and CACHELISTEND are Comments, Conditional Compiler directives and the INCLUDE directive. 3. All GUI Objects supported for a CREATE operation can be included in a CACHELIST/CACHELISTEND except for AUTOMATION, DIALOG, VARIANT, MENU, SUBMENU, and FLOATMENU. 4. The following rules apply when CREATE operations are included in a CACHELIST/CACHELISTEND grouping: a. If a WINDOW object is to be included in the CREATE CACHELIST group, then it can exist as the 1st CREATE operation. In this case, then ALL other CREATE operations CACHELIST group MUST reference this WINDOW object using the 'CREATE win;gui...' syntax formats. b. If a WINDOW object in not specified in the CREATE CACHELIST group, then all of the CREATE statements MUST either reference the same WINDOW object or not reference any WINDOW object. The requirement is that all CREATE operations must be executed for the same window whether specified or not. Example: WIN WINDOW ET EDITTEXT ET1 EDITTEXT . CACHELIST CREATE WIN=1:20:5:50 CREATE WIN;ET=1:2:5:10 CREATE WIN;ET1=6:7:5:10 CACHELISTEND . CACHELIST CREATE ET=1:2:5:10 CREATE ET1=6:7:5:10 CACHELISTEND . CACHELIST CREATE WIN;ET=1:2:5:10 CREATE WIN;ET1=6:7:5:10 ;.ERR.....CREATE WIN=1:20:5:50 CACHELISTEND . c. If a WINDOW object array is being used, then all variably indexed references can only reference the same WINDOW object array. In addition, it is NOT permitted to mix variably indexed WINDOW object array references and statically indexed WINDOW object array references in the same CREATE CACHELIST group. Example: WINARR WINDOW (3) ET EDITTEXT ET1 EDITTEXT NDX2 FORM "2" . CREATE WINARR(2)=1:20:5:50 . CACHELIST CREATE WINARR(NDX2);ET=1:2:5:10 CREATE WINARR(NDX2);ET1=6:7:5:10 CACHELISTEND . CACHELIST CREATE WINARR(2);ET=1:2:5:10 CREATE WINARR(2);ET1=6:7:5:10 CACHELISTEND . CACHELIST CREATE WINARR(NDX2);ET=1:2:5:10 ;.ERR.....CREATE WINARR(2);ET1=6:7:5:10 CACHELISTEND 5. Nested CACHELIST/CACHELISTEND operations are not allowed. 6. The CACHELIST/CACHELISTEND group identification is determined using the "RSA Data Security, Inc. MD5 Message-Digest Algorithm". - Modified the PLBCLIENT/PLBSERVE to support new Admin Services ADMGETINFO data types. ( See ADMIN section ) - Modified the PLBCLIENT/PLBSERVE to support GETFNAME execution at the PLBCLIENT workstation. The GETFNAME input and output can ONLY reflect the workstation file system information. - Modified the PLBCLIENT/PLBSERVE buffering actions to improve the execution speed when executing INSERTITEM, SETITEM, and SETPROP using a COLLECTION object. - Corrected a problem where a WINAPI executed at the PLBCLIENT would cause a GPF at the client when an API parameter used a DIM with a size of 32KB. ------------------------------------------------------------------------------- PLBWIN - Modified the PREP and OPEN for a FILELIST to give an I23 subcode 41 PLBSERVE error if the Primary file of the FILELIST is an IFILE and it is PLB (UNIX) declared to use the 'Pn=x' option. This change is required to insure that data file records can be accessed by key for an IFILE Primary file. - Added a new instruction named EXPLODE that allows a source variable string to be disassembled into one or more variables based on a specified delimiter character(s). Format: [label] EXPLODE {source}{sep}{delm}{sep}{dest} Where: [label] is an optional Program Execution Label. {source} is a previously defined Character String Variable or FORM variable that is disassembled into the {dest} variables. {sep} is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. {delm} is a Character String Variable, Dim Literal, decimal, octal, or hex value. For a Character String Variable or a Dim Literal the logical string specifies the delimiter characters that separate individual fields in the {source} variable. For a decimal, octal, or hex value, the numeric value identifies the delimiter character that separates individual fields in the {source} variable. {sep} is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. {dest} is a previously defined Character String Variable, Numeric Variable, a list of string and/or numeric variables, or a VARLIST of string and/or numeric variables that receives the contents of the {source} operand. The {dest} variable can also be GUI Object ( EDITTEXT, STATTEXT, RADIO, CHECKBOX, or BUTTON ). Flags Affected: EOS, OVER, ZERO Note the following: 1. If the {delm} delimiter variable is a NULL string, then the EXPLODE instruction executes exactly the same as an UNPACK instruction. This includes disassembly of the {source} and the flag states. 2. When the {delm} variable is not NULL, then the characters specified by the logical string are used to identify delimiter characters that separate fields found in the {source} variable. The maximum number of delimiter characters supported in the {delm} variable are 256. 3. If the {delm} variable is a decimal, octal, or hex value, then the value must be between 1 to 255. A compile error occurs if the value is not in this range. 4. The EOS and OVER flags are set the same as an UNPACK statement. The ZERO flag is not affected if the {delm} variable is NULL. However, if the {delm} variable is not NULL, then the ZERO flag is affected by the EXPLODE statement and it indicates whether all of the fields in the {source} variable were processed and transferred to the {dest} variables. The ZERO flag is set TRUE if all of the {source} variable fields were processed. The ZERO flag is set FALSE when more {source} variable fields exist to be processed. 5. The EXPLODE variable does affect the {source} variable FP setting when the ZERO flag is set to a FALSE state. When more fields exist in the {source} variable as indicated by the ZERO flag being set to FALSE, then the FP for the {source} variable is set to the beginning of the next field to be processed. If all of the fields in the {source} variable are processed and the ZERO flag is set TRUE, then the {source} variable FP is set to be the same as when the EXPLODE instruction was started. Notice that no changes are made to the {source} variable if it is a Numeric Variable. 6. The processing implemented for the EXPLODE statement does not conform to a MOVE operation. 7. An F09 error occurs if a {dest} variable being processed is the same as the {source} variable. The {source} can not be specified in the {dest} EXPLODE variable list. Also, an F09 error occurs if a {dest} variable is a GUI Object variable and the {delm} parameter is NULL. 8. If a {dest} variable is a valid GUI Object, then the corresponding {source} field string is set into the GUI Object in the same manner as a SETITEM operation with a zero valued {item} parameter. If the {source} field is NULL, then the GUI Object is cleared. This operation is only allowed for the following GUI objects: BUTTON, CHECKBOX, EDITTEXT, RADIO, and STATTEXT. 9. An F10 error occurs if the {delm} delimiter string contains a binary zero. A binary zero is not allowed as a delimiter character. Example: A INIT "ABC;DEF;RST" B INIT "123,456,789" FX FORM "12345.02" C INIT "X",0x09,"Y",0x09,"Z" . ARR DIM 20(5) X1 DIM 10 X2 DIM 10 X3 DIM 10 F1 FORM 5 F2 FORM 5 F3 FORM 5 . V1 VARLIST X1,X2,X3 V2 VARLIST F1,F2,F3 . ET EDITTEXT ST STATTEXT . EXPLODE A,";",ARR EXPLODE A,";",X1,X2,X3 EXPLODE A,";",V1 EXPLODE B,",",F1,F2,F3 EXPLODE B,",",V2 EXPLODE FX,".",F1,F2 EXPLODE C,0x09,X1,X2,X3 . . ET and ST must be CREATEd objects. . EXPLODE A,";",ET,ST - Added a new instruction named IMPLODE that appends data to a single destination variable from variables found in a list of PL/B data variables that can include GUI objects. A specified delimiter character is used to separate the data from each list variable. Format: [label] IMPLODE {dest}{sep}{delm}{sep}{source} Where: [label] is an optional Program Execution Label. {dest} is a Character String Variable to which {source} variable data is appended. {sep} is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. {delm} is a Character String Variable, Dim Literal, decimal, octal, or hex value. For a Character String Variable or a Dim Literal the character identified by the FP value specifies the delimiter character to be used. If a NULL DIM variable is specified, then no delimiter is used. A delimiter character of binary zero is not allowed. {sep} is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. {source} is list of previously defined Character String variables, Numeric Variables, a VARLIST of string and/or numeric variables, or GUI objects that can include BUTTON, CHECKBOX, EDITTEXT, RADIO, and STATTEXT. Flags Affected: EOS Note the following: 1. If the {dest} variable is too small to receive all of {source} list data and delimiter characters, then the EOS flag is set TRUE. 2. If the {delm} delimiter variable is a NULL string, then the IMPLODE instruction does not store any delimiter characters in the {dest} string. 3. If the {delm} variable is a decimal, octal, or hex value, then the value must be between 1 to 255. A compile error occurs if the value is not in this range. 4. An F10 error occurs if the {delm} delimiter character is a binary zero. A binary zero is not allowed as a delimiter character. 5. The IMPLODE instruction stores back to back delimiter characters in the {dest} variable when the corresponding {source} list variable does not have any data. 6. If a {source} list variable is a GUI object. Then the GUI object must have been previously created. Otherwise, an O105 error occurs. 7. The IMPLODE instruction retrieves data from the GUI objects like a GETITEM instruction is used. The data is retrieved as follows: EDITTEXT - The data is retrieved the same as when STATTEXT - a GETITEM has a Character String destination and the {item} number is zero. BUTTON - The data is retrieved the same as when CHECKBOX a GETITEM has a Numeric variable as the RADIO destination and the {item} number is zero. The values returned are the same as documented for the GETITEM statement. 8. It is allowed that the {dest} and the first {source} variable can be the same. Example: A INIT "ABC" FX FORM "12345.02" TAB INIT 0x09 . ET EDITTEXT ST STATTEXT . . . Create objects...... . IMPLODE S$CMDLIN,",",A,FX IMPLODE S$CMDLIN,"",A,FX IMPLODE S$CMDLIN,TAB,A,"Literal",FX IMPLODE S$CMDLIN,0x09,A,FX IMPLODE S$CMDLIN,";",ET,ST - Additional example showing how the combination of IMPLODE and EXPLODE can be used to simplify loading of objects from a record just read in from a file. To populate the objects, the record is read, an IMPLODE statement is used to pack all of the items into a single field that is separated by the specified delimiter. Then the EXPLODE is used to move each delimiter separated field to the object. The record can then be updated by performing the reverse operation. Example: VarList LIST A DIM 10 B DIM 15 C DIM 15 D FORM 4.2 E FORM 4.2 F FORM 4.2 LISTEND . ET_A EDITTEXT ET_B EDITTEXT ET_C EDITTEXT ET_D EDITTEXT ET_E EDITTEXT ET_F EDITTEXT . FILE IFILE DATA DIM 66 ... ReadNext READKS FILE;VarList IMPLODE DATA,0x01,VarList EXPLODE DATA,0x01,ET_A,ET_B,ET_C,ET_D,ET_E,ET_F RETURN ... UpdateRec IMPLODE DATA,0x01,ET_A,ET_B,ET_C,ET_D,ET_E,ET_F EXPLODE DATA,0x01,VarList UPDATE FILE;VarList RETURN - Modified the COPYFILE statement to detect and use the PLB_FNC keyword setting specified for the runtime where a program is being executed. Prior to this change the COPYFILE file names were always used in the character case as specified by the user program. With this change the COPYFILE file names are forced to lowercase when the PLB_FNC is declared. If the user wants to have mixed lowercase and uppercase characters, then the user needs to specify 'PLB_FNC=MIXED'. Also, note that if the PLB_FNC keyword is not specified/declared, then the default action for a Windows runtime is to force names to be lowercase. The default action for a Unix runtime is to allow names to have mixed character case names. - Modified the COPYFILE statement operations to automatically change the source and destination path characters to be the expected OS path character consistent with the OS type where a file is found or stored. - Added a new runtime keyword named 'PLB_CLOCKUSEIP={ip adr}'. When this keyword is specified, then a CLOCK statement performs a logon to the SUNFM file manager specified by the {ip adr} setting to retrieve the time and date information. Use of this keyword causes all CLOCK operations that retrieve any time or date information to go to a file manager. If an error occurs when accessing the file manager, then the time and date for the local workstation is used. Note: 1. A CLOCK statement causes the LESS flag to be cleared/set when the PLB_CLOCKUSEIP keyword is set. The LESS flag in this case is set FALSE if the CLOCK time/date information was accessed from the file manager. The LESS flag is set TRUE if an error occurred accessing the time/date from the file manager. 2. Be aware that if the PLB_CLOCKUSEIP keyword specifies an invalid {ip adr} or the file manager is not currently running, then a CLOCK operation sets the LESS flag. Also, note that the CLOCK operation executes slower than normal due to network overhead. - A new keyword named '*CLOCKUSEIP=' has been added to the GETMODE and SETMODE statements. A 'SETMODE *CLOCKUSEIP={ip adr}' operation causes the runtime to access a file manager to retrieve the time/date information for a CLOCK statement. This is the same as using the new runtime keyword named PLB_CLOCKUSEIP. The 'GETMODE *CLOCKUSEIP={svar}' operation can be used to retrieve the current {ip adr} string setting. The {svar} is set to be NULL if a CLOCKUSEIP string is not in use. Please notice that CLOCK instruction affects the LESS flag when the *CLOCKUSEIP string is set. - Added new controls named *ZFON and *ZFOFF for the following statements. The *ZFON control turns the *ZF zero fill control on until a *ZFOFF or the end of the instruction is encountered. Statements affected: DISPLAY, DBSEND, KEYIN, PRINT, PRTPAGE, and WRITE - Modified the *ZF control operation to perform a zero fill action for all the elements of a data variable when the variable following the *ZF is an ARRAY (without index), RECORD, or a VARLIST. Note: 1. When a program is compiled with an 8.7B compiler that contains a *ZF control with an ARRAY, RECORD, or VARLIST as the next variable, then an 8.7B runtime version or later performs a zero fill for all the variable elements. However, if this same program is executed with an older runtime then NO elements are set to zero in the ARRAY, RECORD, or VARLIST. - Modified the '-mNNNNN' and '-mvNNNNN' options to be accepted and processed to be the same for a given runtime. This avoids problems where the same options are used for different runtime platforms. - Added a new keyword named '*TASKID={nvar|ivar}' for the GETMODE instruction. The TASKID value returned is the thread id for a program when executing under Windows. The TASKID value returned is a process id for a program when executing under UNIX. The TASKID value returned to a program is the same as a task id value reported by the $ADMITEMTASKID child data for an ADMGETINFO operation. - Corrected an I01 error that could occur executing a DELETE FILELIST operation and an isam key did not exist for a secondary filelist IFILE. - Corrected a problem where a *RV control in a KEYIN operation for a DIM variable could cause a GPF/SEGV error if the PL size of the DIM variable was larger than 512. ------------------------------------------------------------------------------- PLBWIN - Modified the KEYIN *T0 operation to check for Windows events. This allows this instruction to be inserted into logic to cause windows events to be processed in a similar manner as an EVENTQUEUE instruction. - Modified zero numeric character of the fonts for the PLBWIN.FON and PLBWIND.FON resource files to have a slash across the character. This change is being made to allow the uppercase alpha 'O' to be differentiated from a numeric zero '0' character. - Added a new keyword named 'PLBWIN_DISPFLUSH={on|off}' to allow an immediate action for each DISPLAY/KEYIN instruction when this keyword is set to ON. This is being implemented to eliminate any delayed display actions caused by the event processing for the Windows OS. When this keyword is set to ON, a character-based program may execute slower since each DISPLAY and KEYIN is forces the Windows OS to take an immediate display action. - Added new keyword named '*DISPFLUSH=' for the GETMODE/SETMODE instructions. This keyword allows program control for the PLBWIN_DISPFLUSH keyword state. If this keyword is set to a non-zero value, this has the same action for DISPLAY/KEYIN operation as setting the PLBWIN_DISPFLUSH to an ON state. Format: GETMODE *DISPFLUSH= SETMODE *DISPFLUSH= - Modified the LISTVIEW FindItem method to work around an OS problem where the returned results were invalid when the LISTVIEW object SORTORDER was set to either ascending or descending. - Modified the 'show' method for the WINDOW object to support a specialized '*Mode=103' mode. This mode is a specialized method that causes a WINDOW to be maximized and the window does not overlay the OS Taskbar window area. - Added a new keyword named 'ABORT[={dnumnvar}]' for a PRTCLOSE instruction. The ABORT keyword allows a user to terminate an advanced printing session without coming up into the PRINT PREVIEW window. Notice, that the ABORT keyword can be specified with or without an optional {dnumnvar} parameter. When the {dnumnvar} value is specified, then a non-zero value causes the printing session to be terminated. A value of zero does not terminate the printing session. Also, note that a spooled file is deleted if a printing session is terminated. Example: PF PFILE . PRTOPEN PF,"@?","" . PRTCLOSE PF,ABORT ;Aborts print session PRTCLOSE PF,ABORT=1 ;Aborts print session PRTCLOSE PF,ABORT=0 ;Does not abort PRTCLOSE PF,ABORT=ABTFLG ;Optional ABORT - Added a new property named 'ROWSVISIBLE' for the COMBOBOX object. This property specifies the number of rows that are to be visible in the COMBOBOX drop down list. When more data items are added to the COMBOBOX than can be visible at one time, then a scrollbar automatically appear. If fewer data items are added to the COMBOBOX than the ROWSVISIBLE count, then a scrollbar does not show. This property can be used in a CREATE or GETPROP statement. The ROWSVISIBLE value can not be changed by a SETPROP operation. - Added a new method named 'AllowEmptyTab' for a DATALIST object. This method allows the runtime to perform a user tab operation to an empty DATALIST. Format: [label] {object}.AllowEmptyTab [GIVING {return}]: USING [*VALUE=]{value} Where: label - is an optional Program Execution Label. object - is a required DATALIST object that is accessed. return - is an optional Numeric Variable that indicates the success or failure of the method. value - is a required decimal number or Numeric Variable that indicates whether tabbing to an empty DATALIST is allowed or not. Flags Affected: EOS, OVER, ZERO Notes: 1. If the {value} is non-zero when this method is executed, then the DATALIST object operation is changed to allow a user tabbing action to set the focus to the object when is empty. 2. If the {value} is zero, then the DATALIST object operation does not allow a user tabbing action to set the focus to an empty DATALIST. This is the default operation of a DATALIST object. - Rewrote TIMER object processing to avoid application conflict with Windows OS TCP/IP operations. - Corrected a problem where the S$CMDLIN variable was prematurely being cleared during a CHAIN operation when only the chain to program name was specified. This problem could occur indeterminately depending on how the data variables were laid out in a program. - Corrected a problem where the PLB_DOSCMDLN keyword action was not properly simulating the MSDOS runtime CHAIN operations. - Corrected a problem that might cause a GPF error in the SUNIDE during the shutdown processing. - Corrected a problem where a SETPROP operation for the VISIBLE property did not work for a TOOLBUTTON object or a TOOLBAR toolbutton collection item. - Corrected a problem where a SETPROP of the LEFT property for a COLLECTION did not work properly for objects after the first object in the collection. - Corrected a memory leak caused when an logon operation to a SUNFM file manager failed because a file could not be found. - Corrected a problem where a PLBWIN runtime could go into a non-responsive state when using a managed file accessing a SUNFM file manager that specified FM_KEEPALIVE checking. If a PLBWIN runtime entered the non-responsive state, then the SUNFM keep alive checking would timeout and terminate the connection resulting in an I81 error in a program. Also, when the connection was terminated a 10057 error would be logged into the SUNFM log file. ------------------------------------------------------------------------------- RMSRAS - Corrected a problem where all READ statements did not retry an operation when a file was locked. This problem could cause an erroneous OVER flag. ------------------------------------------------------------------------------- PLB (UNIX)- Modified the Unix runtimes to support the PLB_DOSCMDLN keyword to simulate MSDOS runtime operations with regard to the CHAIN statement. - Corrected a problem where SETMODE *ENV would work once and then could give indeterminate results when accessed via CLOCK ENV. This correction should allow multiple SETMODE *ENV keywords to be specified at the same time. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to provide array support for the ADMIN data type. This change is for pointer and non-pointer declarations. Example: ARR ADMIN (4) ;supported ARRPTR ADMIN ^(4) ;Supported - Modified the compiler to support an array size of one. Example: ARRONE DIM 20(1) - Added support for an EXPLODE statement. - Added support for an IMPLODE statement. - Added support for CACHELIST and CACHELISTEND statements. - Added new keyword named 'PLBCMP_INCEXT={extension}. This keyword specifies the default extension used by the compiler when opening the file without an extension for an INCLUDE operation. If this keyword is not defined, then the default INCLUDE file extension is the same as specified for a source file. - Modified the GETMODE/SETMODE statements to support a *CLOCKUSEIP keyword. - Modified the compiler to give a Warning when the initialization decimal or hex values for an INIT or INTEGER are too large and truncated. - Corrected a problem where an ADMIN data variable specified in a CALL USING list was not properly checked for the corresponding ROUTINE operand type. CALL USING and ROUTINE data types are now checked properly for an ADMIN variable. - Corrected a problem where a GLOBAL pointer variable was not being identified as a pointer in a ROUTINE operand list. This problem would cause an F04 error to occur. - Corrected a problem where the compiler could start giving indeterminate errors after processing a user macro operation. - Corrected a CALL USING/ROUTINE parameter problem using whole array parameters when compiled using 'zc=3' option. This problem could cause indeterminate program execution. Example: XARR DIM 1(3) CALL XXX USING XARR STOP . XPTR DIM ^(3) . XXX ROUTINE XPTR ... RETURN - Corrected a problem in MOVEADDR & MOVEPTR where an array reference was causing a compiler error when assigned to a non-array reference using the 'zc=3' option. Example: X DIM 20(5) XPTR DIM ^ YARR DIM ^(20) . MOVEADDR X(1),XPTR MOVEPTR YARR(1),XPTR - Corrected a problem where a 'LIST ^' statement was not being output for a listing. - Corrected a problem where the printed statement output for a data variable might list the wrong UDA address of the variable. This is a listing problem only and does not affect the actual program operations. - Corrected a problem where the PLC header did not have a FILE link list reference when the '-c' command option was used to compile a program. A PLB program compiled in this manner would not implicitly close program files when a CHAIN operation was executed. - Corrected a problem where the compiler was not closing the source program when it stopped resulting in a chain operation back to a master. This problem was caused due to the compiler being compiled with the '-c' command line option problem. - Corrected a problem where the ANCHOR and DOCK properties were not supported for the CONTROL object. ------------------------------------------------------------------------------- PLBDBUG - Modified the debugger to recognize the following objects as variable constructs. ( MAINWINDOW, STATUSPANEL, TOOLBUTTON, SPLITTER, and PANEL ) - Modified the debugger to use a SDB file generated on a platform with a byte order different than the platform where the debugger is being executed. ------------------------------------------------------------------------------- PLBDSIGN - Modified the designer to provide an EXPORT CODE submenu item for the File menu. This is being added to address a situation where the form being used was completely covered with child GUI objects. The problem was that a user could not access the form window to execute a right click menu operation. - Added support for the ROWSVISIBLE property for a COMBOBOX object. - Corrected a problem where the creation of a STATTEXT object over a PANEL object did not show the text until the object was moved. - Corrected a problem where the menu action of Format\Align options did not work properly aligning objects over a PANEL object. - Corrected a problem where the object sizing rectangles for a STATTEXT object that overlapped with an EDITTEXT object remained visible when the EDITTEXT object got the focus. ------------------------------------------------------------------------------- SUNMOD - Now generated as a 32 bit Windows console utility. ------------------------------------------------------------------------------- MAKEDEF - Now generated as a 32 bit Windows console utility. ------------------------------------------------------------------------------- SUNSORT - Modified the SUNSORT utility when sorting a file in place to insure that the temporary working file is created at the same location as the file being sorted. This corrects a renaming problem that could occur when the temporary working file existed on a Novell 3.2 server. - Corrected a problem where the reformat output operation for SUNSORT did not work properly when a compressed data file was being sorted. ------------------------------------------------------------------------------- SETGUID - A new utility to update PLF forms with a current GUID identification without having to load the PLF form into the PLBDSIGN designer. SETGUID is executed as a Windows OS console utility and can be executed in a batch file. After the SETGUID utility has modified a PLF form, the PLF form can be used in multiple programs and cached optimally when executed using the Application Server. Format: setguid myform setguid myform.plf ------------------------------------------------------------------------------- MENUGEN - Corrected a problem where this utility would not run with the personal version of the runtime. ------------------------------------------------------------------------------- REFORMAT - Modified to show the beginning column being displayed when the screen is shifted left or right. Also modified to show the column where a mismatch occured. ------------------------------------------------------------------------------- SUNIDE - Added option so "Backup Project Files" does not copy files if the destination file is newer than source. - Fixed a bug in variable autocomplete logic where a variable my not be found in the Browse labels even if it is there. - Modified the build process so all list files are not reloaded after every compile, only the ones for programs that have actually changed. Browse info is now loaded at the same time we scan the list file for errors. This improves peformance. - Fixed a bug where if a user clicked "Save All" on the tool bar or selected it from the menu, the ide would still prompt to save each file before compiles or on program exit. - Fixed a bug in "Find In Files" where it could skip a search of a PLF. - When a project is loaded, the search path is now modified to use PLB_PATH in the projects specified .ini file. - Fixed a bug where the saved font name was not being used when the settings were being restored. - The editor now saves the font properties for the editor. - Added an option to create .BAK files when a file is saved. - Modified the printing routine to try to ensure consistant printer output between different printers by adding the *Quality list control during printer initialization. - Fixed a problem where an extra empty line may be added to the end of the file each time the file is opened and saved. ------------------------------------------------------------------------------- WATCH - Corrected a problem that would create a configuration file (watch.cfg) that was unnecessarily large (64kb). - Corrected writing of information to a blank configuration file. - Corrected a display error that occurred when there were clients but no open files. - Added program names to client task section of treeview. - Added trap logic to catch a gone-away server. - Added descriptive messages to connection IO errors based on error subcodes. - Corrected cosmetic problems in DISCONNECT routine. - Optimized code with new Implode and Explode verbs. - Added additional server information. - Added server log file display that also works with the refresh timer. - Added server and client version conversion routine to format the version into a standard Sunbelt format. - Corrected resizing logic in modal dialogs. - Added logic to disabled timer when modal dialogs are active. - Delayed loading of modal dialogs until needed. - Added shorcut menu in Clients and Files windows. Moved tab functions from buttons to the shortcut menu. - Added client logging contol to client tab shortcut menu. - Optimized Files tab functions with ADMGETINFO filter. ------------------------------------------------------------------------------- ADMEQU.INC - Modified to provide equates for new Admin Services data types. ------------------------------------------------------------------------------- ODSBAC32.DLL- The 8.7B Sunbelt ODBC driver has been updated for the latest reported issues from Syware, Inc. for the ODBC bronze support. - Make note that the 8.7B ODSBAC32.DLL must used the 8.7B SUNFHDLL.DLL or a version error occurs. - It should also be noted that 8.7 or later versions of the ODSBAC32.DLL have Admin support added when accessing a File Manager with Admin services being used. ------------------------------------------------------------------------------- SUNFHSYS.DLL- Modified to support new Admin Services data types. - Corrected a memory leak resulting from a failed logon attempt to a SUNFM file manager. ------------------------------------------------------------------------------- ADMIN - Modified the Windows server versions to provide critical exception handler to capture any Admin thread GPF errors. This change is needed to prevent premature termination of a server when a GPF occurs in an Admin thread. - Modified the Admin Services to support new ADMGETINFO data types as follows: $ADMITEMUSERNAME specifies that the client user name string is to be returned. The user name is the name identified by the OS for the client workstation. $ADMITEMUSERNAME EQU 16 $ADMITEMCOMPUERNAME specifies that the client computer name string is be returned. The computer name is the name identified by the OS for the client workstation. $ADMITEMCOMPUERNAME EQU 17 $ADMITEMMODULENAME specifies that the names of all load modules currently in use by a Application Server PL/B program is to be returned. The load module data is not available for the File Manager Server. $ADMITEMMODULENAME EQU 18 $ADMITEMAAMFILENAME specifies that the AFILE file names currently opened by a program are to be returned. $ADMITEMAAMFILENAME EQU 19 $ADMITEMISIFILENAME specifies that the IFILE file names currently opened by a program are to be returned. $ADMITEMISIFILENAME EQU 20 $ADMITEMPRTFILENAME specifies that the print spool file names currently opened by a program are to be returned. $ADMITEMPRTFILENAME EQU 21 $ADMITEMTXTFILENAME specifies that the FILE filenames currently currently opened by a program are to be returned. $ADMITEMTXTFILENAME EQU 22 $ADMITEMSRVNAME specifies the server name is to returned. The server name is identified by the new server keyword named 'ADMIN_SRVNAME={name}'. $ADMITEMSRVNAME EQU 114 $ADMITEMSRVUSERNAME specifies that the admin client user name string is to be returned. The user name is the name identified by the OS for the client workstation that is logged on to the Admin Services. $ADMITEMSRVUSERNAME EQU 115 $ADMITEMSRVCOMPUTERNAME specifies that the admin client computer name string is to be returned. The compiler name is the name identified by the OS for the client workstation that is logged on to the Admin Services. $ADMITEMSRVCOMPUTERNAME EQU 116 - Corrected a problem where an invalid Admin id value was being returned when an ADMGETINFO operation for a $ADMITEMADMID data type was specified. - Corrected a GPF problem that could occur when an invalid Admin id value was specified for an ADMGETINFO operation. Date: 07-28-2003 Subject: Patch RELEASE 8.7C Runtime Files Included you will find the patch release of: PLBSERVE 8.7C 28 Jul 2003 8.7.0130 PLBCLIENT 8.7C 28 Jul 2003 8.7.0130 PLBCLICON 8.7C 28 Jul 2003 8.7.0130 PLBWIN 8.7C 28 Jul 2003 8.7.0130 PLBDSIGN 8.7C 28 Jul 2003 8.7.0130 SUNFYSYS.DLL 8.7C 28 Jul 2003 8.7.0130 SUNFHDLL.DLL 8.7C 28 Jul 2003 8.7.0130 SUNFHDLL.LIB 8.7C 28 Jul 2003 PLBCMP 8.7C 28 Jul 2003 PLBDBUG 8.7C 28 Jul 2003 ADMEQU.INC 8.7C 28 Jul 2003 PLBEQU.INC 8.7C 28 Jul 2003 PLBMETH.INC 8.7C 28 Jul 2003 SUNIDE.PLC 8.7C 28 Jul 2003 WATCH.PLC 8.7C 28 Jul 2003 *============================================================================== Notes for some NEW Items: - Added MOVE of VARLIST to VARLIST. - Added {dnum} operand support for SWITCH, CASE, SELECT, WHEN, and FOR statements. - The EDITTEXT object has been modified to support the following new Properties and Methods. Properties (NEW) AUTOENTER LEFTMARGIN MODIFYFLAG PASSWORDCHAR RIGHTMARGIN SELTEXT TEXTOUTCONV Methods (NEW) CanUndo Clear ClearUndo Copy Cut GetCharIndexFromPos GetFirstVisibleLine GetLine GetLineCount GetPosFromCharIndex GetTextLength LineFromChar LineIndex LineLength LineScroll Paste Scroll ScrollToCaret Select SelectAll Undo - Added new GUI object named EDITNUMBER. - Added scrollbar support for COMBOBOX and DATALIST objects. - Added new properties and methods for a COMBOBOX object. - Added new properties for a DATALIST object. *============================================================================== Notes for DOCUMENTATION: - Please change the {type} field description in the Compiler Cross Reference to include a 'nn' type id for an Object variable. The Object now has a type field named 'Onn' where the 'nn' value is the same as identified for the subtype equates found in the PLBEQU.INC include file. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Modified the socket error information stored in a server log file to include a client User name and Computer name. - Modified the PLBSERVE runtime to use the PLBCS_LOCALIP address setting in place of the PLBCS_HOSTNAME address setting when the PLBCS_HOSTNAME address setting is all zeros and one of the command options -f, -r, or -t is being used. - Modified CLOCK VERSION to append the PLBCLIENT version in the output DIM variable in byte positions 27 to 31. - Modified GETMODE *GUI to report a value of 0 to indicate no GUI support when a PLBCLIUNX client is being used. - Modified the PLBSERVE log file output to report the Admin Slot Identification as a decimal number. This eliminates confusion comparing data reported by the ADMGETINFO statement to the data found in the server log file. - Corrected a problem where a SETPROP of VISIBLE=0 for a COLLECTION that contained a MODAL dialog WINDOW object did not execute properly. This could cause the program instruction pointer to be invalid after the SETPROP VISIBLE=0 operation. ------------------------------------------------------------------------------- PLBCLIENT- Corrected a problem that would cause a forward byte order server child process to give a SEGV error when a DESTROY of a WINDOW object was executed and other objects were implicitly destroyed. ------------------------------------------------------------------------------- PLBSERVE - Corrected a problem where a DEACTIVATE of a Modal WINDOW object PLBCLIENT was not properly restoring the user program stack. This was causing the program instruction pointer to be invalid resulting in indeterminate program execution. ------------------------------------------------------------------------------- PLBWIN - Added support for a MOVE {varlist} to {varlist1} operation. PLBSERVE See PLBCMP section for details. PLB (UNIX) - Corrected a problem with the REPLACE statement caused in release 8.7B where a replace of the same character did not set the ZERO flag. - Corrected a problem where the following instructions could give erroneous results when executed using the PLB debugger single step operations. CHARSAVE, CHARRESTORE SCRNSAVE, SCRNRESTORE, SCRNSIZE WINSAVE, WINRESTORE, WINSIZE - Corrected a problem where *JL control in a KEYIN instruction was affecting all of the following variables in the KEYIN. The *JL should only affect the next variable in the KEYIN. - Corrected a problem where a LOADADR operation did not work properly when the destination variable was a VAR type and the variable list was a VARLIST. The problem in this case was that the address of the VARLIST was being placed into the VAR variable pointer. The correction is that the address of the members of VARLIST is now stored into the VAR variable pointer. ------------------------------------------------------------------------------- PLBWIN - Modified PRTPLAY to open a spool file in a READ ONLY mode. This can allow spool files to be processed directly off of a CD-ROM. - Modified the FORMLOAD instruction to allow a PANEL object to be specified for the optional {window} parent object. This can be used to specify a PANEL object as the parent window for an Objects Only PLF form. If a PANEL object is specified for a PLF form that is not an Objects Only form, then an O119 error with a subcode of 46 occurs. - Modified the TABCONTROL object to support the DOCK property. - Modified the BTRIEVE instruction to set an open state flag in a BFILE variable when an open function is executed successfully. When an 8.7C PLBDBUG debugger is used, this change allows a DV BFILE command to indicate an open state for a BFILE. Please note that a BFILE does not contain any information about any handles or file names specified for BTRIEVE function. - Modified the runtime to prevent an EVENTWAIT statement from continuing execution at the next PLB statement when a 30-second keep alive check was performed. This keep alive check behavior started occurring with the 8.7B patch release. - The EDITTEXT object has been modified to support the following new Properties and Methods. Properties (NEW) AUTOENTER CREATE SETPROP GETPROP TEXT SETPROP GETPROP LEFTMARGIN CREATE SETPROP GETPROP MODIFYFLAG SETPROP GETPROP PASSWORDCHAR CREATE SETPROP GETPROP RIGHTMARGIN CREATE SETPROP GETPROP SELTEXT SETPROP GETPROP TEXTOUTCONV CREATE SETPROP GETPROP Methods (NEW) CanUndo Clear ClearUndo Copy Cut GetCharIndexFromPos GetFirstVisibleLine GetLine GetLineCount GetPosFromCharIndex GetTextLength LineFromChar LineIndex LineLength LineScroll Paste Scroll ScrollToCaret Select SelectAll Undo - The new property AUTOENTER is implemented for an EDITTEXT object as follows: Format: AUTOENTER=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to set or get the automatic entry state. If the state is ON, the object automatically tabs to the next object in the tab sequence when the the following conditions occur: 1. The EDITTEXT object is a single line edit object. 2. The EDITTEXT MAXCHARS property is set to a non-zero value. 3. The user keys the last character in the edit field as determined from the MAXCHARS property. Objects Supported: EDITNUMBER dnumnvar values: $OFF EQU 0 // Default $ON EQU 1 Note: 1. The autoenter action does not occur if data is keyed at a caret position other than the last position of the edit field as determined by the MAXCHARS property value. 2. The autoenter action does not occur if the user sets the caret to a full edit field, as determined by the MAXCHARS property, and re-enters data in an OVERTYPE mode. - The TEXT property has been implemented for the EDITTEXT object as follows: Format: TEXT=svarslit Statements Supported: SETPROP GETPROP Description: This property specifies the text to display in the object. If the object is an EDITTEXT, the property works in conjunction with the TEXTOUTCONV property. Objects Supported: EDITTEXT STATUSPANEL TOOLBUTTON svarslit value: String of data. - The new property named LEFTMARGIN has been added for the EDITTEXT object as follows: Format: LEFTMARGIN=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used in set or get the left margin of an edit object. Objects Supported: EDITNUMBER EDITTEXT - The new property named MODIFYFLAG has been added for the EDITTEXT object as follows: Format: MODIFYFLAG=dnumnvar Statements Supported: SETPROP GETPROP Description: This property sets or retrieves the state of an edit object's modification flag. The flag indicates whether the contents of the edit object have been modified. The system automatically clears the modification flag to zero when the object is created. If the user changes the object's text, the system sets the flag to $ON. Objects Supported: EDITNUMBER EDITTEXT dnumnvar values: $OFF EQU 0 // Default $ON EQU 1 - The new property named PASSWORDCHAR has been added for the EDITTEXT object as follows: Format: PASSWORDCHAR=svarslit Statements Supported: CREATE SETPROP GETPROP Description: This property sets or gets the password character for an EDITTEXT object. When a password character is set, that character is displayed in place of the characters typed by the user. This property is used in conjunction with the PASSWORD property. Objects Supported: EDITTEXT svarslit value: String of data. Only the first character is used or set. - The new property named RIGHTMARGIN has been added for the EDITTEXT object as follows: Format: RIGHTMARGIN=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used in set or get the right margin of an edit object. Objects Supported: EDITNUMBER EDITTEXT - The new property named SELTEXT has been added for the EDITTEXT object as follows: Format: SELTEXT=svarslit Statements Supported: SETPROP GETPROP Description: This property gets or replaced the selected text. It works in conjunction with the TEXTOUTCONV property. Objects Supported: EDITTEXT svarslit value: String of data. - The new property named TEXTOUTCONV has been added for the EDITTEXT object as follows: Format: TEXTOUTCONV=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to control the conversion of text from an EDITTEXT object, when text is obtain by a GETPROP or GETITEM statement. It must be one of: $CONVDEFAULT - The conversion default to the global runtime conversion. The default runtime conversion is $CONVEOL. $CONVEOL - The CR/LF combinations are replaced with the 0x7F characters. $CONVEXPAND - The CR/LF combinations are replaced with the 0x7F characters. Tab characters are expanded into spaces. $CONVRAW - No conversion is done. $CONVSPACES - The CR/LF combinations are replaced with 0x7F characters. All characters below a space in value are turned into a single space character. Objects Supported: EDITTEXT dnumnvar values: $CONVDEFAULT EQU 1 $CONVEOL EQU 2 $CONVEXPAND EQU 3 $CONVRAW EQU 4 $CONVSPACES EQU 5 - The EDITTEXT object has been modified to support the following methods. EDITTEXT Methods .-------------------- . Clear Method . The Clear method is used to delete (clear) the current selection for the EDITTEXT object. The method uses the following format: [label] {object}.Clear [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The OVER and EOS Condition Flags are always cleared (FALSE). 2. A return value is always set to be 1 for success. 3. This operation can be reversed by the Undo method. .-------------------- . ClearUndo Method . The ClearUndo method resets the UNDO flag of an EDITTEXT object. The UNDO flag is set whenever an operation within the EDITTEXT object can be undone. The method uses the following format: [label] {object}.ClearUndo [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The OVER and EOS Condition Flags are always cleared (FALSE). 2. A return value is always set to be 1 for success. .-------------------- . Copy Method . The Copy method copies the current selection to the clipboard in text format. The method uses the following format: [label] {object}.Copy [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The OVER and EOS Condition Flags are always cleared (FALSE). 2. A return value is always set to be 1 for success. .-------------------- . Cut Method . The Cut method is used to delete (cut) the current selection, if any, in the EDITTEXT object and place the deleted text to the clipboard in text format. The method uses the following format: [label] {object}.Cut [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The OVER and EOS Condition Flags are always cleared (FALSE). 2. A return value is always set to be 1 for success. 3. This operation can be reversed by the Undo method. .-------------------- . Paste Method . The Paste method is used to copy the current content of the clipboard to the EDITTEXT object at the current caret position. Data is inserted only if the clipboard contains data in text format. The method uses the following format: [label] {object}.Paste [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The OVER and EOS Condition Flags are always cleared (FALSE). 2. A return value is always set to be 1 for success. .-------------------- . Undo Method . The Undo method is used to undo the last EDITTEXT object operation in the object's undo queue. The method uses the following format: [label] {object}.Undo [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. For a single-line EDITTEXT object, the return value is always 1. 4. For a multiline EDITTEXT object, the return value is 1 if the undo operation is successful, or 0 if the undo operation fails. 5. An undo operation can also be undone. .-------------------- . ScrollToCaret Method . The ScrollToCaret method is used to scroll the caret into view. The method uses the following format: [label] {object}.ScrollToCaret [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A return value is always set to be 1 for success. .-------------------- . Select Method . The Select method is used to select a range of characters. Also, this method can be used to set the current caret position. The method uses the following format: [label] {object}.Select [GIVING {return}]: USING [*Start=]{start},[*End=]{end} Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that gets the return value. start is a required decimal number or Numeric Variable that specifies a caret/selection point before the starting character position. end is a required decimal number or Numeric Variable that specifies the ending selection point before the ending character position. Flags Affected: EOS, OVER, ZERO Note the following: 1. The OVER and EOS Condition Flags are always cleared (FALSE). 2. A return value is always set to be 1 for success. 3. The first character position is at 1. 4. If an end position of 0 is given, then the selection goes from the {start} position and selects all of the remaining data. The caret position is left after the {end} position. 5. If the {start} and {end} positions are the same, then the caret position is set before the {start} position and no data is highlighted as a selection. If the {start} position has a value larger than the number of characters in the edit object, then the caret is after the last character in the object. 6. If the {start} value is set to 1 and the {end} value is set to 5, then the first 4 characters are highlighted as a selection. The caret is set before the 5th character and the 5th character is not selected. .-------------------- . SelectAll Method . The SelectAll method is used to selects all of the characters in an EDITTEXT object. The method uses the following format: [label] {object}.SelectAll [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The OVER and EOS Condition Flags are always cleared (FALSE). 2. A return value is always set to be 1 for success. .-------------------- . GetLineCount Method . The GetLineCount method is used to retrieve the number of lines in a multiline EDITTEXT object. The method uses the following format: [label] {object}.GetLineCount [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the total number of text lines. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). .-------------------- . GetLine Method . The GetLine method is used to copy a line of text from a multiline EDITTEXT object. The method uses the following format: [label] {object}.GetLine [GIVING {return}]: USING [*Line=]{line} Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Character String Variable that gets the line text. line is a required decimal number or Numeric Variable that specifies the line number to get. Flags Affected: EOS, OVER, ZERO Note the following: 1. If {return} is too small to contain value, the OVER Condition Flag is set (TRUE). 2. The ZERO and EOS Condition Flags are always cleared (FALSE). 3. Line numbers are one-based, a value of one specifies the topmost line. .-------------------- . GetFirstVisibleLine Method . The GetFirstVisibleLine method is used to retrieve the one-based index of the uppermost visible line in a multiline EDITTEXT object. The method uses the following format: [label] {object}.GetFirstVisibleLine [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the first visible line. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). .-------------------- . LineIndex Method . The LineIndex method is used to retrieve the character index of the first character of a specified line in a multiline EDITTEXT object. The method uses the following format: [label] {object}.LineIndex [GIVING {return}]: USING [*Line=]{line} Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the character index. line is a required decimal number or Numeric Variable that specifies the one-based line number. A value of 0 specifies the current line number (the line that contains the caret). Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A character index is the one-based index of the character from the beginning of the EDITTEXT object. 4. The result is 0 if the specified line number is greater than the number of lines in the EDITTEXT object. .-------------------- . LineFromChar Method . The LineFromChar method is used to retrieve the line number that contains the specified character index in a multiline EDITTEXT object. The method uses the following format: [label] {object}.LineFromChar [GIVING {return}]: USING [*CharIndex=]{charndx} Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the one-based line number. charndx is a required decimal number or Numeric Variable that specifies the one-based character index. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A character index is the one-based index of the character from the beginning of the EDITTEXT object. 4. A character index of 0 specifies that either the line number of the current line (the line containing the caret) or, if there is a selection, the line number of the line containing the beginning of the selection, should be returned. .-------------------- . LineLength Method . The LineLength method is used to retrieve the length, in characters, of a line in an EDITTEXT object. The method uses the following format: [label] {object}.LineLength [GIVING {return}]: USING [*CharIndex=]{charndx} Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the line length. charndx is a required decimal number or Numeric Variable that specifies the one-based character index. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A character index is the one-based index of the character from the beginning of the EDITTEXT object. 4. A character index of 0 returns the number of unselected characters on lines containing selected characters. .-------------------- . LineScroll Method . The LineScroll method is used to scroll the text in a multiline EDITTEXT object. The method uses the following format: [label] {object}.LineScroll [GIVING {return}]: USING [*Chars=]{chars}: [*Lines=]{lines} Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that gets the return value. chars is a required decimal number or Numeric Variable that specifies the number of characters to scroll horizontally. lines is a required decimal number or Numeric Variable that specifies the number of lines to scroll vertically. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A return value of 0 indicates a single-line EDITTEXT object. 4. A return value of 1 indicates a multiline EDITTEXT object .-------------------- . GetCharIndexFromPos Method . The GetCharIndexFromPos method is used to retrieve information about the character closest to a specified point in the client area of n EDITTEXT object. The method uses the following format: [label] {object}.GetCharIndexFromPos [GIVING {return}]: USING [*Vert=]{vert}: [*Horz=]{horz} Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that gets the character index. vert is a required decimal number or Numeric Variable that specifies the vertical number of pixels from the EDITTEXT object's upper-left corner. horz is a required decimal number or Numeric Variable that specifies the horizontal number of pixels from the EDITTEXT object's upper-let corner. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A character index returned is the one-based index of the character from the beginning of the EDITTEXT object. .-------------------- . GetPosFromCharIndex Method . The GetPosFromCharIndex method is used to retrieve the client area coordinates of a specified character in an EDITTEXT object. The method uses the following format: [label] {object}.GetPosFromCharIndex [GIVING {return}]: USING [*CharIndex=]{charndx} Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the position. charndx is a required decimal number or Numeric Variable that specifies the one-based character index. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A character index is the one-based index of the character from the beginning of the EDITTEXT object. 4. The positioned is returned as vertical position * 10000 + horizontal position. .-------------------- . CanUndo Method . The CanUndo method is used to determine whether there are any actions in an EDITTEXT object's undo queue. The method uses the following format: [label] {object}.CanUndo [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A return value of 0 indicates no undo actions. 4. A return value of non-zero indicates undo actions. .-------------------- . GetTextLength Method . The GetTextLength method is used to get the raw character count. The method uses the following format: [label] {object}.GetTextLength [GIVING {return}] Where: label is an optional Program Execution Label. object is a required EDITTEXT object to be accessed. return is an optional Numeric Variable that obtains the raw character count. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). .-------------------- . Scroll Method . The Scroll method is used to scroll the text vertically in a multiline EDITTEXT object. The method uses the following format: [label] {object}.Scroll [GIVING {return}]: USING [*Action=]{action} Where: label is an optional Program Execution Label. object is a required WINDOW object to be accessed. return is an optional Numeric Variable that gets the return value. action is a required decimal number or Numeric Variable that specifies the action to perform. Flags Affected: EOS, OVER, ZERO Note the following: 1. The {action} parameter can be one of: $LineDown Scrolls down one line. $LineUp Scrolls up one line. $PageDown Scrolls down one page. $PageUp Scrolls up one page. $LineUp EQU 0 $LineDown EQU 1 $PageUp EQU 2 $PageDown EQU 3 2. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 3. The OVER and EOS Condition Flags are always cleared (FALSE). 4. The result is zero if the scroll fails. - A new object named EDITNUMBER has been added to the PL/B set of GUI objects. This new object is like an EDITTEXT except it only allows numeric data where the number of whole digits and decimal digits are specified when the object is created. This object only accepts valid numeric data in the same format as is allowed for a PL/B FORM variable. The EDITNUMBER object has been implemented to support the following Properties, Methods, and Events. Properties (Support added for EDITNUMBER object) ALIGNMENT ANCHOR BDRCOLOR BGCOLOR BORDER CAUSEVALID CLIPSIB DOCK DROPID ENABLED EDITHIDESEL EVENTFILTER FGCOLOR FONT HEIGHT HELPID HWND LEFT LEFTMARGIN OBJECTID OVERTYPE READONLY RIGHTMARGIN SELECTALL STYLE TABID TEXT TOOLTIP TOOLTIPHWND TOP VISIBLE WIDTH ZORDER Properties (New EDITNUMBER Properties) ALLOWMINUS CREATE SETPROP GETPROP AUTOENTER CREATE SETPROP GETPROP DECIMALDIGITS CREATE SETPROP GETPROP INTEGERDIGITS CREATE SETPROP GETPROP LEFTMARGIN CREATE SETPROP GETPROP See EDITTEXT description MODIFYFLAG SETPROP GETPROP See EDITTEXT description UPDOWNALIGN CREATE SETPROP GETPROP RIGHTMARGIN CREATE SETPROP GETPROP See EDITTEXT description UPDOWNCHANGE CREATE SETPROP GETPROP UPDOWNMAX CREATE SETPROP GETPROP UPDOWNMIN CREATE SETPROP GETPROP Methods (Same description as for EDITTEXT methods with same name) CanUndo Clear ClearUndo Copy Cut GetTextLength Paste ScrollToCaret Select SelectAll Undo Events (Same description as for an EDITTEXT) Change DragDrop DragOver GotFocus KeyPress LostFocus Move MouseDown MouseUp MouseMove Validate - The new property ALLOWMINUS is implemented for an EDITNUMBER object as follows: Format: ALLOWMINUS=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to prevent or allow negative numbers. If the property is set to $OFF, a leading minus sign is not allowed. If it is set to $ON, a leading minus sign is allowed. Objects Supported: EDITNUMBER dnumnvar values: $OFF EQU 0 // Default $ON EQU 1 - The new property AUTOENTER is implemented for an EDITNUMBER object as follows: Format: AUTOENTER=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to set or get the automatic entry state. If the state is ON, the object automatically tabs to the next object in the tab sequence when the number is completed using the keyboard. If a number has decimal digits, it is considered complete when all of the decimal digits have been entered. If the value has no decimal digits, then all of the integer digits must be entered. Objects Supported: EDITNUMBER dnumnvar values: $OFF EQU 0 // Default $ON EQU 1 - The new property DECIMALDIGITS is implemented for an EDITNUMBER object as follows: Format: DECIMALDIGITS=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to set or get number of decimal digits allowed. Objects Supported: EDITNUMBER - The new property INTEGERDIGITS is implemented for an EDITNUMBER object as follows: Format: INTEGERDIGITS=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to set or get number of integer digits allowed. Objects Supported: EDITNUMBER - The new property UPDOWNALIGN is implemented for an EDITNUMBER object as follows: Format: UPDOWNALIGN=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to set or get the alignment value of an UpDown control component of an EDITNUMER object. If the default or $UPDOWNALIGNNONE value is used, no UpDown control is created. If $UPDOWNALIGNLEFT, or $UPDOWNALIGNRIGHT is used, an UpDown control is created inside the EDITNUMBER object by reducing the object's width. An UpDown control only affects the integer portion of a EDITNUMBER object. The UPDOWNCHANGE, UPDOWNMAX, and UPDOWNMIN properties must also be set. Objects Supported: EDITNUMBER dnumnvar values: $DEFAULT EQU 0 - Use Default ($UPDOWNALIGNNONE). $UPDOWNALIGNLEFT EQU 1 - UpDown control should be on the left. $UPDOWNALIGNNONE EQU 2 - No UpDown control is to be used. $UPDOWNALIGNRIGHT EQU 3 - UpDown control should be on the right. - The new property UPDOWNCHANGE is implemented for an EDITNUMBER object as follows: Format: UPDOWNCHANGE=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to set or get the change value of the UpDown control. The change value is used to modify the current value of the EDITNUMBER object, when the UpDown control is used. If no value is specified on a create, then a value of 1 is used. Objects Supported: EDITNUMBER - The new property UPDOWNMAX is implemented for an EDITNUMBER object as follows: Format: UPDOWNMAX=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to set or get the maximum value of the UpDown control. If the maximum value is exceeded while using the control, the value wraps to the minimum value. If no value is specified on a create, then a value of 100 is used. Objects Supported: EDITNUMBER - The new property UPDOWNMIN is implemented for an EDITNUMBER object as follows: Format: UPDOWNMIN=dnumnvar Statements Support: CREATE SETPROP GETPROP Description: This property is used to set or get the minimum value of the UpDown control. If the value drops below the minimum value while using the control, the value wraps to the maximum value. If no value is specified on a create, then a value of 0 is used. Objects Supported: EDITNUMBER - The DATALIST object has been modified to support the following Properties. Properties SCROLLBAR CREATE SETPROP GETPROP SCROLLHIDE CREATE GETPROP (NEW) MULTICOLUMN CREATE GETPROP (NEW) COLUMNWIDTH CREATE SETPROP GETPROP (NEW) HORZEXTENT CREATE SETPROP GETPROP (NEW) - The COMBOBOX object has been modified to support the following Properties and Methods. Note, that the description of the COMBOBOX methods are the same as for the DATALIST. Properties SCROLLBAR CREATE SETPROP GETPROP SCROLLHIDE CREATE GETPROP (NEW) HORZEXTENT CREATE SETPROP GETPROP (NEW) Methods (NEW) - Same description as for a DATALIST AddString DeleteString Dir FindString FindStringExact GetCount GetCurSel GetItemData GetText GetTopIndex InsertString ResetContent SelectString SetCurSel SetItemData SetTopIndex - The SCROLLBAR property has been added to both the DATALIST and COMBOBOX objects. - The SCROLLHIDE property is a new property and has been added to the COMBOBOX and DATALIST objects as follows: Format: SCROLLHIDE=dnumnvar Statements Supported: CREATE GETPROP Description: This property is used to indicate if scrollbars should be hidden or disabled if not required. If the value is $OFF, scrollbars are disabled. A value of $ON causes the scrollbars to be hidden. Objects Supported: COMBOBOX DATALIST dnumnvar values: $OFF EQU 0 // Default $ON EQU 1 - The MULTICOLUMN property is a new property that has been added to the DATALIST object as follows: Format: MULTICOLUMN=dnumnvar Statements Supported: CREATE GETPROP Description: This property is used to indicate if the DATALIST object should contain multiple columns. The size of the columns is set using the COLUMNWIDTH property. Objects Supported: DATALIST dnumnvar values: $OFF EQU 0 // Default $ON EQU 1 - The COLUMNWIDTH property is a new property that has been added to the DATALIST object as follows: Format: COLUMNWIDTH=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to set or get column width of a multicolumn DATALIST object. Objects Supported: DATALIST - The HORZEXTENT property is a new property that has been added to the COMBOBOX and DATALIST objects as follows: Format: HORZEXTENT=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to set or get the width, in pixels, by which a list box can be scrolled horizontally (the scrollable width). If the width of the list box is smaller than this value, the horizontal scroll bar horizontally scrolls items in the list box. If the width of the list box is equal to or greater than this value, the horizontal scroll bar is hidden or, if the object has the ScrollHide property set $OFF, disabled. Objects Supported: COMBOBOX DATALIST - Corrected a problem where the position/size of objects that used the ANCHOR property and was placed over a PANEL object could be changed by a FORMLOAD operation. - Corrected a problem where a GROUPBOX over a PANEL object did not appear after a FORMLOAD operation. - Corrected a problem where SETITEM for a TIMER object did not reset the timer. This problem was caused by 8.7B changes. - Corrected a problem where a DESTROY of a MODAL form after a SETPROP VISIBLE=1 for a PLF form COLLECTION that included the MODAL form could cause a GPF error. - Corrected a problem where the border of a GROUPBOX with a transparent background was being drawn on top of a STATTEXT object that was created over the border of the GROUPBOX with the STATTEXT object having a higher ZORDER than the GROUPBOX. This problem was created in release 8.6E. - Corrected a problem where a STATTEXT object created on a PANEL was not being updated when a SETITEM operation was performed. - Corrected a problem where anchored objects did not properly redraw when the parent object was changed resulting in a negative height or width for the anchored object. - Corrected ANCHOR drawing problems when the AUTOSCROLL property was being used for the parent window of an anchored object. - Corrected a problem where the EDITHIDESEL property did not work when used in a CREATE for an EDITTEXT object. - Corrected a problem where the date reported for internal diagnostic/debug log data could have an invalid month value. - Corrected a problem where a DATALIST was not being resized properly when the ANCHOR and INTEGRAL properties were used and the parent window size was changed. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler Cross Reference output to include a type ID for the Object variable types. The Object variable types are the same as defined for the Object subtype equated values found in the PLBEQU.INC include file as '$ST_object'. Example: $ST_BUTTON EQU 0x01 $ST_VARIANT EQU 0x29 - Modified the compiler to give a compilation error when a GOTO references an EXTERNAL label. This corrects a problem where invalid pcode was being generated that result in a GPF error. - Modified the SWITCH, CASE, SELECT, WHEN, and FOR statements to allow a decimal number (dnum} to be used. Examples: SWITCH 2 CASE NUMVAR ..... ENDSWITCH SWITCH NUMVAR CASE 2 ..... ENDSWITCH SELECT 2 WHEN NUMVAR ..... ENDSELECT FOR NDX 1 TO 5 ..... REPEAT - Added support for a MOVE VARLIST to VARLIST operation. This MOVE instruction transfers the contents of each variable in the source VARLIST into the corresponding variable in the destination VARLIST. Format: [label] MOVE {source}{sep}{dest} Where: [label] is an optional Program Execution label. {source} is a VARLIST Variable. {sep} is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. (dest} is a VARLIST Variable. Flags Affected: EOS, LESS, OVER, ZERO Note the following: 1. Each VARLIST variable in the {source} is move to the corresponding VARIABLE in the {dest} according to the rules normal MOVE operation for variable types DIM, FORM, and INTEGER. - Modified the compiler to support the new Properties for the EDITTEXT object. (See PLBWIN section for descriptions) - Modified the compiler to support new Properties for a COMBOBOX object. (See PLBWIN section for descriptions) - Modified the compiler to support new Properties for a DATALIST object. (See PLBWIN section for descriptions) - Modified the compiler to support a new GUI object named EDITNUMBER and its associated properties. (See PLBWIN section for descriptions) - Changed to allow the TEXT property for a EDITTEXT and STATTEXT object when using a GETPROP or SETPROP instruction. - Modified the TABCONTROL object to support the DOCK property. - Corrected a problem where the reference addresses for Global Array elements were invalid when the 'zc#3' compiler option was used. - Corrected a problem where a compilation error was occurring without cause for the following statement syntax when the 'zc#3' option was used. Example: VARPT VAR @ F2 FORM 2 . TYPE VARPT TO F2 - Corrected a problem where an invalid compilation error was occurring for an ARRAY initialization when a comment existed beyond the last element and the 'zc#3' option was used. - Corrected a problem where the *ZF control did not work with an *DVEDIT or *DVRV control in a KEYIN. This problem was created in release 8.7B. ------------------------------------------------------------------------------- PLBDBUG - Modified the DV BFILE command to detect an open state flag so that an open state can be reported. Please, note that there is no file name or handle information that can be reported for a BFILE variable. The open state flag only indicates that an open function has been completed successfully by a BTRIEVE operation. A close function clears the open state flag in the BFILE variable. - Added EDITNUMBER to the GUI object table. - Corrected a problem where the debugger would hang indefinitely if a single step ( 'T' or F8 ) command was executed and the expression was true. 'STOP IF ( S$CMDLIN = "*" )' ------------------------------------------------------------------------------- PLBDSIGN - Modified the TABCONTROL object to support the DOCK property. - Modified to support new EDITNUMBER object. - Modified for new properties for COMBOBOX object. - Modified for new properties for DATALIST object. - Data entry via the properties editing window can now allow up to a 1000 characters. The limit prior to this change was 100 characters. - Corrected a problem where the position/size of objects that used the ANCHOR property and was placed over a PANEL object could be changed by a FORMLOAD operation. - Corrected a problem where anchored objects did not properly redraw when the parent object was changed resulting in a negative height or width for the anchored object. ------------------------------------------------------------------------------- ADMEQU.INC - Added $ADMCMDLOGMSGLEVEL0, $ADMCMDLOGMSGLEVEL1, and $ADMCMDLOGMSGLEVEL2 command equates for the ADMCOMMAND statement. ------------------------------------------------------------------------------- PLBEQU.INC - Updated the subtype equates to include new object types. - Added new property descriptions for COMBOBOX, DATALIST, EDITNUMBER, and EDITTEXT. ------------------------------------------------------------------------------- PLBMETH.INC- Added new object methods for COMBOBOX, EDITNUMBER, & EDITTEXT. ------------------------------------------------------------------------------- SUNFHSYS.DLL- Corrected a problem where a record in a TXT data file could be changed unexpectedly when the following instruction sequence was executed: 1. A sequential READ of an AFILE/IFILE that gives an OVER flag because the end of file was encountered. 2. The OVER flag is ignored. 3. An UPDATE of the AFILE/IFILE would execute and change a record in the data file unexpectedly. With this correction implemented, then this same sequence of instructions cause an I40 error on the UPDATE instruction. ------------------------------------------------------------------------------- ADMIN - Modified the ADMCOMMAND statement to accept 3 new {command} values to allow information to be logged into the server log file. These commands can be used to store data into the PLBSERVE or the SUNFM server log files. The new {command} values are as follows: $ADMCMDLOGMSGLEVEL0 is a command that causes the {value} data to be stored into the server log file with a logging level 0 used. $ADMCMDLOGMSGLEVEL0 EQU 8 $ADMCMDLOGMSGLEVEL1 is a command that causes the {value} data to be stored into the server log file with a logging level 1 used. $ADMCMDLOGMSGLEVEL1 EQU 9 $ADMCMDLOGMSGLEVEL2 is a command that causes the {value} data to be stored into the server log file with a logging level 2 used. $ADMCMDLOGMSGLEVEL2 EQU 10 ------------------------------------------------------------------------------- SUNIDE - Fixed a problem when saving the editor settings where incorrect font information may be saved. - Fixed a bug that was introduced in 8.7B where the IDE would get stuck in an infinite loop adding bogus sources to the project. (the "OO" bug) - Added module name detection to correct a problem interfacing the editor when the PLB_FNC keyword was defined as mixed. - Corrected a problem where errors that may be reported at the end of the compile may not be detected. - Fixed a bug were labels were not being processed properly while processing the source list file. - Fixed a problem were a project could be added to the recent projects list multiple times if the path was mixed case. - Modified configuration file location to be user specific. The IDE now uses the Windows Application Data folder for them. - Various list file processing optimizations. - Modified the load errors and browse info to support "XE" (errors only/cross reference) list file as well as full source lists. Because a cross reference loads faster, it is now the project settings default compiler option for new projects. - Corrected a bug where if the IDE configured runtime/compiler did not contain an EXE extension, the project specified ini file could be spliced into the middle of the command line. ------------------------------------------------------------------------------- WATCH - Corrected computation of client and server version numbers for display. - Added Trap Object logic to handle communication failures gracefully. - Modified the message window to move the focus as messages are added. Date: 11-24-2003 Subject: Patch RELEASE 8.7D Runtime Files Included you will find the patch release of: PLBSERVE 8.7D 24 Nov 2003 8.7.0140 PLBCLIENT 8.7D 24 Nov 2003 8.7.0140 PLBCLICON 8.7D 24 Nov 2003 8.7.0140 PLBWIN 8.7D 24 Nov 2003 8.7.0140 PLBDSIGN 8.7D 24 Nov 2003 8.7.0140 SUNFYSYS.DLL 8.7D 24 Nov 2003 8.7.0140 SUNFHDLL.DLL 8.7D 24 Nov 2003 8.7.0140 SUNFHDLL.LIB 8.7D 24 Nov 2003 PLBCMP 8.7D 24 Nov 2003 PLBDBUG 8.7D 24 Nov 2003 SUNIDE 8.7D 24 Nov 2003 EDITOR 8.7D 24 Nov 2003 *============================================================================== Notes for DOCUMENTATION: - There were multiple PL/B statements that could generate I64 and I65 errors. The following errors have been redefined and should be documented for the 8.7 release. I64 - Invalid Data Record Number for Isam DELETE. I65 - Invalid record number for Isam WRITE/INSERT. This error indicates a problem in the ISI file Deleted Data Record (DDR) sectors. Subcode: 30 - Invalid DDR record pointer value. 31 - Invalid number of pointers in current DDR sector. 32 - Invalid number of pointers in next DDR sector. I33 - Error processing SNDFILE. Subcode: 40 - Invalid for Sound File. 41 - Not enough memory to play sound. I34 - Update file position is invalid. I35 - Update of a compressed file is not allowed. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Modified the forced shutdown command 'plbserve -f' to wait a maximum of 60 seconds before terminating the main process. This prevents the main task from hanging indefinitely in this case. - Made modifications to allow the Admin Soft Shutdown command to be recognized in a more timely manner. - Added a new keyword named 'PLBCS_DEFAULTCWD={path}' that can be used to establish the default working directory for the main Application Server process when the PLBSERVE server is started. If this keyword is specified and the 'PLB_CURDIR' keyword is NOT specified, then the PLBCS_DEFAULTCWD {path} is used as the initial setting for the current directory for each child thread/process that is executed for the Application Server. - Corrected a problem where the runtime did not send keep alive messages to a SUNFM file manager when a program was setting in a KEYIN or a PL/B Modal Dialog for an extended period of time. If the extended time was longer than the timeout identified for the FM_KEEPALIVE, then the SUNFM child would terminate prematurely. This would cause an unexpected I81 error for the next operation on a file opened as a managed file. - A problem was corrected for an admin ADMCOMMAND Hard Terminate operation that would cause a 'plbserve -t' or a 'plbserve -f' request to fail to terminate the server. See ADMIN below. ------------------------------------------------------------------------------- PLBCLIENT- Added a new command line option named '/deb' or '-deb' for the client. This option invokes debug logging for PLBCLIENT that can help resolve execution issues at the client workstation. When this option is specified, then a log file is created in the same directory location where the PLBCLIENT module is located. The log file has the same name as the client module being executed with an extension of '.log'. - Modified the command line option processing to correct a problem where an option was ignored when it did not have a trailing blank character. - Modified the EVENTWAIT processing to detect server error messages and then exit/abort in a more timely manner. - Corrected a problem where the rightmost column was not being repainted for displayed data on the MAINWINDOW when the window was being restored. - Corrected a problem where PLBCLIENT could become non-responsive that would prevent communications with the Application Server. This problem might occur if the client user interface was not used for a long period of time. ------------------------------------------------------------------------------- PLBSERVE - Implemented the logic to allow the client and Windows application PLBCLIENT server to detect errors or a situation where the client/server processes have not communicated for an extended period of time. If one of these cases is detected, then the client and application server tasks close the socket connection that is erring and attempt to reconnect with a new socket connection. If a new connection is established, then the PL/B program continues to execute without interruption. Otherwise, the connection and the PL/B program are terminated. When a reconnection process is initiated and completed, then messages are posted to the log file to identify that a reconnection was performed. The lack of communications situation is determined based on the period of time that a tasks does not receive a message. The default timeout periods are set to be 130 seconds for the Application Server and 300 seconds for the Client task. These default timeout periods can be changed by a keyword named 'PLBCS_RECVTIMEOUT={seconds}'. If the {seconds} value is set to be ZERO, then the receive timeout is disabled and the task waits for an indeterminate time or for an error to be detected. ------------------------------------------------------------------------------- PLBWIN - Corrected a problem where a COPYFILE would give an invalid PLBSERVE error code when a file could not be found or created because PLB (UNIX) a SUNFM file manager was not available. - Corrected a problem where a READLK instruction was not leaving a record lock set if it followed an Isam READ key instruction that did not find a record. This problem would occur when both the READ and READLK operations used the same IFILE variable that had been opened in a MANUAL record-locking mode. - Modified the DELETE FILE operation to insure that the OVER flag is always cleared as documented. ------------------------------------------------------------------------------- PLBWIN - Modified the SELECTALL property for an EDITNUMBER to execute in the same manner as the EDITTEXT object. This means that all of the data in the EDITNUMBER object is selected when a mouse click action to the object is executed and the SELECTALL property is set TRUE. - Modified the CREATE for an EDITNUMBER object to use the default values of 5 integer digits and 0 decimal digits when the create operation is executed and neither the INTEGERDIGIT nor the DECIMALDIGIT properties are specified. - Added a new property for the EDITNUMBER object named 'DPI=dnumnvar'. The DPI (Decimal Point Implied) property allows data entry into an EDITNUMBER object that specifies a non-zero value for the DECIMALDIGITS property without requiring the input of a decimal point. - Modified the value associated with the PLB_BGFG={[l]mn} to support an optional [l] high order digit. If the [l] digit is non-zero, then the PLBWIN runtime will set the SETMODE *LTGRAY mode to be ON for the MAINWINDOW initialization. This corrects a problem where a DISPLAY *ES was not painting the MAINWINDOW gray when the PLB_BGFG was set to Yellow and the SETMODE *LTGRAY was set to be ON in a program. Example PLBWIN.INI Keyword: PLB_BGFG=160 The hex value of 0x100 digit of the hex value of 0x160 indicates that the MAINWINDOW is to be initialized with the SETMODE *LTGRAY set to ON. This will cause a MAINWINDOW to be create with a GRAY background automatically. - Added a new keyword named 'PLBAS_DEFAULTCWD={path}' that can be used to establish the default working directory for the main Automation Server process. If the PLBAS_DEFAULTCWD keyword is specified and the 'PLB_CURDIR' keyword is NOT specified, then the PLBCS_DEFAULTCWD {path} is used as the initial setting for the current directory for each child thread that is executed for the Automation Server. - Corrected a problem where the GetText method for a COMBOBOX object was not supporting an *Index parameter as documented. The GetText method have been changed to support an optional *Index parameter. Please note the following: 1. If the *Index value is not specified, then the GetText method retrieves the currently selected COMBOBOX item. 2. If the *Index value is specified, then it is a zero based index used to retrieve the text for a COMBOBOX item. - Corrected a problem where the ALLOWMINUS property was not being set when a CREATE for an EDITNUMBER object was executed. - Corrected a problem where the locale decimal was not being used for a SETITEM operation when the PLB_LOCALE=ON keyword was being used. - Corrected a problem where a PrintForm method for a WINDOW object might not work properly. - Corrected a problem where an ActiveX control was not using a PANEL object as its parent window. This problem was causing the ActiveX control to be misplaced on a form when it was intended to be placed on top of a PANEL object. - Corrected a problem where the Windows OS could change the memory location of the UET environment pointer table when a SETMODE *ENV operation was executed. If the Windows OS changed the UET pointer table, then this would cause a GPF if a program attempted to executed a CLOCK ENV operation. - Corrected a problem where a SETITEM instruction did not change the focus to a RADIO button in a group when the state of the RADIO button was set to be ON. This caused unexpected actions when buttons were click in a RADIO button group. - Corrected a problem where a GETPROP of an AUTOMATION property into a FORM variable might not work. This problem was intermittent. This correction corrects a problem where the FONT size for the editor in the SUNIDE was failing. - Corrected a GPF error that would occur when a TIMER object value was set to be zero. - Corrected a problem where an IBEAM cursor was not appearing over an EDITTEXT object when its parent was a PANEL object. - Corrected a problem where an EXECUTE of '!dir' did not work. - Corrected a problem that started occurring with changes made in release 8.7B where the runtime did not send keepalive messages to a SUNFM file manager when a program was setting in a KEYIN, PAUSE, or a PL/B Modal Dialog for an extended period of time. If the extended time was longer than the timeout identified for the FM_KEEPALIVE, then the SUNFM child would terminate prematurely. This would cause an unexpected I81 error for the next operation on a file opened as a managed file. - Corrected a problem where the top level menu items for a MDI Client form would have unexpected items appear/disappear when ACTIVATE/DEACTIVATE operations were performed and there was an active MDI Child window that was in a maximized state. - Corrected a S10 problem for a SPLOPEN using a '-' device name and the mode is set to 'R' raw mode. - Corrected a problem where a COMBOBOX object would not become visible if it existed on a PLFORM and a 'SETPROP {col},VISIBLE=1' was executed with {col} referencing the PLFORM collection label. - Corrected a problem where the CTRL+TAB key sequence that caused a TABCONTROL tab label change was not generating the user CLICK and CHANGE events. These events are now being generated as expected. - Corrected a problem where the data variable for a DATA property used in a CREATE for a DATALIST was causing the PL/B program data variable ';' characters to be changed to NULL characters. - Corrected a problem where a GPF could occur when a GETPROP for the PASSWORDCHAR property was executed. - Modified the LISTVIEW line item color support to avoid a buffer conflict with the GETFNAME instruction. This change is to work around a Windows OS problem for some Windows OS versions that was causing invalid GETFNAME results when a LISTVIEW with a color column was being used. ------------------------------------------------------------------------------- PLB (UNIX)- Modified the COMCHECK instruction to provide more reliable timeout checking. - Corrected a problem where a KEYIN for a Linux PowerPC runtime would hang. - Corrected a problem where a program compiled using the '-ZC#3' compatibility option was prematurely terminating when the program included an array variable and it was executed on a Forward Byte Ordered (Big-Endian) system. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to output the compile command line into the Window Titlebar when using a GUI runtime. - Modified the compiler to force an *RV control when an *EDIT control is detected in a KEYIN and the program is being compiled with the '-ZC#3' compatibility option. - Modified the CHECKBOX and RADIO objects to support the VALUE property. In these cases, the VALUE property is only supported as a GETPROP and SETPROP property. - Corrected a problem where the compiler did not give a compilation error when a RECORD pointer reference was specified with a record member designation. The compiler gives an expected syntax error in this case. Example: RecPtr RECORD ^ X INIT "X" . DISPLAY RecPtr.X //Compiler Error Expected! - Corrected a problem where the compiler would hang in an infinite loop. This problem occurred when the replacement string was the same as the destination string for a DEFINE. ------------------------------------------------------------------------------- PLBDBUG - Corrected a problem where the debugger could hang if a DSCNCT, STOP, or SHUTDOWN instruction was encountered while executing a STEPOVER or STEPOUT command. ------------------------------------------------------------------------------- PLBDSIGN - Added DPI property for EDITNUMBER object. This property is referenced as DecimalImplied in the designer property window. ------------------------------------------------------------------------------- PXLAT - Corrected a problem where PXLAT did not properly process a PLC program file when the program contained an array variable and it was compiled with the '-zc#3' compiler option. ------------------------------------------------------------------------------- SUNIDE - Fixed a bug where if a file with an unknown extension is opened, the full path to the file may not be used resulting in the potential of opening the same file multiple times. - Fixed an untrapped I05 error that could occur while loading a new project. - Fixed a problem where the multi-select feature of the open file dialog was not implamented. - Corrected an ambiguious error regarding printing. - Corrected a bug where the IDE did not remember program spacific INI file settings from the command line prompt. - Corrected a problem where the ide was not properly saving the restored windowed posittion if it is closed while maximized. - Corrected a problem where warnings and errors are reported twice. - Corrected a problem where end of compile errors (undefined execution lables) were reported but not counted as errors. - Corrected a problem with processing cross reference listings that had different data alignment as a result of various compiler options. - Fixed a problem where a variable was to small to hold the full path and filename on XP systems. - Fixed a bug where a temporary variable was not a global and needed to be to be accessed between load instances of this module. - Modified Unexpected Error dialog to report IDE version. - Addressed an issue where the codesence control did not always fill the window.(added use of the DOCK property). ------------------------------------------------------------------------------- SUNFHSYS.DLL- Modified the Isam WRITE and INSERT operations to verify ISI deleted data record sector. This change has been made to avoid situations where an invalid ISI data file structure could cause indeterminate operations that over write valid text data. An I65 with an appropriate subcode occurs if a bad DDR sector is detected. - Modified the I64 error to be an I34 error for a DELETE FILE operation. - Modified the I65 error to be an I35 error for an UPDATE FILE operation. - Corrected a problem where a READLK instruction was not leaving a record lock set if it followed an Isam READ key instruction that did not find a record. This problem would occur when both the READ and READLK operations used the same IFILE variable that had been opened in a MANUAL record-locking mode. ------------------------------------------------------------------------------- ADMIN - Modified the runtime to execute a SHUTDOWN instruction when an ADMCOMMAND to execute a Soft Terminate command. This should cause all files and program resources to released and closed. *WARNING*- If the ADMCOMMAND is used to execute a Hard Terminate command, then thread/process resources and files are not released or closed. The resources and files are only released when the main server for PLBSERVE/SUNFM is terminated. The Hard Terminate command performs an OS operation that directly kills a child thread/process. The Hard Terminate command should only be used in special situations where a child thread/process must be terminated immediately and the server Administrator expects to terminate the main server task. - Corrected a problem where an ADMCOMMAND did not decrement the child task count when a Hard Terminate command was executed. This would cause a 'plbserve -t' or 'plbserve -f' command to hang indefinitely after a Hard Terminate command was used. - Modified the AIT (Admin Interface Task) to prevent a 100% CPU problem that might occur when received message failures are detected. Date: 01-06-2004 Subject: Patch RELEASE 8.7E Runtime Files Included you will find the patch release of: PLBSERVE 8.7E 06 Jan 2004 8.7.0150 PLBCLIENT 8.7E 06 Jan 2004 8.7.0150 PLBCLICON 8.7E 06 Jan 2004 8.7.0150 PLBWIN 8.7E 06 Jan 2004 8.7.0150 PLBDSIGN 8.7E 06 Jan 2004 8.7.0150 SUNFYSYS.DLL 8.7E 06 Jan 2004 8.7.0150 SUNFHDLL.DLL 8.7E 06 Jan 2004 8.7.0150 SUNFHDLL.LIB 8.7E 06 Jan 2004 PLBCMP 8.7E 06 Jan 2004 SUNIDE 8.7E 06 Jan 2004 SUNSORT 8.7E 06 Jan 2004 SUNSRTNT 8.7E 06 Jan 2004 8.7.0150 ODSBAC32.DLL 8.7E 06 Jan 2004 SETGUID 8.7E 06 Jan 2004 8.7.0150 SUNMOD 8.7E 06 Jan 2004 8.7.0150 MAKEDEF 8.7E 06 Jan 2004 8.7.0150 PLBWSEC.DLL 8.7E 06 Jan 2004 8.7.0150 PLBWODBC.DLL 8.7E 06 Jan 2004 8.7.0150 EMBEDINI 8.7E 06 Jan 2004 MAKECON 8.7E 06 Jan 2004 MAKECLI 8.7E 06 Jan 2004 PLBEQU.INC 8.7D 24 Nov 2003 *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Modified the log output to report the PORT NUMBER as an unsigned decimal value. - Corrected a problem where the FGCOLOR and BGCOLOR controls for a PRTPAGE instruction were not being sent to the client. ------------------------------------------------------------------------------- PLBCLIENT- Corrected a GPF error caused when a PANEL object was specified as the parent window for a FORMLOAD operation. ------------------------------------------------------------------------------- PLBWIN - Modified the Isam PREP key specifications to accept a key PLBSERVE part that specified as a single starting key location without PLB (UNIX) having a terminating key location. - Modified the FILEPI to waste some time when all of the files in the file list could not be locked for the filepi operation. This change corrects a CPU % usage problem when a large number of tasks were waiting for a FILEPI lock to be granted. - Corrected a problem where a FILEPI deadlock situation might occur when two different files were specified in different programs in different file list order. Example: FILE1 FILE FILE2 FILE . . FILEPI 99;FILE1,FILE2 //Used in Program 1 . . FILEPI 99;FILE2,FILE1 //Used in Program 2 - Corrected a problem where a fractional *T value for a COMREAD and COMWRITE was causing an invalid timeout that was shorter than expected. ------------------------------------------------------------------------------- PLBWIN - In release 8.7D, a correction was made for a SETITEM operation for a RADIO button group that caused the current focus to be changed. This focus change was being made unconditionally and was a problem for some applications. For the 8.7E release the SETITEM operation for a RADIO button group is being modified to only change the focus if one of the RADIO buttons in the group currently has the focus. Otherwise, the SETITEM operation does not change the focus. - Modified the runtime to minimize repaint border flickering for EDITTEXT objects that overlap each other and exist on a TABCONTROL object. - Modified the runtime to detect an Extended Bitmap Format that is identified as a BITFIELD compression type for a '.bmp' file. This corrects a problem where a 32-bit bitmap was not being displayed for a PICT object. - Corrected a problem where a buddy control for an EDITNUMBER was not drawn properly when the EDITNUMBER existed in a COLLECTION and a SETPROP VISIBLE operation for the COLLECTION was executed. Also, this same operation was causing a small rectangle to be drawn in the upper left corner of the client area of a form. This small rectangle is no longer being drawn with this correction. - Corrected a GPF error that might occur when a FORMLOAD was executed for a PLF format that contained a STATUSBAR or TOOLBAR object that existed as the last object in the form. This problem was very intermittent and would only occur when memory was allocated in a certain manner. - Corrected a problem where a STATTEXT tool tip would not become visible when the parent window for the STATTEXT object was a PANEL object. - Corrected a problem where a function key was not being recognized by a KEYIN *T0 operation. ------------------------------------------------------------------------------- PLBWCEPK - Corrected a COMBOBOX WIDTH resizing problem where the combobox PLBWCEPT line items could not be accessed after the WIDTH property was PLBWCEHH was changed. - Corrected a problem where the Locale Settings were not being used for the CE runtimes. This correction allows the EDITTEXT decimal point to be substituted with a Locale character when using the DECIMAL edit type property. - Corrected a problem where the text output to a STATUSBAR panel was invalid for the CE runtimes. ------------------------------------------------------------------------------- PLBWCEPK - The Windows CE runtimes do not support a 'Right Mouse Click'. However, the Pocket PC Windows CE OS does support a concept called 'Context Menu Gesture'. The 'Context Menu Gesture' means that a user is holding the stylus at the same point on the CE device screen for an extended period of time. Specialized logic has been added to the 8.7Eb PLBWCEPK runtime to detect the 'Context Menu Gesture'. When a 'Context Menu Gesture' is detected for a PL/B object, then a right mouse action is simulated. Please note that a 'Context Menu Gesture' is not supported for the Palm Top or Handle Held Windows CE devices. Also, note that I have been unable to determine any Microsoft documentation that defines the use of ALT key sequencing to produce a mouse right click action. ------------------------------------------------------------------------------- PLB (UNIX)- Corrected a problem for UNIX ODBC support that could cause a SEGV error when an ODBC error was being reported. - Corrected a problem for UNIX Postgres SQL where extended error data was being reported incorrectly. ------------------------------------------------------------------------------- PLBCMP - Modified the ZQ option output to display at the home down screen position. This corrects display problems under Unix. - Corrected a problem the pcode for a NFORMAT statement was invalid when an expression was used for both the whole and fraction operand values. This was causing the destination numeric variable to be formatted with an invalid number of whole digits. - Corrected a problem where the first line in a compiler listing output was too long and the date/time could not be printed. - Corrected a MACRO parameter problem where '&i' and '&#' were being used the same as the internal symbol reference of '&id'. - Corrected a problem where the compiler was allowing an EQU as a parameter in a CALL USING list. This would cause invalid PCODE that could cause a GPF in a PL/B runtime. A compilation error is now given if an EQU is specified in a CALL USING list. ------------------------------------------------------------------------------- PLBDSIGN - Corrected a problem where the BUTTONHEIGHT and BUTTONWIDTH properties were not being save and restored when the AUTOSIZE property for a TOOLBAR was set to FALSE. The BUTTONHEIGHT and BUTTONWIDTH properties are now saved and restored as expected. - Corrected a problem where a change to the ALIGNMENT property for an EDITNUMBER object was not showing immediately. ------------------------------------------------------------------------------- SUNFHSYS.DLL- Corrected a problem where a PREP for an IFILE using a key specification could cause a memory leak. ------------------------------------------------------------------------------- ADMIN - Modified the log output to report the PORT NUMBER as an unsigned decimal value. - Corrected a GPF problem that would occur when an ADMLOGON operation was performed to log on to an ADMIN service executing on a Forward Byte Order platform. ------------------------------------------------------------------------------- SUNIDE - Fixed a bug that was introduced in the 8.7C where the editor was checking file attributes based on a timer. After a file was closed, the timer was not deactivated. - Fixed a bug where the editor would was not correctly checking file timestamps to detect changes outside of SUNIDE. - Modified the editor to only check timestamp changes if the file is opened in read only mode. - Corrected a problem where a blank line could be inserted in the code during file load. - Corrected a problem where the expanded month from the date mask could be interpreted as part of the date mask. - Fixed Clean logic to only delete files in the specified output paths so to not conflict with production files that may be on the PLB_PATH. - Fixed a bug in list file processing to ignore list files that do not include either the L or the X options. - Fixed a problem where page headers in a list file cross reference could be treated as errors. - Added editor module version checking on loading each new instance of the editor. This helps to verify the correct running of the program when you have copied SUNIDE to other directories and they did not have an update applied when an update was released. - Fixed a problem where the project's ini file was not being loaded when a new project was created. - Fixed a bug where the PLBCMP_EXT in the projects ini file was not being used. - Fixed a bug where the PLBCMP_PRT keyword in the projects ini file was not being used. - Fixed a bug where the PLBCMP_OUT keyword in the projects ini file was not being used. - Fixed a bug where the project ini file may not be used when a program is executed. Date: 12-20-2004 Subject: Patch RELEASE 8.7F Runtime Files Included you will find the patch release of: PLBSERVE 8.7F 20 Dec 2004 8.7.0160 PLBCLIENT 8.7F 20 Dec 2004 8.7.0160 PLBCLICON 8.7F 20 Dec 2004 8.7.0160 PLBWIN 8.7F 20 Dec 2004 8.7.0160 ODSBAC32.DLL 8.7F 20 Dec 2004 SUNFYSYS.DLL 8.7F 20 Dec 2004 8.7.0160 SUNFHDLL.DLL 8.7F 20 Dec 2004 8.7.0160 SUNFHDLL.LIB 8.7F 20 Dec 2004 PLBCMP 8.7F 20 Dec 2004 *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - The Application Server Logon process has been modified to always log the TCP/IP address of the peer client that has performed a logon. The provides better tracking of offending client logons. - Modified the logon Child Start log messages to provide the version of client accessing the Application Server. This should help to identify issues caused by older/newer client versions accessing a given Application Server. - Modified the Application Server to support a logging output level 1 that can be set with the ADMIN_LOGLEVEL keyword. When the keyword is set to a value of 1, then additional data is logged that includes the Client Type, the Client Computer Name, the Client User Name, and information about untrapped programs errors that occur in a user PL/B program. - Modified Windows GPF crash handler data output to give additional runtime context state data to help identify the runtime logic that was being executed when a GPF error occurs. - Modified the main logon process for the Application Server to eliminate problems that can caused by reception of bad/invalid data messages. Prior releases of PLBSERVE could hang or terminate prematurely if bad/invalid logon messages were received. The bad logon messages might occur under the following situations: 1. If the Application Server logon connection was accessed directly from the Internet. Disruptive Internet applications can actually probe the Internet connection that the Application Server is using. This type of access could cause indeterminate problems. Changes have been implemented for all Application Server received messages to validate the structure and integrity of the messages before they are accepted for use. Any invalid messages that are received can result in immediate termination of a connection. 2. It was also possible that the Application Server Logon could hang indefinitely if a logon action occurred without receiving any client logon data message. Changes have been implemented for the Application Server processing where the logon data message must be received by the Application Server Logon process within 10 seconds from the initial logon action. If the logon data message is not received within 10 seconds, then the logon connection is terminated immediately. - Modified the Windows PLBSERVE GPF crash handlers to eliminate the possibility of secondary GPF errors that could prematurely hand the hang/terminate the Application Server Logon process. - If the Windows PLBSERVE Logon process should ever encounter a GPF error, then the Logon crash handler is implemented to keep the main PLBSERVE process active to allow current users to continue to execute their programs. NO new users can logon to Application Server while it is in this state. However, a 2nd instance of the PLBSERVE Application Server CAN BE loaded to allow new users to logon while the previous PLBSERVE instance is in the GPF indeterminate state. Note, that the second instance of a log file is created for the 2nd load instance of the Application Server. - The PLBCS_LOGFILE can have the string '@d' embedded into the specified log file name. The '@d' string is replace with the 'YYMMDD' date representation. This causes a new log file to be started for every day that an Application Server is started. Format: PLBCS_LOGFILE=lt@d.log This creates a log file with a name 'lt041215.log'. - Corrected problems with the Windows PLBSERVE GPF crash handler processing that could prematurely terminate the Application Server client threads. The Windows PLBSERVE GPF crash handler processing has been changed to eliminate any interactions between logon processing GPF problems and PL/B program GPF problems. - Corrected a problem that was preventing high intensity colors from being sent to the client. - Corrected a problem where an IMPLODE instruction could erase the instruction cache. This could cause a program to execute in an indeterminate manners because cached instructions were being lost. ------------------------------------------------------------------------------- PLBCLIENT- Corrected a problem that was preventing the client module from being able to reconnect to the server when a client user selected a retry command from an error dialog. ------------------------------------------------------------------------------- PLBCLICON- Corrected a problem that prevented high intensity colors from working as expected for the DISPLAY *COLOR control. This problem can only be corrected when using an 8.7F or 9.0C PLBSERVE. ------------------------------------------------------------------------------- PLBSERVE - A PL/B U99 error has been added. This error should only occur at a PLBCLIENT a PLBCLIENT that is connected to a PLBSERVE server. This error indicates that a PL/B program has been terminated by a GPF error at the server. ------------------------------------------------------------------------------- PLBCON - Modified the console runtime to provide a workaround to a Windows 95/98/ME OS problem where the CAPSLOCK key control did not work. This change is to have the console runtime detect the CAPSLOCK state by evaluating keyed data. ------------------------------------------------------------------------------- PLBWCEPK - Corrected a FORMLOAD problem where a modeless or modal window size PLBWCEPT was being set to zero when executing under Windows CE. PLBWCEHH - Corrected a problem where there were no PL/B user events being generated/processed for a FLOATMENU object when executing under Windows CE. ------------------------------------------------------------------------------- PLB (UNIX)- Added three new controls for the DISPLAY/KEYIN instructions. These controls are named *EOFON, *EOFOFF, and *EOFFLAG. These controls can be set or cleared in either a DISPLAY or KEYIN instruction. However, they are only used in a KEYIN instruction to detect an error when the standard input has failed. *EOFON - When this control is executed, then a program SHUTDOWN operation is executed when a KEYIN detects that the standard input has failed. This control remains in affect until an *EOFOFF is executed. *EOFFLAG - When this control is executed, then a program KEYIN instruction sets the EQUAL flag when a KEYIN detects that the standard input has failed. This control remains in affect until an *EOFOFF is executed. When this control is in affect, then the EQUAL flag is automatically cleared when a KEYIN instruction is executed. *EOFOFF - When this control is executed, then the *EOFON or the *EOFFLAG control is canceled and the KEYIN instruction executes without detecting that the standard input has failed. Note: 1. The *EOFOFF and *EOFFLAG modes are mutually exclusive. When one mode is activated, then the other mode is automatically canceled. The *EOFOFF must be used to cancel either mode. 2. If these controls are used in a program, then the application program must be aware that the KEYIN now affects the EQUAL flag. 3. The implementation of these controls is to address a situation where a program continued to execute after a Telnet client session was terminated prematurely. ------------------------------------------------------------------------------- PLBCMP - Modified to support *EOFOFF, *EOFFLAG, *EOFON controls in a DISPLAY or KEYIN instruction. See PLB(UNIX) section for description. ------------------------------------------------------------------------------- ODSBAC32.DLL- Corrected a problem where the ODBC driver was using the wrong locking range when accessing the Isam/Aam data files. ------------------------------------------------------------------------------- SUNFHDLL.DLL- Updated to support ODSBAC32 changes. ------------------------------------------------------------------------------- ADMIN - Modified the main logon process for the Admin Services to eliminate problems that can caused by reception of bad/invalid data messages. Prior releases of ADMIN Services could hang/terminate prematurely if bad/invalid logon messages were received. The type changes that were made for Admin Services are the same as described for the Application Server above. - Modified the Windows Admin Service GPF crash handlers to eliminate the possibility of secondary GPF errors that could prematurely hang the server processes that interface with the Admin Services. -------------------------------------------------------------------------------