Date: 09-02-2014 Subject: RELEASE 9.7 Runtime Files These release notes pertain to the following programs or files: EMBEDINI 9.7 02 Sep 2014 9,7,0,500 EMBEDINI64 9.7 02 Sep 2014 9,7,0,500 HEXDUMP 9.7 02 Sep 2014 9,7,0,500 HEXDUMP64 9.7 02 Sep 2014 9,7,0,500 MAKECLI 9.7 02 Sep 2014 9,7,0,500 MAKECON 9.7 02 Sep 2014 9,7,0,500 MAKECONET 9.7 02 Sep 2014 9,7,0,500 MAKEDEF 9.7 02 Sep 2014 9,7,0,500 MAKEMFD 9.7 02 Sep 2014 9,7,0,500 MANAGECE 9.7 02 Sep 2014 9,7,0,500 OBJMATCH 9.7 02 Sep 2014 9,7,0,500 OBJMATCH64 9.7 02 Sep 2014 9,7,0,500 ODBCINST64 9.7 02 Sep 2014 9,7,0,500 PLBCGI 9.7 02 Sep 2014 9,7,0,500 PLBCLICON 9.7 02 Sep 2014 9,7,0,500 (ComCtl 6) PLBCLIENT 9.7 02 Sep 2014 9,7,0,500 (ComCtl 6) PLBCLINET 9.7 02 Sep 2014 9,7,0,500 (ComCtl 6) PLBCON 9.7 02 Sep 2014 9,7,0,500 (ComCtl 6) PLBCONET 9.7 02 Sep 2014 9,7,0,500 (ComCtl 6) PLBDSIGN 9.7 02 Sep 2014 9,7,0,500 PLBNET 9.7 02 Sep 2014 9,7,0,500 (ComCtl 6) PLBSERVE 9.7 02 Sep 2014 9,7,0,500 (Processed Server) PLBSERVET 9.7 02 Sep 2014 9,7,0,500 (Threaded Server) PLBWEBSRV 9.7 02 Sep 2014 9,7,0,500 (Processed Server) PLBWEBSRVT 9.7 02 Sep 2014 9,7,0,500 (Threaded Server) PLBWIN 9.7 02 Sep 2014 9,7,0,500 (ComCtl 6) SETGUID 9.7 02 Sep 2014 9,7,0,500 SUNAAMDX 9.7 02 Sep 2014 9,7,0,500 SUNAAMDX64 9.7 02 Sep 2014 9,7,0,500 SUNINDEX 9.7 02 Sep 2014 9,7,0,500 SUNINDEX64 9.7 02 Sep 2014 9,7,0,500 SUNLS 9.7 02 Sep 2014 9,7,0,500 SUNMOD 9.7 02 Sep 2014 9,7,0,500 SUNMOD64 9.7 02 Sep 2014 9,7,0,500 SUNSORT 9.7 02 Sep 2014 9,7,0,500 SUNSORT64 9.7 02 Sep 2014 9,7,0,500 WININST 9.7 02 Sep 2014 9,7,0,500 PLBCLICON5 9.7 02 Sep 2014 9,7,0,500 (ComCtl 5) PLBCLIENT5 9.7 02 Sep 2014 9,7,0,500 (ComCtl 5) PLBCLINET5 9.7 02 Sep 2014 9,7,0,500 (ComCtl 5) PLBCON5 9.7 02 Sep 2014 9,7,0,500 (ComCtl 5) PLBCONET5 9.7 02 Sep 2014 9,7,0,500 (ComCtl 5) PLBNET5 9.7 02 Sep 2014 9,7,0,500 (ComCtl 5) PLBWIN5 9.7 02 Sep 2014 9,7,0,500 (ComCtl 5) ODSBAC32.DLL 9.7 02 Sep 2014 ODSBAC64.DLL 9.7 02 Sep 2014 PLBNETSUP.DLL 9.7 02 Sep 2014 9,7,0,500 Required for PLBNET PLBWSEC.DLL 9.7 02 Sep 2014 9,7,0,500 Req'd PLBWIN/PLBNET SA_DLL32.DLL 9.7 02 Sep 2014 9,7,0,500 SUNWADO.DLL 9.7 02 Sep 2014 9,7,0,500 SUNWADO25.DLL 9.7 02 Sep 2014 9,7,0,500 SUNWADO28.DLL 9.7 02 Sep 2014 9,7,0,500 SUNWMSQL.DLL 9.7 02 Sep 2014 9,7,0,500 SUNWODBC.DLL 9.7 02 Sep 2014 9,7,0,500 SUNWSRV.DLL 9.7 02 Sep 2014 9,7,0,500 DBGIFACE 9.7 02 Sep 2014 PLBCMP 9.7 02 Sep 2014 PLBDBUG 9.7 02 Sep 2014 ADMEQU.INC 9.7 02 Sep 2014 PLBEQU.INC 9.7 02 Sep 2014 PLBMETH.INC 9.7 02 Sep 2014 PLBCLI.ZIP 9.7 02 Sep 2014 9,7,0,600 (ComCtl 6) PLBRUN.ZIP 9.7 02 Sep 2014 9,7,0,600 (ComCtl 6) *============================================================================== Warnings for PL/B Web Server: - When using a PL/B Web Server, different browsers may exhibit different behaviors for HTML objects that can not be directly controlled by the PWS runtime. This can include HTML object presentations and browser operations. - The KEYIN instruction requires an OS keyboard. Depending on the device executing a browser client to access a PL/B Web Server, some devices do not have keyboard input. If the keyboard is not accessible or available for a device, the KEYIN instruction will hang indefinitely unless an *Tnnn control is used. - When using a PL/B Web Server accessed by a Firefox client, a multiline EDITTEXT WORDWRAP turned off does not work. - The PL/B Web Server is created as a Process based or Thread based application. For Windows, there is a 'plbwebsrv.exe' which is the process based runtime. In this case, all child tasks created by the PWS are separate processes for each child task. Also, for Windows, there is a 'plbwebsrvt.exe' which is a thread based runtime. In this case, all child tasks created by the PWS are actual threads created for a single PWS process. *============================================================================== Notes for DOCUMENTATION: - In the Sunbelt PL/B Runtime Reference, change the 'Program Information File' descriptions to include a description of a Windows OS File Version specified in a 'xx.yy.aa.bb' format. [version] Microsoft file version value. This value can be determined by using the Windows Explorer to view the properties of a file. This value is a numeric value is a file version given in one of two formats. Both of the supported formats translate into two 32 bit values representing the file version and the file build values. The first format is 'xx.yy.nnnn' where: xx - Version value high word yy - Version value low word nnnn - Version build number The second format is 'xx.yy.aa.bb' where: xx - Version value high word yy - Version value low word aa - Version build value high word bb - Version build value low word Note: 1. The 'nnnn' value specified in the first format can be calculated using the 'aa' and 'bb' value specified in the second format as follows: nnnn = ( aa << 16 ) + bb Example 3: [vercheck] VERSION001 = "libeay32.dll" >= 1.0.65543 or [vercheck] VERSION001 = "libeay32.dll" >= 1.0.1.7 - In the PL/B Language Reference manual, change the Note (9.) for the DBFETCH instruction to read as follows: "9. If the fetch list item is a numeric variable, the converted text string must be a valid number in decimal or fixed point notation, or one of the strings TRUE or FALSE. If the converted text string is a valid number, the number is stored in the variable. If the number contains more integer or fractional digits than the numeric variable, the number is truncated and the EOS flag is set. Also, the EOS flag is set if a DIM variable is too small to retrieve a SQL column data field causing the data to be truncated. - In the PL/B Runtime Reference manual, add the following sub-code section reported for SQLite IO operations when a sub-code value of '5xx' is reported. This sub-code values may occur on I03, I86, and D2xx IO errors related to SQLite IO operations: Sub-code SQLite Error Definition Description 501 SQLITE_ERROR SQL error or missing database 502 SQLITE_INTERNAL Internal logic error in SQLite 503 SQLITE_PERM Access permission denied 504 SQLITE_ABORT Callback routine requested an abort 505 SQLITE_BUSY The database file is locked 506 SQLITE_LOCKED A table in the database is locked 507 SQLITE_NOMEM A malloc() failed 508 SQLITE_READONLY Attempt to write a readonly database 509 SQLITE_INTERRUPT Operation terminated by sqlite3_interrupt() 510 SQLITE_IOERR Some kind of disk I/O error occurred 511 SQLITE_CORRUPT The database disk image is malformed 512 SQLITE_NOTFOUND Unknown opcode in sqlite3_file_control() 513 SQLITE_FULL Insertion failed because database is full 514 SQLITE_CANTOPEN Unable to open the database file 515 SQLITE_PROTOCOL Database lock protocol error 516 SQLITE_EMPTY Database is empty 517 SQLITE_SCHEMA The database schema changed 518 SQLITE_TOOBIG String or BLOB exceeds size limit 519 SQLITE_CONSTRAINT Abort due to constraint violation 520 SQLITE_MISMATCH Data type mismatch 521 SQLITE_MISUSE Library used incorrectly 522 SQLITE_NOLFS Uses OS features not supported on host 523 SQLITE_AUTH Authorization denied 524 SQLITE_FORMAT Auxiliary database format error 525 SQLITE_RANGE 2nd parameter to sqlite3_bind out of range 526 SQLITE_NOTADB File opened that is not a database file 527 SQLITE_NOTICE Notifications from sqlite3_log() 528 SQLITE_WARNING Warnings from sqlite3_log() - In the PL/B Runtime Reference manual under the I86 error description, add the following subcode values: Sub-code Description 47 Invalid multi-part key defined in schema. 48 Host can not be null for SQLIO database connection. 49 Unable to open SQLite database. 50 Error occurred retrieving SQLIO IFILE information from schema. 51 Error occurred retrieving SQLIO AFILE information from schema. 52 Error occurred retrieving SQLIO FILE information from schema. - In the PL/B Runtime Reference manual, add the U67 error in to the 'U(Untrappable) Errors' section as follows: U67 - This error occurs when a PL/B instruction operation is encountered that is NOT supported by the Plb Web Server. - In the PL/B Language Reference manual, add the following note for the AUTOMATION object: Note: 8. When an AUTOMATION object COLLECTION is being accessed, the 'Item' keyword is used to access the collection items using the COM property interface. However, if an AUTOMATION collection class has implement the 'Item' as a method, then a runtime conflict can exist resulting in an unexpected O145 error. When an AUTOMATION object COLLECTION has implemented the 'Item' method, the PLB runtime supports a syntax format using the specialized method name of '_Item_' which forces the true method named 'Item' be executed using the COM method interface. Example: WinObjCol AUTOMATION ;Windows Object Collection WinObj AUTOMATION ;Window Object . ...Perform operations to create WinObjCol collection . ..... . This syntax works for AUTOMATION collections when . the 'Item' is not implemented as a method for an . AUTOMATION class. . WinObjCol.Item GIVING WinObj USING 1 ..... . This syntax can be used when the AUTOMATION collection . has implemented a 'Item' method to access the collection. . The '_Item_' format forces the runtime to use the . COM method interface to access an AUTOMATION collection. . WinObjCol._Item_ GIVING WinObj USING 1 . - In the PL/B Runtime Reference manual, add the U68 error in to the 'U(Untrappable) Errors' section as follows: U68 - This error occurs when a restricted PLC program is being executed from a PL/B runtime command line. A restricted PLC can only be loaded and executed using a PL/B CHAIN or LOADMOD operation. - In the PL/B Language Reference manual, change the '*EDITDATETIME={value}' keyword name to be '*EDITDATETIMEUTC={value}' for the GETMODE and SETMODE instructions. The '*EDITDATETIMUTC' keyword is the valid keyword name as implemented in release 9.4D. - In the PL/B Language Reference manual, change the CLOCK VERSION table as follows: - The CLOCK VERSION instruction has been modified to return PL/B Web Server and client information as follows: 19-26 Client engine name (only reported by PLBSERVE and PLBWEBSRV) cliwin PLBCLIENT clicon PLCCLICON Console cliwcepk PLBCLIENT Pocket PC cliwcehh PLBCLIENT Hand Held cliwcept PLBCLIENT Palm Top webbrw Web Browser client 27-31 PLBCLIENT version number using PLBSERVE JavaScript version number using PLBWEBSRV *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBWEBSRV PL/B Web Server Overview: Addressing the need for allowing PL/B programs to executed from industry standard browser clients, Sunbelt is providing a ‘PL/B Web Server’ (PWS) to interface with Web based clients. The PL/B Web Server allows applications to be developed as normal PL/B programs and executed\initiated from industry standard Web Browsers. These browsers include Internet Explorer, FireFox, Chrome, Safari, or Opera. Also, the PL/B programs can be executed\initiated from a Sunbelt Web App (SWA). The Sunbelt Web App is built using Apache Cordova for IOS devices, Android devices, Windows RT 8, and Fire O/S. The PWS server executes PL/B programs in the same manner as the Sunbelt Application Server, but it uses standard Web based technologies to interact with the PWS clients. These technologies include HTML5, AJAX (Asynchronous JavaScript and XML ), CSS (Cascading Style Sheets), jQuery User Interface JavaScript libraries, and specialized Sunbelt JavaScript code. The PL/B Web Developer does not have to have any knowledge of the Web technologies being used. Standard PL/B coding techniques, events, and expected language behaviors can be utilized by the developer for the PL/B Web applications. For the more knowledgeable Web application developer, extensions to the PL/B language have been added which allow the implementation of custom HTML5 pages, JavaScript functions, and CSS classes for their PL/B Web applications. The PWS server includes a large subset of the normal PL/B GUI objects that can be used\created in the PL/B Web applications. The Sunbelt PL/B GUI Designer is enhanced to allow PL/B Web Forms (.pwf) to be created. These PWF forms are same as PLF forms, except there are fewer objects available. Program development, compilation, and execution are the same as used for previous Sunbelt runtimes. In fact, a PL/B Web Application can be executed by other PL/B runtimes keeping in mind that there can be differences depending on the GUI objects and extensions being used in a program. Likewise, an existing PL/B application can be executed by the PWS server as long as there are no language conflicts of features or objects being used. The PL/B Web Server (PWS) executes a PL/B program with the following functionality while interfacing to a Web Browser client: 1. The PL/B program is interpreted and executed while using the HTTP protocol to communicate with a UI client. The client can be a Web Browser or a Sunbelt stub client as described above. 2. While executing a PL/B program, the PWS dynamically generates HTML 5 data streams to when communicating the UI for the PL/B instructions. 3. The actual data exchange between the client and the PWS server is performed using the AJAX ( Asynchronous JavaScript and XML) and JSON (Java Script Object Notation). 4. The PWS system uses 'jQuery' libraries that provide the best functionality and flexibility presentations targeting multiple PWS Client UI device environments. The intent is to provide a fully functional and dynamic styling capability without having to recompile PL/B programs. PL/B Language Overview for PL/B Web Server: As a general comment, the PL/B Web Server runtime executes a PL/B program exactly the same as any other Sunbelt PL/B runtime. However, any PL/B instructions that perform input\output operations for the User Interface have been changed to dynamically generate HTML5 and JavaScript logic that interfaces with a PL/B Web Client. A PL/B Web Client can be an industry standard browser or a Sunbelt Web App. Therefore, most PL/B instructions\programs\object behaviors are implemented by the PL/B Web server. While the PL/B Web Server runtimes attempt to maintain the same behaviors, there may be some scenarios where a PL/B behavior may be different or unsupported. The PL/B Web Server supports a subset of the normal PL/B GUI objects. To help maintain a high level of performance for the PL/B programs, the PL/B Web Server has implemented server side data shadowing techniques to minimize the data transfers to and from the PL/B Web Clients. The following table gives a break down of unsupported or limited PL/B Instructions\Objects for the PL/B Web Server: Unsupported PL/B Statements CLIPGET CLIPSET DRAGITEM GETSTRING GETFNAME PAGESETUP PARAMTEXT SETWITITLE SNDCLOSE SNDOPEN SNDPLAY Limited PL/B Statements COPYFILE - Server side only GETINFO - GETINFO SYSTEM Only returns valid information available from the PL/B Web Client This includes: Operating system type Screen width Screen height Color bits - GETINFO DATASOURCE (Not supported) - GETINFO FONTS (Not supported) - GETINFO TABLES (Not supported) - GETINFO COLUMNS from DBFILEs (Not supported) Printing - Server side only STREAM - No support for *STDOUT and *STDIN KEYIN/DISPLAY - Basic support only Unsupported PL/B GUI Objects: ANIMATE AUTOMATION CONTROL CONTAINER CHECKGRP DIALOG HSCROLLBAR IMAGELIST MOVIE NETCONTROL NETOBJECT RADIOGRP RICHEDITTEXT SPLITTER STATUSBAR TREEVIEW TOOLBAR VARIANT VSCROLLBAR Supported PL/B Properties for Supported GUI Objects; Top, Left - For a WINDOW object, these properties do not causing any positional changes. Activate, Alignment, AlignText, AllowMinus, Anchor, Appearance, BdrColor, BdrWidth, BGColor, Bold, Border Cancel, CauseValid, DecimalDigits, Default, DPI, Dock, DockPadB, DockPadL, DockPadR, DockPadT, EditType, Enabled, FGColor, Font, Format, GridAlign, GridLine, GridSizeH,GridSizeV, GroupID, Height, HideColHdr, IntegerDigits, Italic, LoadObject, MaxChars, MinWidth, MultiSelect, MultiLine, ObjectId, Overtype, Password, Percent, ReadOnly, Scrollbar, SelectAll, Size, Static, Style, Sorted, SortHeader, SortOrder, TabID, TextOutConv, Underline, UpDownAlign, UpDownChange, UpDownMax, UpDownMin, Units, UserData, Visible, Width, WinBorder, WinPos, WinType, ZOrder Supported PL/B GUI Objects; As a general comment, all events associated with the following PL/B GUI objects are supported by the PL/B Web Server. The following break down of supported PL/B Web GUI objects shows the properties and methods for these objects. BUTTON Object Unsupported Properties: ButtonType, DropID, FloatMenu, HelpID, Icon, Picture, Shield Unsupported Methods: None New Properties: WebClass New Methods: None CHECKBOX Object Unsupported Properties: DropID, FloatMenu, HelpID, PushLike, TriState Unsupported Methods: None New Properties: WebClass New Methods: None COLOR Object Unsupported Properties: None Unsupported Methods: ChooseColor New Properties: WebClass New Methods: None COMBOBOX Object Unsupported Properties: AutoRedraw, ComboStyle, DropID, HelpID, HorzExten, RowsVisible, Scrollbar, ScrollHide Unsupported Methods: Dir, GetTopIndex, SetTopIndex New Properties: WebClass New Methods: None DATALIST Object The DATALIST on tablets and phones behaves like a COMBOBOX. Unsupported Properties: AutoRedraw, ColumnWidth, DropID, HelpID, HorzExtent, Integral, MultiColumn, Printer, Scrollbar, ScrollHide, UseRTL Unsupported Methods: Dir, GetCaretIndex, GetTopIndex, SetCaretIndex, SetTopIndex, TabStops, AllowEmptyTab New Properties: WebClass New Methods: None EDITDATETIME Object Unsupported Properties: AutoEnter, AutoForward, CalBGColor, CalFGColor, Checked, DropDownAlign DropID, HelpID, MaximumDate, MinimumDate, ShowCheckbox, ShowUpDown, TitleFGColor, TitleBGColor, TrailingColor Unsupported Methods: UtcMode New Properties: WebClass New Methods: None EDITNUMBER Object Unsupported Properties: AutoEnter, ClipSib, DropID, EditHideSel, HelpID, LeftMargin, RightMargin Unsupported Methods: Clear, ClearUndo, Copy, Cut, Paste, Undo, ScrollToCaret, CanUndo New Properties: WebClass New Methods: None EDITTEXT Object Unsupported Properties: AutoEnter, ClipSib, DropID, EditHideSel, HelpID, LeftMargin, MaxCols, RightMargin Unsupported Methods: Clear, ClearUndo, Copy, Cut, Paste, Undo, ScrollToCaret, GetLineCount, GetFirstVisibleLine, LineIndex, LineFromChar, LineLength, LineScroll, GetCharIndexFromPosition, GetPositionFromCharIndex CanUndo, Scroll New Properties: WebClass New Methods: None FLOATMENU Object Unsupported Properties: None Unsupported Methods: None New Properties: WebClass New Methods: None FONT Object Unsupported Properties: Angle, Strike Unsupported Methods: ChooseFont New Properties: WebClass New Methods: None GROUPBOX Object Unsupported Properties: BackStyle, DropID Unsupported Methods: None New Properties: WebClass New Methods: None ICON Object Unsupported Properties: DropID, HelpID, ImageIndex, ImageList, Resource Unsupported Methods: None New Properties: AltText UrlSource WebClass New Methods: None LABELTEXT Object Unsupported Properties: UseAltKey Unsupported Methods: None New Properties: WebClass New Methods: None LINE Object Unsupported Properties: BdrPattern, DrawMode Unsupported Methods: None New Properties: WebClass New Methods: None LISTVIEW Object Unsupported Properties: Arrange, AutoRedraw, DropID, FloatMenu, FullRow, HideSel, HotTrack, HoverSel, HoverTime, LabelWrap, ViewStyle Unsupported Methods: Arrange, EnsureVisible, GetCountPerPage, SetImageList, SetImageListSmall, SetImageListState, SubItemHitTest, EnableScrollBar Under Unix\Linux the following methods are unsupported and need to be implemented: LoadXmlFile, SaveXmlFile, LoadCsvFile, SaveCsvFile New Properties: WebClass New Methods: Update MREGION Object Unsupported Properties: DropId Unsupported Methods: None New Properties: WebClass New Methods: None MENU Object Unsupported Properties: None Unsupported Methods: None New Properties: WebClass New Methods: None PANEL Object Unsupported Properties: AutoScroll, MinScrollH, MinScrollV, Scrollbar Unsupported Methods: SetHScrollPos, SetVScrollPos, SetBGColorTransparent, PrtPreviewOpen, PrtPreviewAction, PrtPreviewClose New Properties: WebClass New Methods: InnerHtml PICT Object Unsupported Properties: AutoScale AutoZoom, DropID, Resize, Scale, Scrollbar, Style, Resource, LinkHScroll, LinkVScroll, Page, PictSizeV, PictSizeH, Pos Unsupported Methods: GetPageCount, Rotate, GetZTop, GetZBottom, GetZLeft, GetZRight, WriteBmpFile New Properties: AltText UrlSource WebClass New Methods: None PROGRESS Object Unsupported Properties: DropID, HelpID Unsupported Methods: None New Properties: WebClass New Methods: None RADIO Object Unsupported Properties: DropID, FloatMenu, HelpID, PushLik, TriState Unsupported Methods: None New Properties: WebClass New Methods: None SHAPE Object Unsupported Properties: BackStyle (always transparent), BdrPattern, DrawMode, DropID, FillStyle Unsupported Methods: None New Properties: WebClass New Methods: None SLIDER Object Unsupported Properties: DropID, SelLength, SelRange, SelStart, Shift, TickFreq, TickStyle Unsupported Methods: None New Properties: WebClass New Methods: None STATTEXT Object Unsupported Properties: BackStyle, DropId, UseAltKey Unsupported Methods: None New Properties: WebClass New Methods: None SUBMENU Object Unsupported Properties: None Unsupported Methods: None New Properties: WebClass New Methods: None TABCONTROL Object Unsupported Properties: DropID, HelpID, MultiRow, TabFixHth, TabFixWth, TabStyle, TabWthStyle Unsupported Methods: HitTest, SetImageList, GetStyle, SetStyle, RemoveImageList New Properties: WebClass New Methods: None TIMER Object Unsupported Properties: None Unsupported Methods: None New Properties: WebClass New Methods: None WINDOW Object Limited Properties: Top, Left For a WINDOW object, these properties are ignored for object positioning within the browser's viewport. Unsupported Properties: AutoRedraw, AutoScroll, ButtonEnterKey, Caption, ClipCtrl, FloatMenu, Icon, InTaskBar, MaxBox, MDIBorder, MDIHeight, MDILeft, MDIScroll, MDITop, MDIWidth, MinBox, MinScrollH, MinScrollV, NegBorders NegMenus, NoMenuResize, RibMode, RightToLeft, SysMenu, Title, TopMost Unsupported Methods: Activate, GetActiveMdiChild, MDILayout, Show, MDIShow, PrintForm, FormToPict, BackGrndMouseMove, BrowseForFolder, SetHScrollPos, SetVScrollPos, MonitorInfo, Scale, ResetScaleOrigin, NotifyIcon, SetForegroundWindow, GetMdiChildCount, MdiChildPrev, MdiChildNext, MOUSEWHEELMODE, RibbonGetProp, RibbonSetProp, RibbonSetModes, RibbonShowContext, GetResNames, IsMinimized New Properties: DivisionID ShowWebMenu UseCss New Methods: None CSS Class Specifications: The PL/B Web Server uses CSS ( Cascading Style Sheet ) classes to invoke visual attributes\styles for PL/B GUI objects. The following table identifies the CSS classes defined in the 'Plbwebbasic.css' file which are used to invoke the appearance for the corresponding PL/B properties: PL/B Property Value CSS Class Name: Appearance/Styles: 3D bs1 Flat bs2 3D Flat bs3 3D Out bs4 WinBorder None wb0 No Border wb1 Fixed Single wb2 Fixed 3D wb3 Sizable 3D wb4 Fixed Dialog wb5 Sizable wb6 Fixed Tool wb7 Sizable Tool wb8 WinPos None wp0 Absolute wp1 Center wp2 Parent Center wp3 Maximize wp4 Minimize wp5 New PL/B Web GUI Object CLIENT Object This object has been added to provide access to the CLIENT browsers to retrieve information about the client browser environment. In addition, there is a method to add custom CSS classes to the browser environment that can be used with custom HTML pages created by the PL/B applications. PROPERTIES: none EVENTS: none METHODS: See descriptions in PLBCMP section for details. GetInfo Print Open AddCss FlushMessages PL/B Web Server Installation 1. The PlbWebSrv installation can be executed resulting in the creation of a base directory named 'c:\sunbelt\plbwebsrv.97'. The following sub-directories are created during the installation as follows: - c:\sunbelt\plbwebsrv.97\code Directory This directory contains the execution module for the PL/B Web Server along with the configuration to start and stop the server. - plbwebsrv.ini Default INI configuration file for the PWS server. - c:\sunbelt\plbwebsrv.97\code\Logs Directory This directory contains the PL/B Web Server log file. - c:\sunbelt\plbwebsrv.97\http_root Directory This directory is the root directory that contains the client side components that are dynamically transferred to the client when an HTTP logon request is processed by the PWS server. This directory contains the following: index.html PL/B Web Demo startup html script file. plbwebstart.html This HTML script is the entry script logic executed at the PWS client. plbwebcorstart.html This HTML script is the entry script logic executed at the PWS Sunbelt Web App. plbwebbasic.js This JSON logic is the main client side logic required to allow the PL/B instructions to perform expected client UI operations. plbwebctls.js This JSON logic is specialized client side logic used to support UI behaviors and visual affects required for PL/B objects. plbwebbasic.css This file is a Cascading Style Sheet logic used for describing the presentation\formatting of the Web objects implemented for the PWS server. The classes specified in the CSS file allow users to tailor the some characteristics of a Web object appearing in the PWS client viewport window for a Web Browser. plbwebipad.css This file is a Cascading Style Sheet used to contain specialized style classes used for the presentation of PWS client objects on an Ipad type of device. plbwebiphone.css This file is a Cascading Style Sheet used to contain specialized style classes used for the presentation of PWS client objects on an Iphone type of device. plbwebclose.html This HTML file is the default HTML page that is executed if the Plb Web Server has been configured to immediately close the client window. The 'plbwebclose.html' file is executed if the Plb Web Server has been configured by setting the PLBWEB_MENU keyword to be a '~' character or a 'plbwebclose.html' string. The SETMODE *PlbWebMenuUrl keyword can also be used invoke the 'plbwebclose.html' page. The 'plbwebclose.html' page can be used to close the browser window after a PL/B program exits and the PL/B Web Server child process terminates. plbweberror.html This HTML file is the default HTML page that is executed after a PLB error dialog is closed by an end-user in the client window. The 'plbweberror.html' can be modified or replaced by the PLB application developer to provide application specific behaviors at the client window after an error has occurred. A keyword named 'PLBWEB_ERROR={htmlfile}' can be specified in the 'PlbWebSrv.ini' configuration file to define a default end-user HTML page to be used in place of the 'plbweberror.html' file. In addition, a new *PlbWebErrorUrl={htmlfile} has been added to the GETMODE and SETMODE instructions to provide program control for setting the HTML page to be used when program termination with an error and the PL/B Web Server child process terminates. plbwebmenu.html This HTML file is a default HTML page that can be executed when a PLB program terminates normally. The 'plbwebmenu.html' can be modified or replaced by the PLB application developer to provide application specific behaviors at the client window when a PLB program normally terminates. A keyword named 'PLBWEB_MENU={htmlfile}' can be specified in the 'PlbWebSrv.ini' configuration file to define a default end-user HTML page or a PL/B program (i.e. answer.plc') to be used in place of the 'plbwebmenu.html' file. In addition, a new *PlbWebMenuUrl={htmlfile} has been added to the GETMODE and SETMODE instructions to provide program control HTML page used on program normal termination. plbwebnologon.html This HTML file is the default HTML page that is executed when the PLB Web Server rejects a client logon request. The execution of this HTML page is expected when the PLB Web Server is terminating after a '-t' or '-f' server command has been executed. plbwebbusy.html This HTML file is the default HTML page that is executed when the PLB Web Server rejects a client logon request because a client process could not be started due to a lack of system resources. These resource may be memory, shared memory, or system semaphores. - c:\sunbelt\plbwebsrv.97\http_root\images Directory This directory contains .JPG or .PNG image files that are dynamically downloaded to a PWS client device for a PL/B GUI ICON or PICT object. There is a new property for the ICON or PICT object named 'URLSOURCE={url}' that can be used to reference these images. - c:\sunbelt\plbwebsrv.97\http_root\css Directory This directory contains the sub-directories and Cascading Style Sheets required to support the 'jQuery' libraries that used for the PL/B Web Server operations. - c:\sunbelt\plbwebsrv.97\http_root\css\images Directory This directory contains the 'jQuery' images required to support 'jQuery' libraries operations. - c:\sunbelt\plbwebsrv.97\http_root\js Directory This directory contains the 'jQuery' Java script libraries used by the PL/B Web Server operations. - c:\sunbelt\plbwebsrv.97\demo Directory This is the base directory for the PL/B Web Server demo programs. This base directory has sub-directories that are required to allow the PL/B Web Server demo programs to execute for the current configuration specified in the 'plbwebsrv.ini' configuration file. - c:\sunbelt\plbwebsrv.97\demo\Programs Directory This directory contains the PL/B Web Demo programs that can be executed from a PWS client UI device. - c:\sunbelt\plbwebsrv.97\demo\Programs\source Directory This directory contains the source files for the PL/B Web Demo programs available for evaluation. - c:\sunbelt\plbwebsrv.97\demo\SampleShortCuts Directory This directory contains the PL/B Web Demo shortcuts that can be used for starting and stopping the PWS application from a PWS client browser device. 'Local PLB Web Demo Programs' Shortcut This shortcut is defined as 'http://127.0.0.1:8081/' that can start a PWS client browser by logging onto a PWS server in a local workstation mode. This logon shortcut can only be used when the PLB_ADDRESS keyword is assigned to the IP address of '127.0.0.1' in the 'plbwebsrv.ini' INI file settings. 'Local PLB Web Demo Programs (Debug)' Shortcut This shortcut is defined as 'http://127.0.0.1:8081/answer.plc?runopt=-dr'. This shortcut executes the 'answer.plc' program and starts a GUI debug session by logging on to the DBGIFACE GUI debugger. The DBGIFACE GUI debugger must already be started with the '-LISTEN' command line option. Otherwise, the 'answer.plc' program will start without a debug session. 'Local Answer With Parameter' Shortcut This shortcut is defined as 'http://127.0.0.1:8081/answer.plc?cmdline=parm1=5,%20Next'. This shortcut executes the 'answer.plc' program and it passes PL/B program parameters which are moved into the S$CMDLIN global variable when the program starts executing. 'Local Answer With Parameter (Debug)' Shortcut This shortcut is defined as 'http://127.0.0.1:8081/answer.plc?cmdline=parm1=5,%20Next&runopt=-dr'. This shortcut executes the 'answer.plc' program and it passes PL/B program parameters which are moved into the S$CMDLIN global variable when the program starts executing. Also, this shortcut starts a GUI debug session by logging on to the DBGIFACE GUI debugger. The DBGIFACE GUI debugger must already be started with the '-LISTEN' command line option. Otherwise, the 'answer.plc' program will start without a debug session. 'Network PLB Web Demo Programs' Shortcut This shortcut is defined as 'http://192.168.1.105:8081/' that can start a PWS client browser by logging onto a PWS server in a network workstation mode. This logon shortcut can only be used when the PLB_ADDRESS keyword is assigned to the IP address of '192.168.1.105:8081' in the 'plbwebsrv.ini' INI file settings and this IP address is valid for the PL/B Web Server. The IP address found in the PLBWEB_HOSTNAME keyword of the 'plbwebsrv.ini' file must be changed to the IP address of the workstation on the network where the 'plbwebsrv.exe' server is executing. The properties of the Network shortcut must be changed to use the same IP address of the workstation where the 'plbwebsrv.exe' server is executing. PL/B Web Server Getting Started A. Download the 'PlbWebSrv' from the Sunbelt Web Server. Install, the 'PlbWebSrv' server with a valid Sunbelt authorization number. B. Start the 'plbwebsrv' server using a shortcut found in the desktop 'Sunbelt' shortcut under the 'Plb Web Server 97' selections. C. In the following directory, the user can start the PWS Client browser device by selecting an appropriate program shortcut: 'c:\Sunbelt\plbwebsrv.97\code\demo\SampleShortCuts' D. At this point, a PL/B Answer program starts where the user can select sample evaluation programs. PL/B Web Server\Client Program Startup 1. The '.plc' extension must be specified in the PL/B Web Client URL because the '.plc' defines the Web mime type that allows the PL/B Web Server to invoke a PL/B program. Otherwise, an appropriate HTTP error occurs. 2. When the PL/B Web Server detects the '.plc' mime type, a bootstrap HTML page is sent to the PL/B Web Client browser. The bootstrap HTML page can be an existing file named '.html' that is located in the 'c:\Sunbelt\ plbwebsrv.97\http_root' directory. If the '.html' file DOES NOT exist, the default file named 'plbwebstart.html' is sent to the PL/B Web Client browser. The PL/B runtime program execution can ONLY be started by a valid bootstrap HTML page. 3. A user can create a custom bootstrap HTML page as follows: A. Copy the 'plbwebstart.html' to an 'progname.html' file which can be edited. The 'progname.html' file can then be loaded automatically by the PL/B Web Server to provide custom HTML, JavaScript, and CSS support for the user's program(s). B. Additions can be made to the original 'progname.html' file. However, all original code as copied from the 'plbwebstart.html' MUST NOT be REMOVED! Otherwise, indeterminate behavior will occur with unexpected results. C. The HTML in the 'progname.html' file can be changed to reflect the end-users application requirements. For example the following change could be applied: PL/B Web Start Window changed to Accounting Window D. Additional JS and CSS file references can be added to the 'progname.html' file. For example the following could be added: - The GETINFO instruction has been modified to return information for the PL/B Web Server and PL/B Web Client. GETINFO DATASOURCE Not supported GETINFO FONTS Not supported GETINFO TALBES Not supported GETINFO COLUMNS from DBFILEs Not supported GETINFO SYSTEM The GETINFO instruction retrieves the following information when the SYSTEM keyword is specified. When using an application server client or a PL/B Web Server client, the data comes from the client. PL/B Web Client System Data The SYSTEM data available from the PL/B Web Client is limited, not available, or not relevant. Therefore, only the following fields in the SYSTEM data are returned as useful\valid information. When the 'Operating system type' contains a value of 2 for Browser, then only the System data fields provide good useful data as reported for a PL/B Web Client. Column Size Value 1 1 Operating system type 1 = Windows 2 = Browser 13 4 Screen width 17 4 Screen height 576 2 Color bits Note: 1. All other fields for System data are reported as zero or blanks. 2. For additional browser client metadata, see the CLIENT object 'GetInfo' method for details. - A new method named 'InnerHtml' has been added for a PANEL object executing under a Plb Web Server. The PLB 'InnerHtml' method the user specified HTML data to a PLB PANEL that is implemented as a HTML Division that exists at the Plb Web Client. The 'InnerHtml' can only execute when a PANEL is empty and DOES NOT contain any GUI objects. However, after the 'InnerHtml' HTML has been applied to a PANEL object, PLB GUI objects can be applied\added to the PANEL after the 'InnerHtml' has successfully been executed. ............................................................... . InnerHtml Method for PANEL . The InnerHtml method can be used to send a HTML page to the a PANEL that DOES NOT contain any GUI objects. This method is only executed for a Plb Web Server runtime and it is ignored by any other PLB runtimes. The method uses the following format: [label] {object}.InnerHtml GIVING {return}: USING [*Html=]{htmlpage}[: [*Flags=]{flags}] Where: {label} is an optional Program Execution Label. {object} is a required PANEL object to be accessed. {return} is a Numeric variable that returns the pass\fail results. {htmlpage} is a Character String variable or literal that contains the HTML page that is to be sent to a PANEL object on a Plb Web Client. {flags} is a Numeric variable or decimal number whose value provides bit mask values that are used to enforce specialized behaviors. This parameter is optional. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is always cleared. 2. The ZERO flag is set to be TRUE when the return value is zero. A {return} value of zero indicates that the method executed successfully. 3. The OVER flag is set to be TRUE if the {return} variable is too small to store that value without being truncated. 4. The PANEL 'InnerHtml' behavior flags are defined as follows: Bit Mask Behavior Flags Comment 0x00000000 When all of the {flags} bits are zero, the {htmlpage} data string is sent to the PANEL object exactly as provided by the user application. 5. The 'InnerHtml' method does not send the {htmlpage' data to the PANEL if the PANEL has PLB GUI child objects. In this case, the {return} value is returned as a value of 1. 6. After the 'InnerHtml' method has been successfully executed, PLB GUI objects can be added\created to the PANEL object. - A new method named 'Update' has been added for a LISTVIEW object executing under a PL/B Web Server. This method can be used to force an immediate update of any pending data for a LISTVIEW on a PL/B Web Client. By default any pending LISTVIEW data is automatically updated by a EVENTWAIT instruction. The 'Update' method can be used to force an immediate update under program control. ............................................................... . Update Method for LISTVIEW . The Update method can be used to force an immediate update of any pending data for a LISTVIEW on a PL/B Web Client. By default any pending LISTVIEW data is automatically updated by a EVENTWAIT instruction. The 'Update' method can be used to force an immediate update under program control. The method uses the following format: [label] {object}.Update 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 always returns a value of zero. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is always cleared. 2. The ZERO flag is always set to be TRUE. 3. The OVER flag is always set to be FALSE. - Added new GUI object named CLIENT. The CLIENT object can be used to execute methods that fetch browser metadata or perform browser specific operations at the PL/B Web client. See the descriptions in the PLBCMP section for more detailed information on the CLIENT object. - The WINAPI and PROFILE instructions have been modified to support the PL/B Web Client operations. PROFILE Instruction The PROFILE instruction has been modified to support PL/B Web Client JavaScript functions that have been previously loaded into a Web Browser. label PROFILE {lib},{entry},{rettype}[,{parmtype}...] Where: {lib} Required. This parameter can be specified in one of two formats: 1. This parameter can specify the name of a Dynamic-Link Library that is to be loaded and called using the entry point specified by the {entry} function name. 2. This parameter can be specified as the string "!JS" not including the double quotes. When this library type is used, the {entry} MUST be a valid JavaScript function the currently loaded in the PL/B Web Client environment. The JavaScript functions are case sensitive. The JavaScript library type is ONLY valid when a PL/B Web Server runtime is being used. Optionally, this parameter can be specified to include a JavaScript 'iframe name' to be referenced\used by the JavaScript function. In this case, the {lib} parameter is specified as "!JS@iframename" not including the double quotes. An example for specifying an iframe could be the "!JS@frame1" string. {entry} Required. This name defines the entry point or JavaScript function to be called. This name depends on the {lib} parameter setting for this PROFILE definition. Example: . . Sample to execute a PL/B Web Server test JavaScript . Functions named 'PlbApiTest' and 'PlbApiTest1' which . can be found in the 'plbwebctls.js' JavaScript file. . SampJSN PROFILE !JS, PlbApiTest, INT1, DIM SampJS PROFILE !JS, PlbApiTest, DIM, DIM SampJS1 PROFILE !JS, PlbApiTest1, DIM, DIM . WINAPI Instruction The WINAPI instruction calls an OS routine depending on the type of PL/B runtime being used. The WINAPI calls a 32-bit Dynamic-Link Library entry point when the PROFILE defines a DLL library entry point for the Windows OS. The WINAPI calls an entry point when a shared object library (.so) is defined by the PROFILE using a Unix runtime. The WINAPI calls a JavaScript library function the is currently loaded into a PL/B Web Client environment when the PROFILE defines a '!JS' JavaScript library function. Note: 14. When using a PL/B Web Server, the WINAPI can be used to execute an API function as normally expected for any OS library functions (i.e. DLL or .so ) using all PL/B runtimes. However, if the PROFILE specified the '!JS' library type, then a WINAPI using this PROFILE can ONLY be executed using a PL/B Web Server. Example: . . Sample to execute a PL/B Web Server test JavaScript . Functions named 'PlbApiTest' and 'PlbApiTest1' which . can be found in the 'plbwebctls.js' JavaScript file. . SampJSN PROFILE !JS, PlbApiTest, INT1, DIM SampJS PROFILE !JS, PlbApiTest, DIM, DIM SampJS1 PROFILE !JS, PlbApiTest1, DIM, DIM . Dimparm DIM 40 Num Integer 1 . MOVE "5" TO DimParm WINAPI SampJsN Giving Num Using Dimparm . . The last WINAPI called the JavaScript function named . 'PlbApiTest' which exists in the 'plbwebctls.js' which . has been automatically downloaded from the PL/B Web . Server when the program was started. . - The CLOCK VERSION instruction has been modified to return PL/B Web Server and client information as follows: 19-26 Client engine name (only reported by PLBSERVE and PLBWEBSRV) cliwin PLBCLIENT clicon PLCCLICON Console cliwcepk PLBCLIENT Pocket PC cliwcehh PLBCLIENT Hand Held cliwcept PLBCLIENT Palm Top webbrw Web Browser client 27-31 PLBCLIENT version number using PLBSERVE JavaScript version number using PLBWEBSRV ------------------------------------------------------------------------------- PLBWIN, PLBNET - Modified the GUI runtime version checking to support the Windows OS file version specified in a 'xx.yy.aa.bb' format. Prior to this change, the runtime only supported the format of 'xx.yy.nnnnn' where the 'nnnnn' build value was specified as '(aa << 16) + bb'. With this change, the runtime version check supports either format. See the Sunbelt PL/B Runtime Reference for more details for the INI '[vercheck]' description found in the 'Language Runtimes\PLBWIN,PLBCON\Program Information File' manual section. Example of [vercheck] using either Windows OS file version format: Both of the examples are the same and verify the same Windows OS file version given in two formats: Example 1 using 'xx.yy.nnnnn' format: [vercheck] VERSION001 = "libeay32.dll" >= 1.0.65543 Example 2 using 'xx.yy.aa.bb' format: [vercheck] VERSION001 = "libeay32.dll" >= 1.0.1.7 ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - Added a new keyword named 'SUBHEADER={svar}' to the GETFILE\SETFILE instructions when using an XFILE. See the compiler descriptions for more details. - Modified the runtimes to avoid unnecessary socket errors after a Data Manager child shutdown action has been executed. This helps to eliminate unnecessary log entries in the PLBSERVE log file that reported possible DM socket error message after a DM child shutdown operation. - Modified the HTTP instruction to support a new *FLAGS bit value named $HTTP_FLAG_RAWBINARY. This new flags setting can optionally be used when the $HTTP_FLAG_RAWCOMMAND bit is specified. If the $HTTP_FLAG_RAWBINARY is specified with the $HTTP_FLAG_RAWCOMMAND bit value, the raw data specified in the {resourcePath} parameter is sent to a Web Server as binary data that can include NULL (binary zero) characters. If the $HTTP_FLAG_RAWBINARY bit value is ignored if the $HTTP_FLAG_RAWCOMMAND bit value is not set in the *FLAGS value. $HTTP_FLAG_RAWBINARY 0x00000040 If both the $HTTP_FLAG_RAWCOMMAND and the $HTTP_FLAG_RAWBINARY bit values are set for the *FLAGS bit mask value, all of the data found in the {resourcePath} parameter is sent to the Web Server as binary data. This means that any NULL (binary zero) characters are also sent. This bit value allows binary data to be sent to a Web Server. - Modified the SQLIO operations to provide more debug log information when the PLB_SQLIO_DEBUG_LOG keyword is being used. This includes timestamp and process identification information in addition to other SQL log entries. - Modified the PLB_SQLIO_DEBUG_LOG keyword operations to support log output from multiple PLB programs at the same time when the '+' append mode is being used. When the '+' append mode is used, the runtime now locks the log file which allows ONLY one PLB application to log SQLIO operations at any give point in time. Therefore, the PLB_SQLIO_DEBUG_LOG keyword should ONLY be used when absolutely necessary. - Modified the IFILE enqueue implicit lock to terminate with an I05 error when an invalid OS file handle is being used. Prior to this change a READ IFILE could hang indefinitely when an OS invalid file handle was being used for the READ IFILE and a FILEPI was NOT being used. - Modified the SQLIO operations to give I86 errors instead of an I03 errors. This change is being done to eliminate any confusion as to the description\interpretation of the subcode error values. - Corrected a problem where the HTTP instruction was processing to cause receive timeout when the HTTP header had a 'Content-Length: 0' declared as received from the Web server. In this scenario, the *FLAGS $HTTP_FLAG_RAW_RESULT was not being used and therefore a receive timeout should not have occurred. - Corrected a problem where XML attributes fields for the root element were being ignored by an OPEN XFILE operation. Thus, a READ XFILE could not retrieve the root element attribute fields. - Made a change to correct a problem where a DBFETCH was always setting the EOS flag when a SQL column was defined as a VARCHAR SQL type using a Microsoft SQL Server. - Corrected a problem where an I03 or I86 error could occur unexpectedly when a SQLite database is being used by multiple PLB programs at the same time. In this scenario, the PLB runtime waits up to 50 seconds when a SQLite database busy status is detected. - Corrected a HTTP instruction problem where an unexpected 'Error: 30' occurred when a HTTP instruction without an *TRACE\*TRACEAPPEND keyword is executed following the execution of an HTTP instruction with an *TRACE\TRACEAPPEND keyword. - Corrected a FUNCTION cleanup problem where DIM pointers that were not local variables to a FUNCTION could unexpectedly be cleared when they were specified in a VARLIST that existed as a local varlist to a FUNCTION. This problem was indeterminate depending on where the affected DIM pointer was located in the VARLIST variables. Example: NAME INIT "Edward" pDIM DIM ^,NAME pDIMx DIM ^,NAME . CALL Func DISPLAY "pDIMx..:",pDIMx DISPLAY "pDIM...:",pDIM KEYIN "Hit enter to exit:",s$cmdlin SHUTDOWN . Func FUNCTION ENTRY . varx DIM 20 vary DIM 20 . varlist VARLIST varx, pDIM varlist1 VARLIST vary, pDIMx . FUNCTIONEND . ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV - Modified the runtimes to give an U68 error when a restricted PLB program is being executed from a runtime command line. See the PLBCMP description for more details. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Added new method for a WINDOW object named 'IoCancelMode'. This new 'IoCancelMode' method is used to specify that a Window close action on a WINDOW object aborts a FILE, AFILE, or IFILE READ instruction that is currently active. The Window close action can occur when the end-user uses the Window title bar close button or if the end-user closes the MAINWINDOW using the 'File\exit' menu selection. The IoCancelMode method is described as follows: ............................................................... . IoCancelMode Method for WINDOW . The IoCancelMode method sets the state for a WINDOW object to allow a close Window action to cancel a FILE, AFILE, or IFILE read that is active. The method uses the following format: [label] {object}.IoCancelMode GIVING {return} USING [*VALUE=]{value} Where: {label} is an optional Program Execution Label. {object} is a required WINDOW object to be accessed. {return } is a Numeric Variable that is always zero. {value} is a Numeric Variable or a decimal number. Flags Affected: OVER, ZERO Note the following: 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. 3. If the {value} is a zero, the WINDOW object is reset to not cancel an IO read on a close Window action. If the {value} is non-zero, the WINDOW object is set to cancel an IO read on a Window close action. 4. The IoCancelMode for a WINDOW ONLY takes affect when the $EventClose for the WINDOW object is registered. This behavior is implemented to prevent any accidental cancel operations for IO. 5. The IoCancelMode for the MAINWINDOW ALWAYS takes affect when a Window close action is invoked. The close action for the MAINWINDOW does not depend on the registration of the close event. - Added two new keywords named 'PLBWINO104MODE={nvar}' and 'PLBWINO104COUNT={nvar}' to GETMODE and SETMODE. The intended use of these keywords is to give PL/B developers a means of working around O104 problems caused by unexpected Font Size usage which can occur in some Windows OS environments. These keywords are ONLY implemented to affect the behaviors associated with O104 errors that can occur for EDITTEXT, EDITNUMBER, and RICHEDITEXT objects. These keywords ONLY affect the O104 errors caused when a Font Size height is too large to fit within the objects. Also, the PLBWINO104COUNT value can be used by the PL/B application to determine that there is a Font Size issue that needs to be addressed. These keywords are described as follows: GETMODE PLBWINO104MODE={nvar} This keyword returns the current runtime behavior mode value that is currently being used to control O104 errors for an EDITTEXT, EDITNUMBER, and RICHEDITTEXT. The expected mode values are: 0 - This is the default runtime value where an O104 error is generated when the Font character height is larger than an EDITTEXT, EDITNUMBER, or RICHEDITTEXT rectangle height. 1 - This mode value causes the runtime to ignore all O104 errors that occur because the Font character height is larger than an EDITTEXT, EDITNUMBER, or RICHEDITTEXT rectangle height. 2 - This mode value causes the runtime to automatically resize the height of an EDITTEXT, EDITNUMBER, or RICHEDITTEXT object during an object CREATE operation when the Font character height is larger than an EDITTEXT, EDITNUMBER, or RICHEDITTEXT rectangle height. The automatically resizing in this case ONLY occurs if an O104 error is ignored. 3 - This mode value causes the runtime to automatically resize the height of an EDITTEXT, EDITNUMBER, or RICHEDITTEXT object during an object CREATE operation when the Font character height is larger than an EDITTEXT, EDITNUMBER, or RICHEDITTEXT rectangle height. The automatically resizing in this case ALWAYS occurs when the Font height is too larger for the allowed objects including object creation of PLF forms. PLBWINO104COUNT={nvar} This keyword returns the current runtime O104 event counter. The runtime O104 event counter is incremented any time that a runtime action is taken because the PLBWINO104MODE value is non-zero. SETMODE PLBWINO104MODE={dnumnvar} This keyword sets the current runtime behavior mode value that is to be used to control O104 errors for an EDITTEXT, EDITNUMBER, and RICHEDITTEXT. The supported mode values are: 0 - This is the default runtime value where an O104 error is generated when the Font character height is larger than an EDITTEXT, EDITNUMBER, or RICHEDITTEXT rectangle height. 1 - This mode value causes the runtime to ignore all O104 errors that occur because the Font character height is larger than an EDITTEXT, EDITNUMBER, or RICHEDITTEXT rectangle height. 2 - This mode value causes the runtime to automatically resize the height of an EDITTEXT, EDITNUMBER, or RICHEDITTEXT object during an object CREATE operation when the Font character height is larger than an EDITTEXT, EDITNUMBER, or RICHEDITTEXT rectangle height. The automatically resizing in this case ONLY occurs if an O104 error is ignored. 3 - This mode value causes the runtime to automatically resize the height of an EDITTEXT, EDITNUMBER, or RICHEDITTEXT object during an object CREATE operation when the Font character height is larger than an EDITTEXT, EDITNUMBER, or RICHEDITTEXT rectangle height. The automatically resizing in this case ALWAYS occurs when the Font height is too larger for the allowed objects including object creation of PLF forms. >3 - All other values are executed the same as the default value of zero. PLBWINO104COUNT={dnumnvar} This keyword sets the current runtime O104 event counter value. The most logical use of this keyword is to allow the user to clear the O104 event counter. - Changes have been made to allow runtime behaviors to be altered as applied when the PRTPAGE *UNITS=*FONT control is used while generating Sunbelt PDF output for the 'pdf:' device. See the descriptions below for more details. These changes ONLY apply to Windows runtimes when there is a Windows OS default printer available for printing. - Modified the InsertItem instruction for a DATALIST object to eliminate the limitation of 40,961 bytes on the output data size. - Modified the 'FindDir' instruction to allow the data to be output to a DATALIST object. The size of the finddir data stored in the DATALIST is only limited by any Windows OS control limitations. In addition, a new FINDDIR option named 'MAXSIZE={nvar}' has been added. This new option returns the required buffer size required to receive all of the finddir data available. The FINDDIR instruction description is modified as follows: [label] FINDDIR {source}{sep}{dest}{sep}[MODE={mode}][: ITEMCOUNT={count}][: MAXSIZE={maxsize}] Where: {dest} Required. A previously defined Character String Variable or DATALIST object that receives the selected file and directory name along additional size and timestamp data. {maxsize} Optional. A previously defined Numeric Variable that receives the buffer size required to store the finddir in the {dest} variable. Note: 4. If the {source} variable data directory name starts with an exclamation point (!), the file and directory data is retrieved from a PLBCLIENT workstation. However, the exclamation point (!) is NOT supported when executing a program using the Plb Web Server and an U67 error occurs. - Modified the FLAGS option for the PRTOPEN and PRTPLAY instructions to support a new bit value PDF_FLAGS_MIXEDCASE_FILENAME. This new bit value can be specified in the FLAGS bit mask value to allow the PDF processing to force the MIXED character case for the user specified PDF file name. PDF_FLAGS_MIXEDCASE_FILENAME EQU 256 When this bit is turned on, the processing for the PDF file name is used in a MIXED character case mode. In this case, the PDF file name as specified by the PLB application is used without being converted as per the runtime PLB_FNC keyword setting. - A new method named 'IsMinimized' has been added for a WINDOW object. This method returns a value of 1 if the WINDOW is minimized. If the WINDOW is not minimized a value of 0 is returned. If the 'IsMinimized' is not support by a runtime, a value of 0xFFFFFFFF is returned. ............................................................... . IsMinimized Method for WINDOW . The IsMinimized method can be used to determine whether a Window for a WINDOW object is currently minimized or not. The method uses the following format: [label] {object}.IsMinimized GIVING {return}: Where: {label} is an optional Program Execution Label. {object} is a required WINDOW object to be accessed. {return} is a Numeric variable that returns the window minimized results for the WINDOW. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is always cleared. 2. The ZERO flag is set to be TRUE when the return value is zero. A {return} value of zero indicates that the WINDOW is not minimized. 3. The OVER flag is set to be TRUE if the {return} variable is too small to store that value without being truncated. - Added a new keyword named '*EDITDATETIMEMODE={nvar}' for the GETMODE and SETMODE instructions. This keyword can be used to determine and change the default operations by the runtime for the EDITDATETIME object. By default as originally implemented, the runtime behaviors for an EDITDATETIME object are affect by the following instructions when a 'checkbox' is used: GETITEM EDITDATETIME, 0, DimDateVar - Returns current assigned date time of EDITDATETIME when checkbox is checked. - Returns current assigned date time of EDITDATETIME when checkbox is unchecked. SETITEM EDITDATETIME, 0, DimDateVar - Sets the current assigned date time and sets the checkbox state when a valid date time is specified in the DimDateVar variable. - If the DimDateVar is a NULL DIM variable, the current assigned date time or the current checkbox checked state remain unchanged. GETPROP EDITDATETIME, TEXT=DimDateVar - Returns current assigned date time of EDITDATETIME when checkbox is checked. - Returns current assigned date time of EDITDATETIME when checkbox is unchecked. SETPROP EDITDATETIME, TEXT=DimDateVar - Sets the current assigned date time and sets the checkbox state when a valid date time is specified in the DimDateVar variable. - If the DimDateVar is a NULL DIM variable, the current assigned date time or the current checkbox checked state is set to be unchecked. The EDITDATETIMEMODE bit mask values specified in the {nvar} parameter are defined as follows: EDITDATETIMEMODE Bit Mask Settings 0x0001 ENABLE\DISABLE EDITDATETIME checkbox null mode If this bit is set off and an EDITDATEIME is using a checkbox, the behaviors of GETITEM, SETITEM, GETPROP, and SETPROP are the same as described above. When the EDITDATETIMEMODE bit state is set to be on and an EDITDATETIME object is using a checkbox, the following instruction behaviors are executed by the runtime: GETITEM EDITDATETIME, 0, DimDateVar - Returns current assigned date time of EDITDATETIME when checkbox is checked. - Returns current assigned date time of EDITDATETIME when checkbox is unchecked. SETITEM EDITDATETIME, 0, DimDateVar - Sets the current assigned date time and sets the checkbox state when a valid date time is specified in the DimDateVar variable. - If the DimDateVar is a NULL DIM variable, the current assigned date time remains unchanged and the checkbox is set to be unchecked. GETPROP EDITDATETIME, TEXT=DimDateVar - Returns current assigned date time of EDITDATETIME when checkbox is checked. - Returns current assigned date time of EDITDATETIME when checkbox is unchecked. SETPROP EDITDATETIME, TEXT=DimDateVar - Sets the current assigned date time and sets the checkbox state when a valid date time is specified in the DimDateVar variable. - If the DimDateVar is a NULL DIM variable, the current assigned date time remains unchanged and the checkbox is set to be unchecked. - Added two new methods for an EDITDATETIME object that are named 'GetDTFlags' and 'SetDTFlags'. These methods can be used to manage the default behaviors being used for an EDITDATETIME object. ............................................................... . GetDTFlags Method for EDITDATETME . The GetDTFlags method returns the current behavior bit mask value being used for an EDITDATETIME object. The method uses the following format: [label] {object}.GetDTFlags GIVING {return} Where: {label} is an optional Program Execution Label. {object} is a required EDITDATETIME object to be accessed. {return} is a Numeric variable that returns the current behavior bit value being used to control specific processing behaviors of the object. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is always cleared. 2. The ZERO flag is set to be TRUE when the return value is zero. A {return} value is a 16 bit value. 3. The OVER flag is set to be TRUE if the {return} variable is too small to store that value without being truncated. 4. The {return} bit mask values are defined as follows: Behavior Bit Mask Comment 0x0001 - When this bit is turned on, the EDITDATETIME reports will always use NULL data any time that the DTS_NONE style is being used. Therefore, the behavior of the EDITDATETIME object is changed as described for the GETMODE *EDITDATETIMEMODE keyword. ............................................................... . SetDTFlags Method for EDITDATETME . The SetDTFlags method changes the current bit mask value used by an EDITDATETIME object to control default behaviors. The method uses the following format: [label] {object}.SetDTFlags GIVING {return}: USING [*Value=]{bitmask} Where: {label} is an optional Program Execution Label. {object} is a required EDITDATETIME object to be accessed. {return} is a Numeric variable that returns as a zero value. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is always cleared. 2. The ZERO flag is set to be TRUE when the return value is zero. The {return} value is always returned as zero. 3. The OVER flag is set to be TRUE if the {return} variable is too small to store that value without being truncated. 4. The {bitmask} bit mask values are defined as follows: Behavior Bit Mask Comment 0x0001 - When this bit is turned on, the EDITDATETIME reports will always use NULL data any time that the DTS_NONE style is being used. Therefore, the behavior of the EDITDATETIME object is changed as described for the GETMODE *EDITDATETIMEMODE keyword. - Corrected a problem where the PRTOPEN FLAGS PDF keyword settings were not used when the PRTCLOSE DIALOG keyword was being used. - Corrected a problem where a PRTOPEN or PRTPLAY instruction could cause the current working directory to be changed to be changed when an OS Dialog is used by the end-user to select the PDF file to be written. This problem can occur if the end-user browses to a directory in the 'Save PDF as' Dialog to select a PDF file. The runtimes\clients have been modified to save\restore the current working directory before\after the PDF selection Dialog is used. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), ALL GUI CLIENTS - Added a new GETMODE keyword named '*LASTDIALOGPDF={svar}'. This keyword returns the fully qualified path and name of the last '.pdf' file that was selected by an end-user using the OS 'Save PDF as' Dialog. Note: 1. The last dialog PDF file name continues to be returned by the GETMODE *LASTDAILOGPDF keyword can ONLY be retrieved once. The last dialog PDF file name is automatically cleared by the GETMODE *LASTDIALOGPDF operation. 2. The last dialog PDF file name is cleared when a CHAIN operation is executed. 3. The last dialog PDF file name is cleared when a Print Preview dialog is presented to the end-user. Example: PF PFILE PdfFileName DIM 100 . PRTOPEN PF, "pdf:", "JobName", PDFNAME="" PRTPAGE PF;"Testing Save PDF As Dialog" PRTCLOSE PF //OS Save Dialog used! . GETMODE *LASTDIALOGPDF=PdfFileName DISPLAY "PdfFileName...:",*ll,PdfFileName,"<<<" . ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - When the '*UNITS=*FONT' control is used in a PRTPAGE, the font metrics including the average character height and width are used in generating the printed output. In this case, the current font metrics are retrieved from the Windows OS as determined after the font has been created for a specific font size and selected into a device context for a printer. The current font metrics MAY give different results depending on the print driver and the resolution used for a given printer. When the Sunbelt 'pdf:' device is being used to generate PDF output, the 'pdf:' is directly generating the PDF output without requiring a Windows OS printer. By default, the font metrics are retrieved directly from the font files being used. Since the font metrics are not being generated via a device context for a printer device, the print positions can be different from direct printed results using an OS print driver. Therefore, a PLB application using the PRTPAGE '*UNITS=*FONT' control can give unexpected results for the Sunbelt PDF print positions as compared to the direct printed output. Changes have been made in the 9.7 release to allow the PLB developer to change the behavior of the runtime such that the current default printer can be used to render Windows fonts when PRTPAGE operations with '*UNITS=*FONT' are being used. The following features have been made to the 9.7 runtime to control the PDF font rendering issue for '*UNITS=*FONT': 1. A new keyword named 'PLBWIN_PDFDEFPRTMETRICS={ON|OFF}' has been added to set the default state that enables or disables the default printer used for rendering fonts for PDF generation. By default, the runtime behavior is the same as setting this keyword to an OFF state. When this keyword is used and set to an ON state, the runtime uses that current default printer for the Windows OS at the system where the runtime is executing to render fonts for '*UNITS=*FONT' operations. The default behavior is to process font metrics directly from the font files without font rendering. 2. A keyword named '*PDFDEFPRTMETRICS={nvar}' has been added for the GETMODE\SETMODE instructions. If this keyword is set to a non-zero value, the runtime turns on font rendering using the current default printer for '*UNITS=*FONT' operations when generating Sunbelt PDF output. The GETMODE can be used to retrieve the current state value for the *PDFDEFPRTMETRICS keyword. 3. A keyword named '*PDFDEFPRTNAME={svar}' has been added for the GETMODE\SETMODE instructions. This keyword can be used to assign a specific Windows OS printer device that is to be used in place of default printer when rendering fonts for the '*UNITS=*FONT' operations during Sunbelt PDF output. Example: PF PFILE UsrPrt INIT "Microsoft XPS Document Writer" . PRTOPEN PF,"pdf:", "MyJob", PDFNAME="My.pdf" ..... . Set user printer used for font rendering to generate . font metrics. . SETMODE *PDFDEFPRTNAME=UsrPrt: *PDFDEFPRTMETRICS=1 //Turn on font rendering . PRTPAGE PF; *FONT=">Arial", *UNITS=*FONT; . PRTPAGE PF;*P10:15,"Print Data at column 10 row 15..." ... - Corrected a problem where a PRTOPEN or PRTPLAY instruction could cause the current working directory to be changed to be changed when an OS Dialog is used by the end-user to select the PDF file to be written. This problem can occur if the end-user browses to a directory in the 'Save PDF as' Dialog to select a PDF file. The runtimes\clients have been modified to save\restore the current working directory before\after the PDF selection Dialog is used. - Corrected a problem where a STATTEXT on a PANEL could disappear after a drag action when using DRAGITEM operations. This change also helps to minimize object flashing during the DRAGITEM dragging actions. - Corrected a problem where scaling of an EDITTEXT object with some fonts was causing the EDITTEXT object to disappear or be invisible. This problem was occurring because some fonts do not scale with linear results. If the character height for a given font is too large for an EDITTEXT, EDITNUMBER, or RICHEDITTEXT object, the object may NOT become visible as normally expected. To address this issue, the runtime now properly detects and automatically resizes the object heights to avoid this problem. - Corrected a problem where an O123 error could occur when a PLF form collection was being used in a SETPROP when the '*Property' syntax was being used and the destination was a PLF form referenced via a COLLECTION pointer. For this scenario, the runtime was giving an unexpected O123 error. This problem could only occur after a 9.5B compiler or later compiled a problem containing a SETPROP with the '*Property' syntax used. Example of generic named property problem: . myFont FONT myPlf PLFORM myCol COLLECTION ^, myPlf . FORMLOAD myPlf . CREATE myFont, "Script" . SETPROP myCol, *FONT=myFont //Caused O123 unexpectedly. . LOOP WAITEVENT REPEAT . Note: 1. If the 'SETPROP myCol, FONT=myFont' instruction syntax is used, the PLBCMP processes the FONT property as a Sunbelt property for Sunbelt GUI objects. In this case, the program code is generated to allow the runtime to directly process the FONT property for the Sunbelt GUI object. 2. If the 'SETPROP myCol, *FONT=myFont' instruction syntax is used, the PLBCMP processes the FONT property as a generic property by passing the property text name (i.e. 'FONT') to the PLB runtime to be processed. In this case, the PLB runtime MUST find the property name string in the PLB property tables as the SETPROP instruction can be executed. If the PLB property is NOT found in the runtime tables, an O123 error occurs. 3. Prior to release 9.5B, the PLBCMP compilers detected the two SETPROP syntax formats and ALWAYS generated the program code as expected in item (1.) above. Starting with changes made in release 9.5B, the PLBCMP compilers detect the two SETPROP syntax formats and the program code is generated appropriately as described in items (1.) and (2.) above. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to support a new GETMODE keyword named '*LASTDIALOGPDF={svar}'. See the runtime description for this keyword. - Added a new keyword named 'SUBHEADER={svar}' to the GETFILE\SETFILE instructions when using an XFILE. GETFILE (XFILE) SUBHEADER={svar} This keyword returns the current XFILE sub-header that has been assigned to the XFILE using a SETFILE instruction. If a sub-header has been assigned to the XFILE, this sub-header is output to the XML data immediately following the XML declaration line that contains the version. SETFILE (XFILE) SUBHEADER={svarslit} This keyword sets the current XFILE sub-header. When a sub-header is assigned to the XFILE, this sub-header is output to the XML data immediately following the XML declaration line that contains the version. The GETFILE SUBHEADER operation can be used to retrieve the current XFILE sub-header string that has been set by a SETFILE. Note: 1. When a SUBHEADER string is assigned to an XFILE, the user data string is output into the XML data stream exactly as specified by the 'SETFILE SUBHEADER={svar}' instruction. The PL/B program is response for providing a properly formatted XML sub-header data string. - Modified the GETMODE and SETMODE instructions to support two new keywords named 'PLBWINO104MODE={nvar}' and 'PLBWINO104COUNT={nvar}'. Please see the runtime descriptions for more information. - Modified PLBCMP to disable the 'PLBWIN_XPIO=ON' runtime setting before compiling a program. This change corrects a problem where the PLBCMP was changing the timestamp of the '.pls' source files when using a Windows XP system. - Added two new keywords named '*PDFDEFPRTMETRICS={nvar}' and '*PDFDEFPRTNAME={svar}' to the GETMODE and SETMODE instructions. See the detailed descriptions in the runtime sections. - Added new properties for PLB Web Server support: ALTTEXT={svarslit} CREATE GETPROP This property can be used in a CREATE or GETPROP for an ICON or PICT object. This property defines the alternate text that is to be rendered in place of an image when the image is not shown. An image may not appear based on a browser configuration setting or because the image resource is not accessible. DIVISIONID={svarslit} CREATE GETPROP This property can be used in a CREATE or GETPROP for a WINDOW object. This property is only applied when the WINDOW object is created for a PL/B Web Server client. This property allows the WINDOW object to be included in a specific client division with name identification. The division identification string is case sensitivity. A division defines a named section in a HTML document. A division is used together with the CSS to layout a web page. The expected use of this property is for PL/B users who have advanced knowledge of Web Page development. This property allows those users to direct the PL/B WINDOW to a specific HTML division with a specific name. SHOWWEBMENU={dnumnvar} CREATE SETPROP GETPROP This property can be used in a CREATE or GETPROP to allow the control of Menus for a WINDOW object in the Web environment. The expected values of this property are: 0 Show all menus (Default) 1 Show only float menus 2 Show no menus URLSOURCE={svarslit} CREATE GETPROP This property is required to specify a URL for a Web resource to be used for a ICON or PICT object being presented by a PL/B Web Server client. The Web resource can be a .gif, .jpg, or .png file specified by the URL. Example: P PICT . CREATE P=5:10:5:15,"", URLSOURCE="images\sunbelt.png" In this case, the PL/B Web Server uses the URLSOURCE to download the image resource. The 'sunbelt.png' is located in the 'c:\Sunbelt\plbwebsrv.97\http_root\images' directory on the system where the PL/B Web Server is executing. Note: The URLSOURCE can reference any valid URL or Web Address with the image to be accessed\downloaded as the resource. As an example the following Sunbelt Web URL can be used: URLSOURCE="http://www.sunbelt-plb.com/images/logo8.gif" USECSS={svarslit} CREATE GETPROP This property can be used to specify a Cascading Style Sheet (CSS) file that is to be used by a PL/B Web Server client. This user defined CSS file can contain special user class names specified in a style sheet language format. Each CSS class describes the presentation semantics (look and format) of the Web objects used for the PL/B Web Server client. In addition to this user specified CSS file, the PL/B Web Server client uses the default CSS files named 'PlbWebBasic.css', 'PlbWebphone.css', and 'PlbWebIpad.css'. This property is only available for the WINDOW object. WEBCLASS={svarslit} CREATE SETPROP GETPROP This property can be used to specify a class name that is case sensitive and this class name must exist in one of the Cascading Style Sheet (.css) files that are being used by a PL/B Web Server client. This property is available for any GUI object allowed for the PL/B Web Server client. - Added new keywords for the GETMODE\SETMODE instructions used for PL/B Web Server support: GETMODE *PLBWEBERRORURL={svar} This keyword returns the current default html page to be invoked by a PL/B Web Server client when the PWS PL/B program terminates with an error. The {svar} string that is returned is a URL to a Html Web Page. *PLBWEBMENUURL={svar} This keyword returns the current default html page to be invoked by a PL/B Web Server client when the PWS PL/B program terminates normally without an error. The {svar} string that is returned is a URL to a Html Web Page. SETMODE *PLBWEBERRORURL={htmlpage} This keyword changes the current default html page that is to be used by a PL/B Web Server client when a PL/B program terminates with an error. If this keyword is not used and the runtime PLBWEB_ERROR keyword is not used, the PL/B Web Server defaults to an action using the last PL/B Web Client URL. This causes a behavior that is the same as when a browser reload\refresh action occurs. If the SETMODE *PLBWEBERRORURL is assigned to a '~' character the PL/B Web Server client defaults to use an html page named 'plbweberror.html'. If the {htmlpage} is NULL, the default behavior for the PL/B Web Server client is to perform a reload\refresh browser action for the original browser URL. *PLBWEBMENUURL={htmlpage} This keyword changes the current default html page that is to be used by a PL/B Web Server client when a PL/B program terminates without an error. If this keyword is not used and the runtime PLBWEB_MENU keyword is not used, the PL/B Web Server defaults to an action using the last PL/B Web Client URL. This causes a behavior that is the same as when a browser reload\refresh action occurs. If the SETMODE *PLBWEBMENUURL is assigned to a '~' character the PL/B Web Server client defaults to use an html page named 'plbwebclose.html'. If the {htmlpage} is NULL, the default behavior for the PL/B Web Server client is to perform a reload\refresh browser action using the original browser URL. - Added a new compiler command line option named '-r'. If this compiler is used, the compiler generates a PLC with a header setting that causes a 9.7 runtime version or later to give an U68 error when the restricted '.plc' program is being executed from a PLB runtime command line. The intended use of the restricted PLC is to protect from misuse or probing for PLB applications\programs by unauthorized end-users. A restricted PLC can be loaded and executed using PLB CHAIN and\or LOADMOD operations. Example: plbcmp prog -r -->Generates restricted PLC program! plbwin prog.plc -->Gives a U68 error! - Added new GUI object named CLIENT. The CLIENT instruction defines an object variable. This object variable allows access to the PL/B runtime client UI processing that is used to interface with the end-user. This object variable is implicitly created by the PL/B runtime and it DOES NOT require the use of the CREATE instruction before usage. Also, this object variable is not destroyed by the PL/B program. To define a CLIENT object, use one of the following statement formats: (1) [label] CLIENT [%] (2) [label] CLIENT (arraysize) (3) [label] CLIENT ^ (4) [label] CLIENT ^,{target} (5) [label] CLIENT ^(arraysize) (6) [label] CLIENT ^(arraysize),({target}),...,({target}) Where: label Optional. A Program Execution Label. % Optional. Denotes the item as being GLOBAL. arraysize Required. An integer decimal constant, CONST variable, or EQUATEd value indicating the number of array items. ^ Optional. Denotes the item as being a POINTER. target Required. The name of a previously defined data item of the same type. Flags Affected: NONE Note the following: 1. The CLIENT object represents the client UI component being used by a PL/B runtime to interface with the end-user. 2. There are NO properties for a CLIENT object. 3. There are NO events for a CLIENT object. 4. There are no GUI PL/B instructions other than GUI methods that are used with a CLIENT object. 5. The following methods are available for the CLIENT object: GetInfo Print Open AddCss FlushMessages ............................................................... . GetInfo Method for CLIENT . The GetInfo method retrieves basic metadata about the current client UI being used for the execution of a PL/B program. The method uses the following format: [label] {object}.GetInfo GIVING {return}: USING [[*OPTIONS=]{value}][: [*DELIMITER=]{delm}] Where: {label} is an optional Program Execution Label. {object} is a required CLIENT object to be accessed. {return } is a Character String Variable that returns the CLIENT object metadata. {value} is a Numeric Variable or a decimal number. {delm} is a Character String Variable or string literal. Flags Affected: OVER, ZERO Note the following: 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. 3. The 'GetInfo' method for the CLIENT object returns the client UI metadata as a string of ASCII fields separated using a delimiter character. The default delimiter character is the 0x7F character. The DELIMITER keyword can be used to change the delimiter character that is used to separate the metadata fields. 4. The metadata being returned by a PL/B runtime depends on the type of PL/B client UI that is being used. The following descriptions show the expected metadata returned based on the PL/B runtime types: WINDOWS Runtimes This method is ignored as implemented for Windows UI clients. PL/B Web Server This method represents the PL/B Web client. The following metadata fields are expected for a PL/B Web Client: Web Browser Screen Fields: These fields are being reported as returned by a Browser Screen object. availHeight The availHeight property returns the height of the user's screen, in pixels, minus interface features like the Windows Taskbar. availWidth The 'availWidth' property returns the width of the user's screen, in pixels, minus interface features like the Windows Taskbar. colorDepth The 'colorDepth' property returns the bit depth of the color palette for displaying images (in bits per pixel). height The 'height' property returns the total height of the user's screen, in pixels. pixelDepth The 'pixelDepth' property returns the color resolution (in bits per pixel) of the visitor's screen. width The 'width' property returns the total width of the user's screen, in pixels. Web Browser Navigator Fields: These fields are being reported as returned by a Browser Navigator object. appCodeName The 'appCodeName' property returns the code name of the browser. Note: All modern browsers returns "Mozilla", for compatibility reasons. appName The 'appName' property returns the name of the browser. appVersion The 'appVersion' property returns the version information of the browser. cookieEnabled The 'cookieEnabled' property returns a Boolean value that specifies whether cookies are enabled in the browser. language The 'language' property returns the language version of the browser. platform The 'platform' property returns for which platform the browser is compiled. product The 'product' property returns the engine (product) name of the browser. Note: This property may not work as expected. Both Gecko and WebKit browsers return "Gecko". userAgent The 'userAgent' property returns the value of the user-agent header sent by the browser to the server. The value returned, contains information about the name, version and platform of the browser. ............................................................... . Print Method for CLIENT . The Print method opens a Print Dialog Box at the PL/B Web client where a Browser is executing. The method uses the following format: [label] {object}.Print GIVING {return} Where: {label} is an optional Program Execution Label. {object} is a required CLIENT object to be accessed. {return } is a Numeric Variable. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is always set to TRUE. 2. The OVER flag is set to a FALSE state. 3. The print method prints the contents of the current window shown by the Browser. The print method opens the Print Dialog Box, which lets the user to select preferred printing options. ............................................................... . Open Method for CLIENT . The Open method opens a new Browser window. The method uses the following format: [label] {object}.Open GIVING {return}: USING [[*URL=]{url}][: [*OPTIONS=]{options}] Where: {label} is an optional Program Execution Label. {object} is a required CLIENT object to be accessed. {return } is a Numeric Variable. {url} is a Character String Variable or string literal. {options} is a Numeric Variable or a decimal number. Flags Affected: OVER, ZERO Note the following: 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. 3. The {url} string can be a link to any Web Server for which a Web Page is to be loaded into the new browser window. It should also be noted that the {url} string could actually be used to start another PL/B program in the new browser window. See the following link for more information on the definition\syntax of a URL: http://en.wikipedia.org/wiki/Uniform_resource_locator 4. The {options} value is available for future usage to implement special behaviors for this method. ............................................................... . AddCss Method for CLIENT . The AddCss method is used to load custom user CSS classes that can be referenced using the WEBCLASS property for the PL/B GUI objects. The method uses the following format: [label] {object}.AddCss GIVING {return}: USING [[*URL=]{url}][: [*OPTIONS=]{value}] Where: {label} is an optional Program Execution Label. {object} is a required CLIENT object to be accessed. {return } is a Numeric Variable. {url} is a Character String Variable or string literal. {value} is a Numeric Variable or a decimal number. Flags Affected: OVER, ZERO Note the following: 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. 3. The {url} string gives a link to allow a user custom CSS file to be loaded so the CSS classes can be referenced using the WEBCLASS property of PL/B GUI objects. 4. The {options} value is available for future usage to implement special behaviors for this method. ............................................................... . FlushMessages Method for CLIENT . The FlushMessages method causes any messages buffered by the PL/B Web Server to be flushed immediately to a PL/B Web client. The method uses the following format: [label] {object}.FlushMessages GIVING {return} Where: {label} is an optional Program Execution Label. {object} is a required CLIENT object to be accessed. {return } is a Numeric Variable. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is always set to TRUE. 2. The OVER flag is set to a FALSE state. - Corrected a U02 compiler error that would occur when the RECORD LIKEPTR keyword was used and the reference record label was a pointer. The compiler should have reported a compilation error. Example of Error: REC RECORD ^ ... RECX RECORD LIKEPTR REC ;Compilation is expected! ------------------------------------------------------------------------------- PLBWSEC.DLL - Modified the build configuration to enable the SWAPRUN linker option when this DLL is built. This build change allows the Windows OS to pre-load this DLL into the local workstation swap area when the PLBWSEC.DLL is being loaded over a network. ------------------------------------------------------------------------------- ODSBAC32.DLL, ODSBAC64.DLL - Corrected a problem where EOR type of a data file was not being detected when the data file started with 1 or more deleted records. An unknown EOR record type would cause unexpected 'Record too long' errors to occur. ------------------------------------------------------------------------------- ODSBAC64.DLL - Created a 64-bit query application named 'query64.exe' that can be used to load an ODBC DSN that uses the 'odsbac64.dll' driver. - Corrected a problem in the 'odsbac64.dll' setup dialog that could cause a newer 64-bit Microsoft ODBC Administrative utility to crash while setting up a ODBC USER DSN. ------------------------------------------------------------------------------- DESIGNER.PLC - Modified the array creation logic to define the array using the actual type rather than the generic type of OBJECT. - Corrected an issue with setting the height property for some objects during a form open. - Corrected the event label renaming logic when the cursor was position to a read-only line in the source window. - Corrected an issue during activation of the single event code editor. - Corrected the initialization of the ZOrder value during a form open. - Repositioned the code separator to before the routine label in the code window when opening forms created with the legacy designer. - Corrected renaming Init event code in old designer forms to FormInit. - Corrected a positioning issue when pasting in a PrintPage. - Added the object types to the Integrated layout status bar messages - Renaming an object now updates the Integrated layout status bar. - Corrected an issue in SunCS21.ocx regarding object renaming and code labels. - Corrected an issue in creating third party .Net controls with long paths and file names. - Adjusted the timing in the double-click detection used to open the code window. - Added selection panels for third party .Net controls. - Modified the sizing logic to prevent missing the mouse up event. - Corrected an issue regarding an object array that the name contained a "$". - Corrected the saving of the ICON height and width. - Corrected an issue that would result in an O104 error during a form open. - Added support for PL/B Web Server Forms (.PWF) ------------------------------------------------------------------------------- SUNIDE.PLC - Added support for web forms (.pwf) - Increased the number of files in a project from 500 to 1,000. ------------------------------------------------------------------------------- SCHEMAEDITOR.PLC - Corrected issue during PLB code import. -------------------------------------------------------------------------------