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.