Preface
  Document Conventions
   Typographic Conventions
   Notes and Warnings
  How to Read the Syntax Diagrams
  Getting Help and Submitting Feedback
   The Open Object Rexx SourceForge Site
   The Rexx Language Association Mailing List
   comp.lang.rexx Newsgroup
  Related Information
 Meet Open Object Rexx (ooRexx)
  The Main Attractions
   Object-Oriented Programming
   An English-Like Language
   Cross-Platform Versatility
   Fewer Rules
   Interpreted, Not Compiled
   Built-In Classes and Functions
   Typeless Variables
   String Handling
   Clear Error Messages and Powerful Debugging
   Impressive Development Tools
  Rexx and the Operating System
  A Classic Language Gets Classier
   From Traditional Rexx to Open Object Rexx
  The Object Advantage
  The Next Step
 A Quick Tour of Traditional Rexx
  What Is a Rexx Program?
  Running a Rexx Program
  Elements of Rexx
  Writing Your Program
  Testing Your Program
  Variables, Constants, and Literal Strings
  Assignments
  Using Functions
  Program Control
  Subroutines and Procedures
 Into the Object World
  What Is Object-Oriented Programming?
  Modularizing Data
  Modeling Objects
   How Objects Interact
   Methods
   Polymorphism
   Classes and Instances
   Data Abstraction
   Subclasses, Superclasses, and Inheritance
 The Basics of Classes
  Rexx Classes for Programming
   The Alarm Class
   The AlarmNotification Class
   The Array Class
   The Bag Class
   The Buffer Class
   The CaselessColumnComparator Class
   The CaselessComparator Class
   The CaselessDescendingComparator Class
   The CircularQueue Class
   The Collection Classes
   The ColumnComparator Class
   The Comparable Class
   The Comparator Class
   The DateTime Class
   The DescendingComparator Class
   The Directory Class
   The EventSemaphore Class
   The File Class
   The IdentityTable Class
   The InputOutputStream Class
   The InputStream Class
   The InvertingComparator Class
   The List Class
   The MapCollection Class
   The Message Class
   The MessageNotification Class
   The Method Class
   The Monitor Class
   The MutableBuffer Class
   The MutexSemaphore Class
   The NumericComparator Class
   The Orderable Class
   The OrderedCollection Class
   The OutputStream Class
   The Package Class
   The Pointer Class
   The Properties Class
   The Queue Class
   The Relation Class
   The RexxContext Class
   The RexxInfo Class
   The RexxQueue Class
   The Routine Class
   The Set Class
   The SetCollection Class
   The StackFrame Class
   The Stem Class
   The Stream Class
   The StreamSupplier Class
   The String Class
   The StringTable Class
   The Supplier Class
   The Table Class
   Ticker Class
   The TimeSpan Class
   Validate Class
   VariableReference Class
   The WeakReference Class
  Rexx Classes for Organizing Objects
   The Object Class
   The Class Class
  Creating Your Own Classes Using Directives
   What Are Directives?
   The Directives Rexx Provides
    The ::CLASS Directive
    The ::METHOD Directive
    The ::ATTRIBUTE Directive
    The ::ROUTINE Directive
    The ::REQUIRES Directive
   How Directives Are Processed
   A Sample Program Using Directives
   Another Sample Program
  Defining an Instance
  Types of Classes
   Object Classes
   Mixin Classes
   Abstract Classes
   Metaclasses
 A Closer Look at Objects
  Using Objects in Rexx
  Common Methods
   Initializing Instances Using INIT
   The MAKESTRING and STRING Methods
   Uninitializing and Deleting Instances Using UNINIT
  Special Method Variables
  Public, Local, and Built-In Environment Objects
   The Global Environment Object (.environment)
    The NIL Object (.nil)
    The False Environment Object (.false)
    The True Environment Object (.true)
   The Local Environment Object (.local)
   Built-In Environment Objects
   The Default Search Order for Environment Objects
  Determining the Scope of Methods and Variables
   Objects with a Class Scope
   Objects with Their Own Unique Scope
  More about Methods
   The Default Search Order for Selecting a Method
   Changing the Search Order for Methods
   Public versus Private Methods
   Defining an UNKNOWN Method
  Concurrency
   Inter-Object Concurrency
    Object (Instance) Variables (Attributes)
    Prioritizing Access to Instance Variables (Attributes)
    Sending Messages within an Activity
   Intra-Object Concurrency
    Activating Methods
 Commands
  How to Issue Commands
  Rexx and Batch Files
  Using Variables to Build Commands
  Using Quotation Marks
  ADDRESS Instruction
  Using Return Codes from Commands
  Subcommand Processing
  Trapping Command Errors
   Instructions and Conditions
   Disabling Traps
   Using SIGNAL ON ERROR
   Using CALL ON ERROR
   A Common Error-Handling Routine
 Input and Output
  More about Stream Objects
  Reading a Text File
  Reading a Text File into an Array
  Reading Specific Lines of a Text File
  Writing a Text File
  Reading Binary Files
  Reading Text Files a Character at a Time
  Writing Binary Files
  Closing Files
  Direct File Access
  Checking for the Existence of a File
  Getting Other Information about a File
  Using Standard I/O
  Using OS/2 and Windows Devices
 Distributing Programs without Source
 Sample Rexx Programs
 Notices
  Trademarks
  Source Code For This Document
 Common Public License Version 1.0
  Definitions
  Grant of Rights
  Requirements
  Commercial Distribution
  No Warranty
  Disclaimer of Liability
  General
 Revision History