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