Program Flow

Project: A script project is expected to grow to encompass more complex operations in the future so it needs to be written in procedures that are easy to port and test. For this example, we’ll define several routines to perform the steps of the Automated Download example, passing variables or defining local variables where appropriate.

Algorithm: In this example we will break the project down into several parts, each handled by a routine, and define variables to be passed between the routines where appropriate.

Relevant Commands and Functions:

BEGIN — Begins a command block
END — Indicates end of a command block
Labels — * indicates a target or start of a routine in script
ARGUMENTS — Specifies local variables to be created by a child routine
PERFORM — Branches execution to the specified target
RETURN — Resumes script execution past the current PERFORM command
IF …ELSE — Conditionally executes a command block
SWITCH — Branches execution to multiple command blocks
LEAVE — Branches execution from a command block
SHOW — Display each script command as it is executed.

See Also:

EXECUTE — Starts a script and does not return to the calling script
LAUNCH — Starts another application
RESTART — Branches execution to the first line of the executing script
SPAWN — Starts an independent script without interrupting the current script
GOTO — Branches execution to the specified target
WHILE — Conditionally executes a logical command
CONTINUE — Conditionally branches execution from a WHILE loop or SWITCH command
WHEN Commands — Asynchronous branching, as illustrated in Event Monitoring example

A Brief Example

SHOW

$time = "02:00:00 AM"
WAIT UNTIL $time
$Status = "Login Failed"
$SessionName = "unknown"
$Filename = "filename.dat"
PERFORM ConnectSession($Status, $SessionName)
SWITCH $Status
CASE "Ready": PERFORM DownloadFile($Filename)
LEAVE
CASE "Login Failed": PERFORM Message("Login Failed")
LEAVE
SWITCH END
RESTART

*ConnectSession($Status, $SessionName)
; Load and connect $SessionName SES file,
; and report back with a status value in $Status string
$SessionName = "Vax"
connect $SessionName
$Status = "Ready"
RETURN

*DownLoadFile($Filename)
IF EXISTS($Filename)
PERFORM RenameOldFile($Filename)
;Add code here to implement download
RETURN

*RenameOldFile($Filename)
; Add code here to rename the file $Filename
RETURN

*Message
ARGUMENTS ($string)
DIALOG
MESSAGE $string
BUTTON "OK" RESUME
DIALOG END
WAIT RESUME
DIALOG CANCEL
RETURN

This example breaks the project up into a smaller script plus four routines that perform operations for the script. Routines or procedures are defined by a label (starts with an * character) and end with the RETURN command. If any values or variables are to be passed to the routine, these are placed either on the procedure line in parentheses or in an ARGUMENTS command as the first line following the procedure line, as done in the Message routine above. To make use of the procedures, the PERFORM command is issued with the name of the routine and any values or variables to be passed to it. When a variable is passed, as in PERFORM DownLoadFile($filename), it is passed by reference and changes to the variable made in the routine are returned. When a value is passed, as with PERFORM Message("Login Failed"), it is passed by value.

A couple of points to note in this example: The routines/procedures can be before or after the PERFORM command which calls them. In our case, we put them at the bottom of the script, and make sure the CANCEL command is used at the end of the main script block so execution does not continue beyond the main SWITCH block. Script execution always begins with the first line of the script, so there is no need to define any special routine such as *Main. The RETURN command returns execution to the command following the last PERFORM command executed, so subroutines can be implemented as illustrated in the DownLoadFile routine above.

Further Development:

  • With the PERFORM, EXECUTE, or SPAWN script commands, calling routines could extend to two or more script files with concurrent execution if desired.

Additional Examples:

Several examples use routines to break up a project into managable parts. See the ADDRBOOK example and DDECLNT for further illustration.