Date: 12-01-2008 Subject: PATCH RELEASE 9.3 Runtime Files These release notes pertain to the following programs or files: EMBEDINI 9.3 01 Dec 2008 9,3,0,500 MAKECLI 9.3 01 Dec 2008 9,3,0,500 MAKECON 9.3 01 Dec 2008 9,3,0,500 MAKEDEF 9.3 01 Dec 2008 9,3,0,500 MAKEMFD 9.3 01 Dec 2008 9,3,0,500 PLBCLI 9.3 01 Dec 2008 9,3,0,600 PLBCLICON 9.3 01 Dec 2008 9,3,0,500 PLBCLIENT 9.3 01 Dec 2008 9,3,0,500 PLBCLINET 9.3 01 Dec 2008 9,3,0,500 PLBCON 9.3 01 Dec 2008 9,3,0,500 PLBDSIGN 9.3 01 Dec 2008 9,3,0,500 PLBNET 9.3 01 Dec 2008 9,3,0,500 PLBRUN 9.3 01 Dec 2008 9,3,0,600 PLBSERVE 9.3 01 Dec 2008 9,3,0,500 PLBSERVET 9.3 01 Dec 2008 9,3,0,500 (Threaded Server) PLBWIN 9.3 01 Dec 2008 9,3,0,500 SUNAAMDX 9.3 01 Dec 2008 9,3,0,500 SETGUID 9.3 01 Dec 2008 9,3,0,500 SUNINDEX 9.3 01 Dec 2008 9,3,0,500 SUNLS 9.3 01 Dec 2008 9,3,0,500 (New) SUNMOD 9.3 01 Dec 2008 9,3,0,500 SUNSORT 9.3 01 Dec 2008 9,3,0,500 ODSBAC32.DLL 9.3 01 Dec 2008 PLBWSEC.DLL 9.3 01 Dec 2008 9,3,0,500 SA_DLL32.DLL 9.3 01 Dec 2008 9,3,0,500 SUNWADO.DLL 9.3 01 Dec 2008 9,3,0,500 SUNWODBC.DLL 9.3 01 Dec 2008 9,3,0,500 SUNWMSQL.DLL 9.3 01 Dec 2008 9,3,0,500 SUNWSRV.DLL 9.3 01 Dec 2008 9,3,0,500 PLBCMP 9.3 01 Dec 2008 PLBDBUG 9.3 01 Dec 2008 PLBEQU.INC 9.3 01 Dec 2008 ADMEQU.INC 9.3 01 Dec 2008 PLBMETH.INC 9.3 01 Dec 2008 DBGIFACE.PLC 9.3 01 Dec 2008 DESIGNER.PLC 9.3 01 Dec 2008 SUNIDE.PLC 9.3 01 Dec 2008 SUNLIST.PLC 9.3 01 Dec 2008 WATCH.PLC 9.3 01 Dec 2008 SUNCSENC.OCX 9.3 01 Dec 2008 *============================================================================== Notes for some NEW Items: - Sunbelt License Server. *============================================================================== Notes for DOCUMENTATION: - Add the following note (11.) to the GETPROP instruction: 11. When any property has a destination variable that is a GUI object, then the destination GUI object must not be created. Otherwise, the destination GUI object is NOT replaced and it remains unchanged. This is the GETPROP instruction behavior since the original implementation." - Add the following note (9.) to the IMAGELIST ADDBMP method: 9. A {bmp} resource number value of zero causes the imagelist picture to be loaded from the clipboard." - Add the following note (7.) to the IMAGELIST LoadStdToolBitmap method: 7. The execution of the LoadStdToolBitmap method causes the currently created IMAGELIST to be destroyed and replaced with the default images and specialized images from the runtime resources. After the LoadStdToolBitmap method has successfully executed, the newly created IMAGELIST object has the properties implicitly set by the method as follows: MASKCOLOR=0xC0C0C0 USECOLORMASK=1 USEMASK=1 IMAGEHEIGHT=16 IMAGEWIDTH=16" - Change the USEMASK property for the IMAGELIST object to read as follows: The USEMASK property determines whether an IMAGELIST object is to be created to support an image masking or not. When the USEMASK property is set ON, then it is possible to apply an image mask using the COLORMASK COLORMASK and USECOLORMASK properties to create transparent areas when an image is added to the IMAGELIST object. When an IMAGELIST is created with the USEMASK set to OFF, then the IMAGELIST object can not support image masking and using the COLORMASK and USECOLORMASK properties to apply a color mask causes the images to have black areas. The property uses the following format:" - Modify the note (2.) for the USECOLORMASK property as follows: 2. When a masked image is drawn, the mask color specified by the COLORMASK property is combined with the image when the USECOLORMASK property is set to ON. This operation can only create transparent areas for an image if the USEMASK property was set ON when an IMAGELIST object is created. Otherwise, applying an image mask can cause black areas to appear in an image." - Modify the AUTOSCALE property for the PICT object to remove the $NONE value and identify the $SCALEBEST as the default value. Value Keyword Picture scaling is ... 1 $SCALEBEST best fit. (default) 2 $SCALEHORZ horizontal. 3 $SCALENONE disabled. (same as RESIZE=$OFF) 4 $SCALEVERT vertical. - Modify the TYPE instruction to include the following object type values for a NETOBJECT and NETCONTROL. Data Type Sunbelt SWDBC NETOBJECT 14128 (0x3730) 16 NETCONTROL 14384 (0x3830) 16 *============================================================================== The following files have been changed as outlined below: ------------------------------------------------------------------------------- PLBSERVE - Modified the Application Server to allow the DISPLAY/KEYIN *DSPMODE and *KEYMODE controls to take affect at the client. The *DSPMODE/*KEYMODE mode values of 0 and 1 are supported. A mode value of 1 causes the client (Plbclient, Plbclicon, or Plbclinet) to use stdin and/or stdout for DISPLAY/KEYIN IO. The changes as described can allow the plb clients to be used for a web server cgi interface. - Modified to support the License Server. See the SUNLS section for details. - Corrected a problem where the PAUSE instruction was not being ignored when an event was pending using PLBSERVE. - Corrected a problem where the PAUSE instruction did not detect when the end user program clicks the main window close button. - Corrected a problem where the CHECKEVENT instruction was not update the ARG1 to ARG10 parameters when an event was dispatched. ------------------------------------------------------------------------------- PLBSERVE(WINDOWS) - Corrected a problem where the ADMGETINFO instruction was only returning zero for the $ADMITEMSRVVER server version. This problem started with release 9.2 of the Windows Application Server that is processed based. - Corrected a problem where PLBSERVE was not detecting a NT Service stop command when the PLBCS_HOSTNAME ip address was '0.0.0.0'. ------------------------------------------------------------------------------- PLBCLICON - Modified the console client to allow the stdin/stdout to be redirected for DISPLAY/KEYIN IO with or without the use of the DISPLAY/KEYIN '*DSPMODE=1' and '*KEYMODE=1' controls. Prior to this change the redirected IO did not work for the PLBCLICON client. ------------------------------------------------------------------------------- PLBCLIENT, PLBCLICON, PLBCLINET - Modified the clients to allow the DISPLAY/KEYIN '*DSPMODE=1' and '*KEYMODE=1' controls to take affect and be used by the client to redirect DISPLAY/KEYIN IO to stdin/stdout. This ability to redirect stdin/stdout at the client requires that both the Plbserve and client must be a 9.3 version or later. These changes allow a client to be used by a Web Server using the CGI interface. - Added a new command line option named '-quiet' for the clients. This command line option prevents all client administrative data displays at the client workstation. In this case, a quiet error log file named 'plbclient_quiet.log', 'plbclicon_quiet.log', or 'plbclinet_quiet.log' is created in the same directory where the executable is located. Any error messages generated by the client is stored into the quiet error log file. The '-quiet' command line option is required to eliminate any unwanted display data when using a Web Server CGI interface. - Modified to remove trailing blanks from the data for embedded keywords. ------------------------------------------------------------------------------- PLBCLIENT, PLBCLINET - NT Service support has been added for the client modules. The client module's command line options have been change to include the following: Command Line Option: -delete - Remove NT Service. -idefault - Install NT Service using default OS settings. -ilocal - Install NT Service using 'NT AUTHORITY\\LocalService'. -inetwork - Install NT Service using 'NT AUTHORITY\\NetworkService'. -iuser=name;pass - Install NT Service using specified username/password. - New keywords have been added for the client modules to support NT Service recovery configuration settings: PLBCS_SERVICE_FAIL1={0, 1, or 2} - First failure action. 0 - Take no action (default) 1 - Restart the service 2 - Reboot the computer PLBCS_SERVICE_FAIL2={0, 1, or 2} - Second failure action. 0 - Take no action (default) 1 - Restart the service 2 - Reboot the computer PLBCS_SERVICE_FAIL3={0, 1, or 2} - Subsequent failures action. 0 - Take no action (default) 1 - Restart the service 2 - Reboot the computer Note for PLBCS_SERVICE_FAILx: If the service controller handles the SC_ACTION_REBOOT action, the caller must have the SE_SHUTDOWN_NAME privilege. For more information, see Running with Special Privileges in the Microsoft documentation. PLBCS_SERVICE_DELAY1 = 0 <= {min} <= 60 - Time to wait before taking action for first failure. PLBCS_SERVICE_DELAY2 = 0 <= {min} <= 60 - Time to wait before taking action for Second failure. PLBCS_SERVICE_DELAY3 = 0 <= {min} <= 60 - Time to wait before taking action for subsequent failures. PLBCS_SERVICE_DESC = {desc} - Description for NT Service. PLBCS_SERVICE_RESTART = {ON|OFF} - When this keyword is set to 'ON', the NT Service will restart the client module if the NT Service is configured to 'Restart Service' on failures and the PLBCLIENT is terminated. ------------------------------------------------------------------------------- PLBSERVE, PLBCLIENT, PLBCLICON, PLBCLINET - Corrected a problem where the APPEARANCE property was not defaulting to the parent Window setting when the APPEARANCE was not specified in a CREATE instruction. This changes corrects a problem where a CREATE of a LISTVIEW object on the MAINWINDOW did not have a border using PLBWIN and the same program had a border using PLBCLIENT/PLBSERVE. ------------------------------------------------------------------------------- PLB(UNIX), PLBSERVE(UNIX) - Corrected a SEGV error that could occur when opening a XFILE with a user '.xml' file specified that contained complex XML data elements. This SEGV error was caused by a memory buffer conflict using realloc. ------------------------------------------------------------------------------- PLBWIN, PLBNET - NT Service support has been added for the runtimes. The runtime command line options have been change to include the following: Command Line Option: -delete - Remove NT Service. -idefault - Install NT Service using default OS settings. -ilocal - Install NT Service using 'NT AUTHORITY\\LocalService'. -inetwork - Install NT Service using 'NT AUTHORITY\\NetworkService'. -iuser=name;pass - Install NT Service using specified username/password. - New keywords have been added for the runtimes to support NT Service recovery configuration settings: PLB_SERVICE_FAIL1={0, 1, or 2} - First failure action. 0 - Take no action (default) 1 - Restart the service 2 - Reboot the computer PLB_SERVICE_FAIL2={0, 1, or 2} - Second failure action. 0 - Take no action (default) 1 - Restart the service 2 - Reboot the computer PLB_SERVICE_FAIL3={0, 1, or 2} - Subsequent failures action. 0 - Take no action (default) 1 - Restart the service 2 - Reboot the computer Note for PLB_SERVICE_FAILx: If the service controller handles the SC_ACTION_REBOOT action, the caller must have the SE_SHUTDOWN_NAME privilege. For more information, see Running with Special Privileges in the Microsoft documentation. PLB_SERVICE_DELAY1 = 0 <= {min} <= 60 - Time to wait before taking action for First failure. PLB_SERVICE_DELAY2 = 0 <= {min} <= 60 - Time to wait before taking action for Second failure. PLB_SERVICE_DELAY3 = 0 <= {min} <= 60 - Time to wait before taking action for subsequent failures. PLB_SERVICE_DESC={desc} - Description for NT Service. PLB_SERVICE_RESTART={ON|OFF} - When this keyword is set to 'ON', the NT Service will restart the runtime if the the NT Service is configured to 'Restart Service' on failures and the PLB program is terminated. PLB_SERVICE_CMDLINE={cmdline} - The {cmdline} is specified as a PLB runtime command line without the runtime runtime module name. Examples: PLB_SERVICE_CMDLINE=ProgName PLB_SERVICE_CMDLINE=-i c:\app\my.ini ProgName Notes: 1. If there is a need to install more than one NT Service for a PLB runtime, the user can copy the PLBNET or PLBWIN runtime executable to an EXE with a different name and it a runtime with a different name. 2. All of the defined NT Server keywords are optional. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - Increased the maximum pending connects from 1 to 10 for a COMFILE that is opened for a socket to listen for multiple connections. - Optimized the XFILE operations when writing at the EOF record position. Depending on the speed of the CPU being used, this change can improve the performance of writing 200000 records by a factor of 400 or more. - Added a new keyword named 'SCHEMATYPE={svar}' for a GETFILE XFILE instruction. The GETFILE SCHEMATYPE keyword returns a delimited string that includes the schema data label references with a XML data node type and its schema type. The format for SCHEMATYPE data with semi-colon ';' character delimiters is: '{data};{data1};...' Where: {data} = '<name>,<type},{schematype}' Where: {name} - Name of xml element or attribute {type} - A=attribute or E=element {schematype} - S=xsd:string, N=xsd:decimal, or B=xsd:boolean Notes: 1. When a XFILE is created and written in a PLB program, the default {schematype} for all xml data references are defined to be 'xsd:string'. 2. The SETFILE SCHMATYPE is used to change the current schema types. - Added a new keyword named 'SCHEMATYPE=svarslit' for a SETFILE XFILE instruction. The SETFILE SCHEMATYPE keyword is used to change the schema type for a schema data label reference. The SETFILE SCHEMATYPE data string is a delimited string that is defined the same as described for the GETFILE SCHEMATYPE keyword. Note: 1. The SETFILE SCHEMATYPE data should only include the schema data label references that are to be changed. - Corrected a problem where the trace log for the MAILSEND instruction was reporting the wrong month value. - Corrected problems for the AAMDEX instruction when double quotes were used around command line arguments with embedded blank characters. - Corrected problems for the INDEX/SORT instruction when double quotes were used around command line arguments with embedded blank characters. - Corrected a S13 syntax error with a subcode 109 when there were blanks after a comma and before the Lnn parameter using the INDEX instruction. - Corrected a problem where an IFILE Write operation could process the ISI deleted record map twice. This would waste time unnecessarily when a deleted record was re-written. This problem only caused a performance problem when there was a large number of deleted records in an ISI file and weof was not being used. - Corrected a problem where setting the XFILE_OPENREADONLY bit in the XFILE OPEN mode parameter cleared the XFILE_ALLCHARS bit. - Corrected a problem where CDATA xml data was being passed to the PLB program variables with UTF8 data sequences for READ XFILE operations. - Corrected a problem where an ADMLOGON without a Public key would cause an unexpected O155 error when it was executed after a previous ADMLOGON was executed with a Public key being used. - Corrected a problem where the CLOCK ERROR instruction could report the wrong file name after an untrapped error causes a chain to a master program. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Modified the SETMODE instruction to support a new keyword named '*PLBANSIOEM={nvar|ivar|dnum}'. A PLB program can use the *PLBANSIOEM keyword to control the runtime/client ANSI/OEM translations as described for the runtime 'PLB_ANSI_OEM' keyword. *PLBANSIOEM Value PLB_ANSI_OEM keyword action ----------------- --------------------------- 0 - PLB_ANSI_OEM=OFF 1 - PLB_ANSI_OEM=ON 2 - PLB_ANSI_OEM=INPUT 3 - PLB_ANSI_OEM=OUTPUT 4 - PLB_ANSI_OEM=CONSOLE Notes: 1. The SETMODE *PLBANSIOEM ONLY controls the processing for the runtime keyword named 'PLB_ANSI_OEM'. 2. If an *PLBANSIOEM value other than ( 0 <= value <= 4 ) is specified, there is no change to the current ANSI/OEM translation mode. - Modified the GETMODE instruction to support a new keyword named '*PLBANSIOEM={nvar|ivar}'. A PLB program can use the *PLBANSIOEM keyword to get a numeric value that specifies the current runtime ANSI/OEM translation mode for either the 'PLB_ANSI_OEM' or the 'PLB_OEM' runtime keywords. The following table gives the expected returned values for the ANSI/OEM translations that are in use: *PLBANSIOEM Value PLB_ANSI_OEM or PLB_OEM keyword used ----------------- ------------------------------------ 0 - PLB_ANSI_OEM=OFF 1 - PLB_ANSI_OEM=ON 2 - PLB_ANSI_OEM=INPUT 3 - PLB_ANSI_OEM=OUTPUT 4 - PLB_ANSI_OEM=CONSOLE 10 - ANSI/OEM translation not used 11 - PLB_OEM=ON ;obsolete keyword 12 - PLB_OEM=INPUT ;obsolete keyword 13 - PLB_OEM=OUTPUT ;obsolete keyword 14 - PLB_OEM=CONSOLE ;obsolete keyword Note: 1. The PLB_ANSI_OEM replaces the obsolete PLB_OEM keyword. - Added a new property for a RADIO button named 'GROUPVALUE={nvar}'. The GROUPVALUE property is available for the GETPROP and SETPROP instructions. The SETPROP GROUPVALUE instruction executes like the SETITEM instruction for a RADIO object using a numeric value. The GETPROP GROUPVALUE instruction executes like the GETITEM instruction for a RADIO object. - Modified the GETMODE and SETMODE instructions to support a new keyword named '*FORMLOADMASK={nvar|ivar}'. A PLB program can use the *FORMLOADMASK keyword to change the behavior of the FORMLOAD instruction. The numeric value for the *FORMLOADMASK keyword is a bit mask value with the following definitions: Bit Mask Value Behavior Action 0x00000001 - When this bit is set in the *FORMLOADMASK value, the FORMLOAD instruction sets the parent WINDOW to the form size of an Object-Only PLF before creating the PLF objects. After all of the Object-Only PLF objects are created, the parent WINDOW is resize to its original height and width before the FORMLOAD was executed. - Corrected a problem where an ALT-key sequence did not work when a MDI child window was maximized within the frame of its parent window and MENU objects were being used. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified SETPROP for an EDITTEXT object to correct a problem where changing the STATIC property for an EDITTEXT object was causing the TOOLTIP property to become non-functional until the object was subsequently activated again. - Modified the LISTVIEW CHECKBOX and IMAGELISTST properties eliminate inconsistent operations caused by clearing and setting the CHECKBOX property. With the corrective actions the following checkbox behavior is expected: 1. If the IMAGELISTST property is NOT SET to a user IMAGELIST, then the CHECKBOX uses a default Windows OS checkbox imagelist when the CHECKBOX property is enabled. 2. If the IMAGELISTST property is SET to a user imagelist, then the CHECKBOX property uses the user imagelist when the CHECKBOX property is enabled. Example of Problem that was corrected: The following example code should be showing the user imagelist images. SETPROP LISTVIEW1,IMAGELISTST=IMAGELIST1 SETPROP LISTVIEW1,CHECKBOX=0 SETPROP LISTVIEW1,CHECKBOX=1 - Modified the LISTVIEW object to support a new method named 'GetColumnCount'. This method returns the number of columns that have been inserted into a LISTVIEW object. The number of columns includes normal user data columns as well as the special columns for background color, foreground color, and attributes. *-------------------------------------------------------------------------- . GetColumnCount Method for LISTVIEW . The GetColumnCount method returns the current column count that has been inserted into a LISTVIEW object. The method uses the following format: [label] {object}.GetColumnCount GIVING {return} Where: {label} is an optional Program Execution Label. {object} is a required LISTVIEW object to be accessed. {return } is an Numeric Variable that receives LISTVIEW column count. A return value of zero indicates no columns. While a non-zero value indicates the number of columns. Flags Affected: OVER, ZERO Notes: 1. The ZERO flag is set to a TRUE state when the {return} value zero. Otherwise the ZERO flag is cleared. 2. The OVER flag is set to a TRUE state if the value returned is too big to be stored into the {return} variable. - Added a new method for a LISTVIEW object named 'GetAttributeColumn'. This method returns the column number for the special column that was inserted for the Attribute column. *-------------------------------------------------------------------------- . GetAttributeColumn Method for LISTVIEW . The GetAttributeColumn method returns the current column number used for the Attribute column. The method uses the following format: [label] {object}.GetAttributeColumn GIVING {return} Where: {label} is an optional Program Execution Label. {object} is a required LISTVIEW object to be accessed. {return } is a Numeric Variable that receives LISTVIEW attribute column number. Flags Affected: OVER, ZERO Notes: 1. The ZERO flag is set to a TRUE state when the {return} value zero. Otherwise the ZERO flag is cleared. 2. The OVER flag is set to a TRUE state if the value returned is too big to be stored into the {return} variable. - Added a new method for a LISTVIEW object named 'GetBGColorColumn'. This method returns the column number for the special column that was inserted for the background color column. *-------------------------------------------------------------------------- . GetBgColorColumn Method for LISTVIEW . The GetBgColorColumn method returns the current column number used for the background color column. The method uses the following format: [label] {object}.GetBgColorColumn GIVING {return} Where: {label} is an optional Program Execution Label. {object} is a required LISTVIEW object to be accessed. {return } is a Numeric Variable that receives LISTVIEW background column number. Flags Affected: OVER, ZERO Notes: 1. The ZERO flag is set to a TRUE state when the {return} value zero. Otherwise the ZERO flag is cleared. 2. The OVER flag is set to a TRUE state if the value returned is too big to be stored into the {return} variable. - Added a new method for a LISTVIEW object named 'GetFGColorColumn'. This method returns the column number for the special column that was inserted for the foreground color column. *-------------------------------------------------------------------------- . GetFgColorColumn Method for LISTVIEW . The GetFgColorColumn method returns the current column number used for the foreground color column. The method uses the following format: [label] {object}.GetFgColorColumn GIVING {return} Where: {label} is an optional Program Execution Label. {object} is a required LISTVIEW object to be accessed. {return } is a Numeric Variable that receives LISTVIEW foreground column number. Flags Affected: OVER, ZERO Notes: 1. The ZERO flag is set to a TRUE state when the {return} value zero. Otherwise the ZERO flag is cleared. 2. The OVER flag is set to a TRUE state if the value returned is too big to be stored into the {return} variable. - Modified Print Preview to support mouse controls over a print page window as follows: Operation Function ---------------------- ------------------------------------------------- Mouse Wheel Mouse operation scrolls a print page up and down. Left Mouse Down Position to the bottom of a print page. Right Mouse Down Position to the top of a print page. Shift+Left Mouse Down Position to the top of the next print page. Shift+Right Mouse Down Position to the top of the previous print page. - Added two new buttons to Print Preview as follows: Button Function ---------- --------------------------------- First Page Position to the first print page. Last Page Position to the last print page. - Modified the runtime keyword 'PLBWIN_PRTPREV' to support the new Print Preview buttons named 'First Page' and 'Last Page'. PLBWIN_PRTPREV={1};{2};{3};{4};...;{14};(15);(16) This keyword allows specification of the command button and status bar captions used by the Print Preview window. Note that the command button captions may indicate the quick select character by preceding the character with an ampersand (&). All sixteen items followed by semicolons are required. The item values specified are as follows: Item Use Default Value ---- ------------------ -------------------- 1 Preview window Print Preview 2 Print button &Print 3 Next button &Next Page 4 Previous button Pre&v Page 5 Goto button &Go To 6 Zoom In button Zoom &In 7 Zoom Out button Zoom &Out 8 Close button &Close 9 Status bar "Page:" Page: 10 Dialog Item of 11 Dialog Item Go Page 12 Dialog Item Enter Page 13 Dialog Item &GoTo 14 Dialog Item &Cancel 15 First button &First Page (NEW) 16 Last button &Last Page (NEW) Example: PLBWIN_PRTPREV=MyReview;&Prt;&Next;&Previous;&GoToIt;Z&IN;Z&OUT;&Cls;Pg; of;GoPage;EnterPage;&GoToX;&Cancel;&First;&Last - Corrected a problem where the MAIN window was being created with an invalid height and position when the Windows Taskbar was docked to either the left or right edge of the screen. - Corrected a problem where a DESTROY SUBMENU was causing an object conflict when a submenu was referenced by more than one program variable. - Corrected a problem where the DeleteColumn method was disabling the special columns for background color, foreground color, and attributes when the column number being deleted was larger than these special control columns. - Corrected a problem where a GETPROP for the MDILIST property was always causing an O105 error. - Corrected a problem where the WIDTH property for a SPLITTER object could be reported incorrectly before the object was activated. - Corrected a problem where the ReplaceIcon method was returning a value of zero when a zero index was used. - Corrected a problem where the input for the EDITTEXT was accepting character values larger than 127 when the EDITTYPE was set to decimal. - Corrected a problem where the input for the EDITNUMBER was accepting character values larger than 127. - Corrected a problem where the MDI dock full mode for a MDI Client window was being cleared by a SETPROP when the MDILEFT, MDITOP, MDIHEIGHT, and MDIWIDTH properties were all zero. With this change, the MDI dock full mode is turned on when all of these properties are set to a value of zero using SETPROP. - Modified the PICT object to cleanup freed buffer pointers in the runtime to eliminate a GPF error in the PLB Designer. - Modified focus processing for the MDI client and child Windows to properly identify the Window that has the focus. This corrects a problem where the tabbing did not work after the focus was changed from a MDI child Window to an object on the MDI client Window. ------------------------------------------------------------------------------- PLBCON - Corrected a problem where the runtime would hang indefinitely when stdin was redirected and the '*KEYMODE=1' was NOT used. With this change the PLBCON runtime is used to redirect the stdin and/or the stdout with or without the *DSPMODE and *KEYMODE controls. Example: plbcon program < in.txt ------------------------------------------------------------------------------- PLBNET, PLBCLINET - Modified the runtimes to allow a NETOBJECT that has not been created to be processed/used as null parameter for a property in a SETPROP. - Modified the NETCONTROL object to support the AcceptTab property. When this property is set for a NETCONTROL object, then the tab key is passed to the .NET NETCONTROL object and tabbing remains under control of the .NET NETCONTROL object until the focus is changed to a different GUI object on the form. - Modified the runtime to detect that a 'System.Windows.Forms.DataGridView' object has lost the focus and then it executes a method to commit the edit buffer data. - Modified the NETCONTROL object to support a new property named EnterTab. When the EnterTab property is set for a NETCONTROL, then the Enter key value ( VK_RETURN ) is changed to be a Tab key value (VK_TAB) when a NETCONTROL has the focus. The EnterTab property is used to change the cell transition behavior for a NETCONTROL that been created for a .NET DataGridView when the Enter key is keyed. ------------------------------------------------------------------------------- PLBCMP - Added the *EOFON, *EOFOFF, *EOFFLAG DISPLAY/KEYIN controls to the compiler. These controls were originally implemented for 8.7F. However, they were left out of the 9.0 release. - Modified the FILL instruction to allow the fill variable list to contain numeric variables in addition to dim variables. - Modified the compiler to support the *PLBANSIOEM keyword for the GETMODE and SETMODE instructions. See *PLBANSIOEM description above. - Modified the compiler to support the *FORMLOADMASK keyword for the GETMODE and SETMODE instructions. See *FORMLOADMASK description above. - Corrected a problem that corrupted the PLC that caused a U51 when the %STOREPLF directive was used in a program that does not have an PLFORM include. - Corrected a problem where RECORD LIKE was not retaining the pseudo type for the RECORD being duplicated. - Corrected a problem for the EVENTINFO instruction where the compiler did not check for proper instruction termination using a blank. Example: RESULT FORM 5 NVAR FORM 5 . EVENTINFO RESULT=nvar ;Compiler error is EXPECTED! ------------------------------------------------------------------------------- PLBDBUG - Corrected GPF errors for the DA, DV, DL, MV, and TP commands when an un-initialized auto-DIM variable was being referenced. Now, the debugger gives an appropriate error message. ------------------------------------------------------------------------------- SUNLS - The SUNLS server is a Sunbelt License Server that is implemented to allow a single Sunbelt product serial number and authorization number to be used for the Data Manager and Application Server located a multiple end-user sites. The License Server controls and distributes license user tokens to the Data Manager and Application Servers that log onto the License Server. Definitions: Corporate License Serial number to activate dynamic user licensing for a Data Manager or Application Server. License Requestor Data Manager or Application Server configured to retrieve user license tokens from a specified License Server. License Server Data Manager or Application Server configured to distribute user license tokens to one or more License Requestors. User Token A user token represents the authorization to allow a single user to logon and use the services of a Data Manager or Application Server serialized for a Corporate License. General Description: The implementation for the Corporate License allows a single License Server to distribute user tokens to multiple License Requestors. A License Requestor logs onto the License Server to receive an allotment of user tokens that allows end users to log onto the requestors to run the PLB applications. The License Server manages the total user token count that has been licensed for a user authorization number. When there are insufficient license user tokens to distribute, then the License Requestor token request is rejected. LICENSE SERVER (Configuration Keywords): The SUNLS configuration file is named 'sunls.cfg'. This configuration file has an 'environment' section that provides the keywords to control basic License Server operations. Additional sections that are named using a Sunbelt Serial Number are added to the 'sunls.cfg' file to provide the required authorization numbers for License Requestors that can log onto the License Server. The [environment] section keywords are described as follows: LS_HOSTNAME={hostip} (Required) This keyword must be specified in the configuration file of the License Server. This keyword specifies the IP address or URL of the server executing the License Server task. The IP address is provided as a 'nnn.nnn.nnn.nnn' identifier. Where: {hostip} - IP/URL address of the license server. LS_PORTNUM={port number} (Required) This keyword specifies the IP port number assigned to the License Server. LS_{id}={data} (Required for License Requestor) A 'LS_{id}' keyword MUST be specified in the [environment] section so a License Requestor can log onto the License Server. The parameter string specified by this keyword configures the user token distribution to be applied for the License Requestor identified by the {id} name. Where: {id} - A unique name used to identify the token distribution parameters. {data} - The configuration data string contains comma-delimited fields that are used to control the user-token processing for a License Requestor. Note: 1. The {data} string format is specified as follows: {data} = {minlic},{maxlic},{blocksize},{nextsize} Where: {minlic} - Minimum user token count. {maxlic} - Maximum user token count. {blocksize} - User token allocation block size. {nextsize} - Available token count at the License Requestor when another token allocation is requested. Example: LS_DMSMALL=10,40,5,2 In this case, the License Requestor is configured to have a minimum license token count of 10 and a maximum license token count of 40. When the License Requestor requests a token allocation, then the License Server sends tokens in allocations of 5 tokens. The value of 2 specifies that the License Requestor requests another license allocation when it has 2 remaining tokens out of its existing token allocation. LS_LOCALIP={ip address | url} (Optional) This optional keyword specifies the URL or the IP address of a local system network with which to bind before attempting a connection to the LS_HOSTNAME address. This is provided for situations where a server may have multiple independent networks available. If this keyword is not used, all local IP addresses are searched. LS_PUBLIC={securitykey} (Optional) SUNLS supports message encryption when communicating with server clients. If this keyword exists in the configuration file when the server is loaded, public security is applied to all clients. Any client that attempts to log onto the server must be using the same public key. The public key encrypts all messages transmitted between a runtime client and the server. The {securitykey} string must be composed of up to sixteen (16) hexadecimal digits. Note: 1. If no encryption key is specified, a default key is used. All transmissions between the client and server are secure. Example: LS_PUBLIC=AF91C602424E880E LS_TERMTIME={seconds} (Optional) The LS_TERMTIME keyword controls the number of seconds that the License Server waits for client runtimes to end after a terminate command has been executed. If the {seconds} time expires, the License Server terminates immediately. If this keyword is not used, the terminate command causes the License Server to wait for an infinite amount of time for the client runtimes to log off. Note that the LS_TERMTIME keyword has been implemented to take affect dynamically. This means that the value of the keyword can be changed in the configuration file at any time before or after the terminate command has been executed. Example: LS_TERMTIME=60 ADMIN_xxxx keywords Admin services have been implemented for the License Server. The normal ADMIN_xxxx keywords as documented for other Sunbelt products are implemented for the License Server. [Axxxxxx] section keywords The [Axxxxxx] sections are required for each Corporate License that the License Server is to support. The Axxxxxx correspondes to the actual license number of the product being used. Each entry in a [Axxxxxx] section provides the Sunbelt Authorization number that is validated and used when a License Requestor logs onto the License Server. The [Axxxxxx] keyword entries are specified as follows: DM_AUTH={authno} Authorization number used for a Data Manager. DM_LOWSTART={value} (Optional) This keyword is specified to set the low token value that causes the License Server to re-claim all of the currently free tokens from all of the License Requestors. If this keyword is not defined, the default low-token start value is 10. When the low-token mode is activated and all of the current tokens are re-claimed, the License Server allocates tokens one at a time. DM_LOWEND={value} (Optional) This keyword is specified to set the value where the License Server stops executing in a low-token mode. When the low-token mode is stopped, the License Requestors can receive and maintain tokens based on the LS_{id} keyword settings. If this keyword is not defined, the default value is set to 20. PLBCS_AUTH={authno} Authorization number used for an Application Server. PLBCS_LOWSTART={value} (Optional) This keyword is specified to set the low token value that causes the License Server to re-claim all of the currently free tokens from all of the License Requestors. If this keyword is not defined, the default low-token start value is 10. When the low-token mode is activated and all of the current tokens are re-claimed, the License Server allocates tokens one at a time. PLBCS_LOWEND={value} (Optional) This keyword is specified to set the value where the License Server stops executing is a low-token mode. When the low-token mode is stopped, the License Requestors can receive and maintain tokens based on the LS_{id} keyword settings. If this keyword is not defined, the default value is set to 20. Example of a [A999999] and [A123456] section: [A054321] DM_AUTH=1234-5678-9012-3456-7890-1234 DM_LOWSTART=20 DM_LOWEND=30 [A123456] PLBCS_AUTH=ABCD-9876-5432-1098-6543-JLMN PLBCS_LOWSTART=20 PLBCS_LOWEND=30 LICENSE REQUESTOR (Configuration Keywords): There are two keywords that MUST be placed into the configuration file for a Data Manager and/or Application Server that is used as a License Requestor. The keywords named 'LS_ADDR' and 'LS_ID' must be placed in the [environment] section for the License Requestor. Another optional keyword named 'LS_PUBLIC' is given to specify an encryption key required to access the License Server. The [environment] section keywords for a License Requestor are described as follows: LS_ADDR={ {hostip}[ ;{hostalt} ] (Required) This keyword must be specified in the configuration file of a Data Manager or Application Server. The License Requestor logs onto a License Server to receive user tokens that allows end user applications to logon and use the Requestor services. Where: {hostip} - IP/URL address of the license server. {hostalt} - Optional IP/URL address of an alternate license server. Note: 1. First, the License Requestor attempts to log onto the {hostip} License Server. If the first logon fails, the License Requestor attempts to log onto the {hostalt} License Server. LS_ID={id} (Required) This {id} data for this keyword is sent to the License Server to specify the token distribution parameters that are to be used for this License Requestor. Where: {id} - A identification string sent to the License Server and used to determine the token distribution parameters that are to be used for this License Requestor. Note: 1. The {id} string value is used to match the name given by the 'LS_{id}' keyword that is specified in the [environment] section of the License Server configuration file. Example: LS_ID=DMSMALL In this case, the License Requestor is to logon to the License Server using the 'DMSMALL' parameter identification that is defined in the License Server configuration file. LS_PUBLIC={securitykey} (Optional) Defines an optional key used to encrypt messages to and from a License Server. ------------------------------------------------------------------------------- PLBEQU.INC - Added XFILE mode values. - Modified the AUTOSCALE property for the PICT object to remove the $NONE value and identify the $SCALEBEST as the default value. - Added $T_NETOBJECT, $T_NETCONTROL, $BT_NETOBJECT, $BT_NETCONTROL, $ST_NETOBJECT, and $ST_NETCONTROL equated values. - Corrected a problem where the $T_RADIOGRP and $T_RADIO equated values were reversed. The corrected values should be as follows: $T_RADIOGRP EQU 0x0D30 ;True type for object $T_RADIO EQU 0x0E30 ;True type for object - Added special ANSI graphic character values. - Added the GROUPVALUE property for a RADIO object. - Added NETCONTROL as a referenced object for ACCEPTTAB. - Added ENTERTAB property description. - Corrected problem where $IDIGNORE was misspelled. ------------------------------------------------------------------------------- PLBMETH.INC - Updated the Listview and Treeview values. ------------------------------------------------------------------------------- ADMIN - Modified the log file output to write up to 4 records/lines per message. - Modified the ADMIN services to support the License Server. The ADMIN services have been modified for the License Server to provide information specific to an Authorization License in use by a License Requestor that is logged onto the License Server. In addition, ADMIN information provides information that is related to the current parameters and user tokens for a License Requestor that is logged onto the License Server. Data items for the ADMGETINFO instruction have been added to provide License Server information as follows: Authorization License Information: $AdmItemSerialNumber ( Value == 1 ) The $AdmItemSerialNumber gives the Sunbelt serial number assigned to the Authorization License. $AdmItemProductName ( Value == 2 ) The $AdmItemProductName gives the Sunbelt product name assigned to the Authorization License. $AdmItemMaxLic ( Value == 13 ) The $AdmItemMaxLic gives the maximum number of users allowed for the Authorization License. $AdmItemUsedLic ( Value == 15 ) The $AdmItemUsedLic gives the current number of users that are using the Authorization License. $AdmItemCompanyName ( Value == 16 ) The $AdmItemCompanyName gives the end-user Company Name that is assigned to the Authorization License. $AdmItemMisAddr ( Value == 24 ) The $AdmItemMisAddr give a return value of zero or not zero that identifies whether a License Requestor LS_ADDR has an invalid order for the {hostip} and {hostalt} IP addresses. $AdmItemProductVer ( Value == 25 ) The $AdmItemProductVer gives the Sunbelt version for the Sunbelt product that is assigned to the Authorization License. License Requestor Information: $AdmItemUserIp ( Value == 1 ) The $AdmItemUserIp gives the IP address for the License Requestor. $AdmItemMinLic ( Value == 12 ) The $AdmItemMinLic gives the minimum user count allowed as configured for the LS_ID being used by the License Requestor. $AdmItemMaxLic ( Value == 13 ) The $AdmItemMaxLic give the maximum user count allowed as configured for the LS_ID being used by the License Requestor. $AdmItemUsedLic ( Value == 15 ) The $AdmItemUsedLic gives the current number of users that are in use by the License Requestor. $AdmItemLicAdmId ( Value == 23 ) The $AdmItemLicAdmId gives the administration id of the parent Authorization License information. This is used to match multiple License Requestors to the parent Authorization License. $AdmItemLicThresh ( Value == 24 ) The $AdmItemLicThresh gives the current {nextsize} parameter from the 'LS_{id}' group identifier that is being used by the License Requestor. This value identifies the available token count at the License Requestor when another token allocation is to be requested. $AdmItemLicBlock ( Value == 25 ) The $AdmItemLicBlock gives the current {blocksize} parameter from the 'LS_{id}' group identifier that is being used by the License Requestor. This value identifies the number of user tokens that are allocated to the License Requestor for a single allocation request. - Additional runtime types have been added for the AdmGetInfo instruction as follows: Value Runtime Type ----- ---------------------------------------- 13 Authorization License for License Server 14 License Requestor ------------------------------------------------------------------------------- SUNAAMDX - Corrected problems when double quotes were used around command line arguments with embedded blank characters. ------------------------------------------------------------------------------- SUNINDEX, SUNSORT - Corrected problems when double quotes were used in command line arguments with embedded blank characters required file name parsing. ------------------------------------------------------------------------------- SUNLIST.PLC - Added 'T' option to follow the EOF of a text file being written to by another program. ------------------------------------------------------------------------------- SUNIDE.PLC - Fixed a bug where cross reference list files more with than 1000 pages would be incorrectly identified as an error. - Modified post compile processing to locate the .lst file when using an alternate compiler configuration. - Fixed the open file dialog to open .PLF files with the designer. - Modified build logic to delete the .lst file before executing the compiler. This way the IDE can identify a failed compile when the compiler errors before creating any output files. Example - I10 on .sdb file. - Corrected an F02 error that can occur on compile or close if editing a form with more than 10 files open in the IDE - Corrected a Browse Label bug where labels could have the wrong source file listed for its declaration when loading a cross reference LST file. - Corrected multiple GOTOLABEL problems where occasionally it would open the wrong source and give a goto line dialog prompt. - Corrected an open project problem that could hang the IDE. - Fixed up New Project logic where a path character may not get inserted between the path and filename in the project file name/location field in the dialog. - Corrected potential untrapped error that could occur when config files are not accessible. - Added project option to put the compiler output in the same folder as the main source to a program. - Corrected a bug in the build process where if a programs main source is in a sub-folder from the projects working folder, it would always compile. The correction now only compiles when any of the sources have changed. - Corrected a problem where the IDE could not identify a program's includes if the source had a CR end of record ------------------------------------------------------------------------------- SUNCSENC.OCX - Fixed to show underscore character in comments - Fixed color highlighting problem when a forcing character was used with a trailing white space. ------------------------------------------------------------------------------- DBGIFACE.PLC - Corrected a bug where a break point was not immediately displayed in the breakpoint dialog when added via the dialog. - Corrected a focus race condition that can occur when the break points window was activated during startup. - Added logic to try to prevent applying invalid settings - Corrected a problem where the breakpoints window was not refreshing when enabling/disabling or clearing a breakpoint. - Corrected a bug that could cause a GPF if you right clicked on a numeric constant. - Made changes to improve performance of transitioning to/from loadmods. ------------------------------------------------------------------------------- WATCH.PLC - Modified client display to show CPU time as hundredths of a second. - Disabled display of CPU time on client display for Data Managers. - Added column sorting to Programs, Modules, Files, Isam, AAM, and spool tab listviews. - Added logic to perform a numeric column sort of listview data for columns that contain numeric values. - Modified to allow client child debugging (-d3). - Added support for the Sunbelt License Server. ------------------------------------------------------------------------------- DESIGNER.PLC - Added support for .Net collections. - Added a .Net DataGridView column editor with extended column types based on the DateTimePicker, MaskedTextBox, and NumericUpDown controls. - Redesigned the TabID numbering logic to permit numbering of .Net objects within .Net containers. - Added a Behavior option to provide control of the designer generated tabcontrol change code. The user can disable this option and provide their own change event logic if desired. - Modified logic in the form open routine to increase performance. - Added a Hide All function for panels to the form shortcut menu. - Added a Force Primary Display behavior option to ensure designer windows are positioned within the monitor's viewing area. - Added a Behavior option to force the creation of .Net objects with the defined assembly path. - Modified the internal label logic to ensure that the thirty-one byte label length limit is honored by the designer. - Corrected the calculation of the code window starting line number when designer generated code exists. - Added support for NetObjects. - Added support for AcceptTab, EnterTab, and Index properties to NetControls. - Added logic to allow the designer to store the design time visible state of panels and tabpanels. - Modified logic to create temporary designer files in the Sunbelt Designer directory within the $APPDATA folder. Housekeeping logic was also added. - Enhanced the designer's error reporting logic to provide additional program status information upon failure. - Added logic to log .Net object property changes to the designer's undo file. - Modified the designer's keyboard routines to allow sizing and moving of .Net controls and objects. - Modified the ListView object to show a single row of sample data during the form design process. - Added support for .Net TabPages within TabControls. - Added the ability to export resources within the Resource Editor. -------------------------------------------------------------------------------