Object Rexx


next up previous
Next: System Limit Programming
Up: Implementation
Previous: Run-time library and built-in classes

Object Rexx

 

Object Rexx [IBM Object Rexx] is an object-oriented scripting language for OS/2, designed by IBM and descended from classic Rexx [IBM Rexx]. It can be used merely for writing OS/2 command files, but is versatile enough for many more sophisticated uses. The IFS has used classic Rexx for some time as the scripting language for its GoServe server. GoServe can also run Object Rexx. Given the language's long-lived instances, this was a particularly fortunate combination.

Object Rexx is a conventional OOP language, similar to Smalltalk in its semantics. The syntax is a little bizarre, being dictated by the need for upward compatibility with classic Rexx. An example is shown below, showing how we implement IntegerField.

::class IntegerField

  ::method init
    expose value has_errors
    value = ''
    has_errors = .false
    return

  ::method setValue
    expose value has_errors
    use arg v
    value = v
    if datatype(v,'w') then
      has_errors = .false
    else
      has_errors = .true
    return

  ::method getValue
    expose value
    return value

  ::method emit
    expose value has_errors
    use arg output_stream
    output_stream~charout( '<INPUT TYPE=TEXT' )
    output_stream~charout( ' VALUE=' value||'>' )
    if has_errors then
      output_stream~lineout( '<IMG SRC="big_red_arrow.gif">' )
    else
      output_stream~lineout()
    return

Here, the init method is a constructor, called when an IntegerField is created. expose marks the names following it as instance variables, so we see that init is setting appropriate defaults. setValue takes one argument v and syntax-checks it via the built-in datatype function, setting the new value if OK, and the error flag otherwise. getValue is an access method, returning the value. Finally, emit is the method for displaying oneself as HTML: it takes a stream as argument, and writes appropriate text to it. In Object Rexx, streams are objects: the ~ indicates calls to the stream methods charout and lineout, for writing strings and strings with line terminators respectively.



Jocelyn Ireson-Paine
Sat Oct 12 23:35:52 BST 1996