Advanced script programming-
Advanced script programming


  • PowerTerm Script language uses many `{` and not many `(`
  • NO: if ( $variable == "hello" )
    YES: if { $variable == "hello" }
  • Variable assignment does not use a `$`. Variable reference does.
  • NO: $var = $data
    YES: var = $data
  • assignment `=` must be surrounded by whitespace.
    (tests need not be surrounded by whitespace -- `if {$var<=10}` is acceptable.)

    NO: i=1
    YES: i = 1

  • The `{` starting a block of statements MUST be on the same line as the `if`, `for` ... statement.
  • YES: if { $data == 10 } {
    i = 45

    NO: if { $data == 10 }
    i = 45

  • incrementing is interesting...
  • use the `expr` command which evaluates an expression, and the `[ ...]` facility which replaces itself with the result.

    Thus, i = [ expr $i + 1 ]
    or, use the `incr` command which increments its argument (and because there is an assignment involved, no `$` is used.
    i = [ incr i ]
    .. or ..
    i = [incr i 3 ] # increment by 3

  • `for` loop syntax is tricky:
  • as usual, there are 4 parts
    • initialization
    • test
    • increment
    • body statements
    ALL 4 PARTS ARE individually wrapped in `{...}`
    AND -- as indicated above -- the `{` beginning the body statements MUST be on the same line as the 3 earlier parts:
    NO: for (i=0; $i <10; $i++)
    var = 45

    YES: for {i = 0} {$i <10} { i="[incr" i]} {
    var = 45

  • Testing for Time Outs in `wait` Here is an illustration of a script which uses a wait statement and an if to test the result:
  • str = [wait 10 for "hi there"]
    if {$str == "1"} {message "Hello to you"} else {message "no one home, $str"}

    For an unconditional wait, the `wait` command can be used in this manner:

    wait 10 seconds # [always say `seconds`, even in `wait 1 seconds`]
  • `wait`-ing for a string in a designated location The wait command can look for a string in a designated location, as in:
  • wait 10 for "F1" at 23 70

    This will wait 10 seconds for the string "F1" to appear in row 23, column 70.

  • Message and input boxes

    PowerTerm lets the script writer create pop-up boxes for 3 purposes: messages, text input and password-type input.

    • Message box.
      syntax: message text [title-text] [error|question|info]

      This will popup a box whose optional title is title-text, with the content of text, and with an optional icon suitable for error, question, or info. The user presses the OK button to continue.

    • Text input box.
      syntax: input-line text [title-text]

      This will popup a box which includes a text input area. The box has text of text, and an optional title of title-text. You can assign the input to a variable as in:

      data = [input-line "Enter Name" "My Title"]

    • password-type input box.
      syntax: input-password text [title-text]

      This command is similar to input-line, except that the text which the user inputs is not echoed back to the screen. Rather, `*` symbols are displayed.

  • Sending Hex Characters. This is done via `/xnnn`. example:
    key f3 do {send "\x301"}
  • Sending the Null `0` Character. This is done with the special character <null>. example: you need to send `ABCZDEF` where `Z` means the NULL `0` character. key f7 do {send "ABC<null>DEF"}
  • Sending the `Enter` key: for Unix/VMS, `^M` represents the Enter/Return key. For IBM Mainframe/Midrange, <enter> is the way to do it.
  • To include a filename in a script, it is necessary to use 2 backslash characters to represent each backslash. example: to refer to the file \tmp\myfile.txt , say \\tmp\\myfile.txt
  • To access a PC environment variable within a script, use the `GETENV` command. Here is an example:
  • data = [getenv TMP]
    if {$data == "bernie"} {message "yes"} else {message "no"}
  • To learn the current cursor position:
  • get col is the command for the column
    get row is the command for the row
  • To make a script `pause` after it executes a PC program:
  • The problem is that lines like:
    result = [exec MYPROG.EXE]
    if {$result == 0} {return}
    message "The Program failed" ERROR

    Will not behave as expected because the script will execute the `if {$result == 0} {return}` line immediately after starting MYPROG.EXE

    The solution is to have the script create a temp file, and to modify MYPROG.EXE to delete this file as its last operation.

    Then the script can be re-written as follows:

    open "\\temp\\temp.dat" w
    result = [exec MYPROG.EXE] #This will erase \temp\fred.dat when it completes
    while { 1 == 1 }

    wait 1 seconds
    isfile = [file exists "\\temp\\temp.dat"]
    if {$isfile == 0} {break}
    if {$result == 0} {return} ##the files does NOT exist
    message "The Program failed" ERROR
  • To use the proc script command:
  • The proc must be defined before it is used [remember, the script language is an interpreter.] Here is an example of usage of proc.
    proc say_hello x
    message $x

    say_hello Josephine

  • To exit PowerTerm under control of a script:
  • exit-emulator is the command