Concurrent Browser
The browser will be able to take information from two sources – one source an interpreted stream of instructions (the Authoring Language) and the other source the HTML, XML JavaScript or other language downloaded from the Web-Enabled Application.
The browser will also spawn separate windows in which instructional text and graphics appear, and in which error messages are rendered.
SetBox { WindowID, Coords } sets a specific window (either the browser or another window ) to the specified window coordinates and opens it. [Later, we’ll need to have a ReadCoords ( Coords ) command which reads the screen mode and sets Coords appropriately, but not in round 1. Initial WindowIDs will be numeric: 0 = Browser, 1 = Display window, 2 = Error window. Later, these will be text identifiers. Also later, we’ll need a separate OpenBox { } command, which opens a specific WindowID. At this point, SetBox includes an OpenBox { }. ]
ConnectTo { URL, ScreenCondition } points the browser to the specified URL, and returns control to the html page is loaded.
OpenBox { WindowID [, Coords] } opens window WindowID where it was, unless there are new Coords listed.
ShowBox { WindowID, Text [, Coords] } displays Text in WindowID at Coords. If Coords aren’t included, then Text is displayed at the last point of display in WindowID. [Later, we’ll want to include Graphics as an option for Text in ShowBox, where Graphics is a link to a graphic object. ]
Ghost { InputEvent } passes input-event to the browser as though the use had initiated it. InputEvents are keystrokes and mouse clicks at specified locations. [Later input-events will include drags from specified coordinates to specified coordinates, and combinations of click and drag events with keypress conditions. ]
When { ScreenCondition } Then { …. } executes the statement only after the ScreenCondition has become true. ScreenCondition includes text appearing on screen in a specified location, and the cursor appearing in a certain location. [Later, we’ll need an Else that gives us a way to drop out of the When command after timeout.]
CloseBox { WindowID } closes the window specified by WindowID.
EndExec { } terminates execution of the commands in an Authoring Language file.
TypeIn { TargetEvents, TerminatorSet, Message } accepts actions included in TargetEvents until an event in the TerminatorSet occurs. Initially the TargetEvents are Any, Clicks, Keys, and StringSpec. A StringSpec is bounded by double quotes and includes specified keystrokes. For a StringSpec, special characters are denoted as in the C programming language. The TerminatorSet includes Any, Rclick, Lclick, RDClick, LDClick, and a StringSpec. Message displays when input doesn’t match the TargetEvents, or when the
GetClick { X, Y , Message } takes a click in WindowID and passes it through. The system displays Message if there’s a keystroke, or if there’s a mouse button-down outside WindowID. System pre-empts keystrokes or mouse button-downs outside WindowID.
SetField { X, Y, Value } requires the user to move the focus to FieldID, and once the focus is on FieldID, to change the value to Value before resetting the focus anywhere. In scripts, before we can ascertain the actual FieldID, the author can use a placeholder until the actual field becomes available.
ReadFrom { Label [, FileSpec] } continues execution of Authoring Language commands from the specified Label. If FileSpec is included, ReadFrom continues execution at Label in another file named by FileSpec.
ReadCoords ( Coords ) reads the screen mode and sets Coords appropriately.
OpenBox { WindowID } opens a window specified by WindowID. If WindowID has not been set with a prior SetBox, OpenBox throws an exception.
The Concurrent Browser was implemented as a Netscape Browser Plug-in. It reads the script files and interpreted the commands described above.
For each browser web page, the plug-in builds a list of all child windows with its coordinates and properties. The plug-in than emulates keystrokes, mouse clicks and double-clicks according to script instructions.
The plug-in was developped using windows hooks APIs, it works on all win32 platforms.