oorexx Documentation 4.2.0 Open Object Rexx Release Notes Copyright 2005-2014 Rexx Language Association. All rights reserved. Portions Copyright 1995, 2004 IBM Corporation and others. All rights reserved. This documentation and accompanying materials are made available under the terms of the Common Public License v1.0 which accompanies this distribution. A copy is also available as an appendix to this document and at the following address: http:// www.oorexx.org/license.html. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Rexx Language Association nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1. About The 4.2.0 Release... 2 1.1. New in this Release... 3 2. Windows Requirements, Installation and Configuration... 4 2.1. Hardware Requirements... 4 2.2. Software Requirements... 5 2.3. Installation and Configuration Information... 5 2.4. Running Open Object Rexx as a Child Process of a Service on Windows... 7 2.5. Open Object Rexx and Other Rexx Interpreters... 8 2.6. Exploring Open Object Rexx... 8 1
Open Object Rexx 3. Unix-Like (AIX, Linux, etc.,) Requirements, Installation and Configuration... 11 3.1. Hardware Requirements... 11 3.2. Software Requirements... 12 3.3. Installation and Configuration Information... 12 3.4. Configuration... 18 3.5. Open Object Rexx and Other Rexx Interpreters... 18 3.6. Exploring Open Object Rexx for Unix/Linux... 18 4. The rxapi Daemon Process... 20 5. Known Limitations, Problems and Workarounds... 21 6. Documentation... 21 A. Notices 22 A.1. Trademarks... 22 A.2. Source Code For This Document... 23 B. Common Public License Version 1.0 23 B.1. Definitions... 23 B.2. Grant of Rights... 24 B.3. Requirements... 24 B.4. Commercial Distribution... 25 B.5. No Warranty... 25 B.6. Disclaimer of Liability... 25 B.7. General... 26 Index 26 1. About The 4.2.0 Release Open Object Rexx Version 4.2.0 is based on the previous bug fix version of oorexx (4.1.3). Version 4.2.0 has both enhancements and bug fixes. 2
New in this Release IMPORTANT If you have a version of IBM Object Rexx installed on your system, you must remove it before starting with the installation of this package. The two packages, Object Rexx and oorexx can not be installed side-by-side. Note that an upgrade type installation is not supported on any platform. If a previous version of oorexx is installed, it should be completely uninstalled prior to installing 4.0.0. Failure to completely uninstall the previous version will produce unpredictable results. On a Unix-like system use the appropriate package manager to uninstall the previous version. For instance, on Linux with a rpm install, you could use the command: rpm -iv oorexx to uninstall oorexx. On a Debian-based system you could use the -r or the -P option of dpkg to uninstall oorexx: dpkg -P oorexx On Windows, when the installation program is started, the installer will recognize that a previous version is installed. It will then present an option to uninstall the previous version before proceeding with the 4.2.0 install. Alternatively, you can completely uninstall the previous version prior to starting the 4.2.0 installation. Warning On Windows only. If a previous Windows install exists and is not the same addressing mode (32 or 64) as the version of oorexx about to be installed, there are potential problems when the uninstaller is launched from the installer automatically. In this case it is strongly advised that the uninstallation program be run first to completely uninstall the current version of oorexx, and then the new installer be run. 1.1. New in this Release In General: For the oorexx 4.2.0 release, changes have been relatively well documented through the Tracker feature of the oorexx project on SourceForge. The ticket number and the ticket title of each change is recorded in the CHANGES document. If more information is desired, look up the tracker item on SourceForge. 3
Open Object Rexx The Bug tracker is located at: oorexx Bug Tracker 1 The Requests For Enhancement tracker is located at: oorexx Feature Requests Tracker 2 The Documentation Bugs tracker is located at: oorexx Documentation Bug Tracker 3 To search for a single ticket number, in any of the trackers, enter ticket_num:number in the search field of the tracker. For instance to search for ticket number 200, enter ticket_num:200 In Windows oorexx Only: The version of oodialog distributed in oorexx 4.2.0 is oodialog 4.2.3. Beginning with oodialog version 4.2.0, released August 2012, both the oodialog version number and the installation of oodialog itself have been decoupled from the oorexx interpreter. Any version of oodialog from version 4.0.0 to version 4.2.3 can be installed into an oorexx 4.2.0 installation. The oodialog version installed completely replaces whatever version of oodialog is currently installed. oodialog versions can be downloaded from SourceForge at: oorexx Files oodialog 4 oodialog version 4.2.0 was completely rewritten from the original IBM implementation to take advantage of the powerful new native APIs provided by oorexx 4.0.0. oodialog 4.2.3 is far more powerful, has many more features, and is more capable than the orignal oodialog. While every effort has been made to ensure that oodialog 4.2.0 and later is entirely backwards compatible with the original IBM implementation, there are a few reports of some small number of existing oodialog programs that have problems under oodialog 4.2.3. It is the intention of the development team that oodialog 4.2.3 is backwards compatible with previous versions of oodialog. If an oodialog programmer or user discovers a case where this is not so, he or she should open up a bug report on SourceForge, or at the very least discuss the problem on the oorexx Users list. If the problem can be fixed, it will be. If it can not be fixed, the reason for that will be explained. It is the intent that the version of oodialog distributed with each new release of oorexx be the current officially released version of oodialog. If any oodialog programmer or user is unhappy with the backwards compatibility of that version of oodialog, and they do not find the new features of oodialog compelling enough, they are advised to install one of the earlier versions of oodialog available on SourceForge. 2. Windows Requirements, Installation and Configuration 2.1. Hardware Requirements Approximately 50 MB free disk space is needed for a complete installation. 8 MB free disk space for the core interpreter. 29 MB free disk space for online documentation. 1 http://sourceforge.net/p/oorexx/bugs/ 2 http://sourceforge.net/p/oorexx/feature-requests/ 3 http://sourceforge.net/p/oorexx/documentation/ 4 http://sourceforge.net/projects/oorexx/files/oodialog/ 4
Software Requirements 14 MB free disk space for all samples. 25 MB free disk space for the API headers and libraries. Any hardware capable of running the supported Windows operating systems is sufficient. 2.2. Software Requirements On Windows, the oorexx development team is committed to supporting all active versions of Windows. That is, versions of Windows that Microsoft has not declared end of life. For oorexx version 4.2.0, the officially supported version of Window are Windows XP through Windows 8.1. The team will not purposively make changes to prevent oorexx from running on versions of Windows that have reached end of life. However, the team is more interested in supporting newer versions of Windows than they are in supporting out of date operating systems. Versions of Windows that are no longer supported by Microsoft, are officially not supported by oorexx. The following lists the versions of Windows that oorexx 4.2.0 has been consistently tested on by the development team: Windows XP Windows Vista Windows 7 The following lists the version of Windows where the development team has good anecdotal evidence that oorexx 4.2.0 still works well on: Windows 2000 Windows 2003 The following lists the version of Windows that the development team is committed to supporting. However, oorexx 4.2.0 has not been well tested by the development team on these versions of Windows. Testing has been done by committed users of oorexx. Windows 8 Windows 8.1 2.3. Installation and Configuration Information 2.3.1. Pre-Installation Notes Open Object Rexx cannot coexist with IBM Object REXX. If IBM Object REXX is installed on the system you must first uninstall it. If a previous version of oorexx is installed, you should uninstall it. If two different versions of oorexx are installed on the same system, the results are not predictable and the interpreter will not work correctly. You could install over the top of the existing installation, but that is not recommended and is not supported. A previous version of oorexx can be uninstalled (Section 2.3.3, Windows Uninstall Information ) before starting the new installation. However, the uninstall does not have to be done as a separate step. When the installation program is started it will detect a previous version of oorexx and offer to uninstall it at that time. 5
Open Object Rexx Warning If a previous Windows install exists and is not the same addressing mode (32 or 64) as the version of oorexx about to be installed, there are potential problems when the uninstaller is launched from the installer automatically. In this case it is strongly advised that the uninstallation program be run first to completely uninstall the current version of oorexx, and then the new installer be run. rxapi is an important part of oorexx that runs as a daemon process. The installation program offers the option of installing rxapi as a Windows Service. Unless you are a knowledgeable user, with a good reason not to, you should elect to install rxapi as a Windows Service. oorexx should be installed by a user with administrator rights. On Vista and later this is a requirement. It is also a requirement in order to install rxapi as a service. In addition, there are several installation steps that can only be performed with administrator rights. They are: 1. The subdirectory that oorexx is installed into is added to the System PATH environment variable. 2. The environment variable REXX_HOME is set for all users. 3. The file type (ftype) REXXScript is defined for the interpreter executable and the file extension.rex is associated (assoc) with the REXXScript file type. 4. The file extension.rex is added to the System PATHEXT environment variable. 5. On Windows XP, and later, if the installation program is run without administrator rights, oorexx can not be installed to its default location in \Program Files\. Note On Vista when a user starts the installation program, the user is prompted for an administrator password to continue. It is not necessary to actually be logged in as administrator when the installation is started. It is important that if oorexx is installed by a user with administrator rights, that oorexx is uninstalled by a user with administrator rights. Otherwise, the installation steps described above, including removal of rxapi as a service, will not be undone when oorexx is uninstalled. oorexx is compiled both as 32-bit application and as a native 64-bit application. The native 64- bit application can not be installed on a 32-bit version of Windows. Either the 32-bit or the 64-bit oorexx can be installed on a 64-bit version of Windows. However, to take full advantage of both the operating system and oorexx, the user should install the 64-bit version of oorexx on a 64- bit version of Windows. The installation programs for the two types of oorexx are clearly labelled: oorexx-4.2.0.windows.x86_32.exe and oorexx-4.2.0.windows.x86_64.exe. 2.3.2. Running the Installation Program on Windows Before starting the installation, review the pre-installation (Section 2.3.1, Pre-Installation Notes ) notes if you have not already done so. 6
Running Open Object Rexx as a Child Process of a Service on W The oorexx installation program is a typical Windows installation program. Download the installation program for your operating system. From Windows Explorer double-click the appropriate installation package: oorexx-4.2.0.windows.x86_32.exe or oorexx-4.2.0.windows.x86_64.exe. Follow the prompts in the installation dialog. Naturally, the program can also be run from a console window by typing the executable name at the command prompt. Note If a previous version of oorexx is installed and the rxapi daemon process is running, the user will be prompted to halt the process. The process must be halted to properly install the new version. If necessary, (because a Rexx program is running in the background and you are worried about possible data loss,) cancel the installation and take the appropriate steps to halt the process cleanly. If, on the other hand, you somehow trick the installation program to continue without halting the rxapi process, you will most likely end up with a corrupt installation of oorexx. Unattended installation. The Windows installation program can be run from the command line with no user input. This is done by using the /S option. Note that in this mode default values are used for all options other than the installation directory. This mode can be used to script automatic installs or multiple installs on different machines. From a script, or from the command line, enter the installation program name followed by the /S parameter, and the /D parameter if the default installation directory should be changed: /S : Silent mode This will install oorexx without any user intervention using default values for all options. /D : Default directory The default installation directory, (C:\Program Files\ooRexx), can be changed using this switch. This must be the last parameter used in the command line and must not contain any quotes, even if the path contains spaces. For example: oorexx-4.2.0.windows.x86_64.exe /S /D=C:\Program Files\Interpreters\ooRexx 2.3.3. Windows Uninstall Information In XP, from the Control Panel select "Add Remove Programs", then select "Open Object Rexx for Windows" and select "Remove". In later versions of Windows, select "Programs and Features" from the Control Panel and follow the same steps. Alternatively, the oorexx installation places a menu item in the program folder that can be used to uninstall. Select "Start->All Programs->Open Object Rexx->Uninstall oorexx". This is functionally equivalent to using "Add Remove Programs". 2.4. Running Open Object Rexx as a Child Process of a Service on Windows rxapi in its role as the memory manager for oorexx can share out some resources among all the oorexx processes to enable global functions, system exits, subcommand handlers, and global queues. If you start oorexx from a service, two or more processes might run under different user 7
Open Object Rexx accounts. Therefore it is required that the memory manager is not protected and can be accessed by every user. This means that oorexx global data is system global and unsecured. Note that starting oorexx from a service is different than installing rxapi as a service. If you want oorexx to be started from a service, oorexx must be installed as a common program or you must modify the system path manually to include the directory where oorexx has been installed. If you are writing a service that calls RexxStart(), ensure that the SERVICE_INTERACTIVE_PROCESS flag is set for your service. To prevent access violations, use a NULL security descriptor and assign it to your service process. 2.5. Open Object Rexx and Other Rexx Interpreters If you have other Rexx interpreters installed, you may have to set the PATH manually because oorexx and the other Rexx interpreters may both use the name "rexx" for invoking the interpreter. Interpreter error messages that begin with "Rexx:" indicate that another Rexx interpreter was called instead of oorexx. You can verify which Rexx interpreter is running either by the form of the error messages, by running rexxtry.rex and executing SAY VERSION, or by invoking rexx /V, which then should display information about the Rexx interpreter that is invoked. If no information is displayed, it is not oorexx. If you don't want the other Rexx interpreter to be invoked, you should remove it from the PATH, delete it, or rename rexx.exe in the installation directory to orx.exe and use orx to invoke the interpreter. 2.6. Exploring Open Object Rexx Once you have installed the oorexx files you can run Rexx scripts by issuing the command rexx followed by the name of your Rexx script at the command prompt. In addition, if you installed oorexx as recommended, a file type has been associated with the.rex extension which allows you to just type the name of your script, without the extension, to run it. For example, if your program was named addressbook.rex, the file association will allow you to execute the program as follows: C:\work.ooRexx>addressBook An execution of the program might look like this: C:\work.ooRexx>addressBook oorexx Address Lookup, version 1.1.0 Look up address for: gatch Tom Gatch 3245 Westfield Dr Mission Bay CA 92110 Look up another address? [y/n] n C:\work.ooRexx> To interactively try Object Rexx statements, enter rexx rexxtry.rex on the command line. Enter exit to end the program. To help you explore programming in Open Object Rexx, the following generic sample programs are provided: 8
Exploring Open Object Rexx ccreply.rex concurrent program using REPLY complex.rex complex number class drives.rex demonstrates the usage of Sys functions factor.rex factorial program greply.rex concurrent program using WAIT and NOWAIT guess.rex a guessing game ktguard.rex concurrent program using START and GUARD makestring.rex demonstrated the usage of the makestring method month.rex displays a calendar for the month of January philfork.rex program that demonstrates Open Object Rexx concurrency pipe.rex a pipeline implementation properties.rex shows usage of the.properties class and some Sys functions qdate.rex date query program qtime.rex time query program rexxcps.rex measures Rexx performance scclient.rex scserver.rex a client / server demonstration using the.socket class from socket.cls semcls.rex semaphore class sfclient.rex sfserver.rex a client / server demonstration using the external rxsock library stack.rex program that uses a stack class 9
Open Object Rexx usecomp.rex program that uses the complex number class (see note below) usepipe.rex program that uses the pipeline implementation (see note below) Note To run these programs, you must either add the samples directory to the PATH or execute them directly from the samples directory. To help you explore using the Windows WinSystm.cls, the following sample programs are provided: deskicon.rex AddDesktopIcon method of the WindowsProgramManager class desktop.rex uses the WindowsProgramManager class displayanymenu.rex Displays the menu hierarchy for a window that the user picks. The example uses a mixture of oodialog and WinSystm. displaywindowtree.rex Allows the user to pick an open top-level window and then displays the window hierarchy for that window. The program uses both oodialog and WinSystm classes. eventlog.rex uses the WindowsEventLog class getthewindow.rex This example shows how to find a window without using the exact window title. menucalc.rex Uses the MenuObject class to display the menu hierarchy of the Windows Calculator application. The menu hierarchy for both the Calculator's standard view and its scientific view are printed to the console. menunotepad.rex Uses the MenuObject class to displays the hierarchy of the Notepad menu. quickcalc.rex Demonstrates how to control an application programmatically using the winsystm classes. Does some simple calculations using the Windows Calculator application. This program is similar to usewmgr.rex but more simple to better show what is going on. quickshowallmenus.rex Uses the windowssystem.frm package to print out a menu outline of every open window that has a menu. registry.rex uses the WindowsRegistry class 10
Unix-Like (AIX, Linux, etc.,) Requirements, Installation and Conf usewmgr.rex program that uses the WindowsManager class windowssystem.frm A collection of public routines and classes to help work with the winsystm.cls package. This is an example of how to extract common function into a package, and then use the package to help in writing similar programs. A number of the sample programs that use winsystm.cls make use of this framework. writewithnotepad.rex Uses classes in winsystm.cls to automate the Windows Notepad application. This is a subset of the usewmgr.rex program designed to be a little easier to understand. The directory samples\ole\ and its subdirectories contain a number of samples for the oorexx OLE / ActiveX interface. The sample programs contain comments to help with learning to use the OLEObject class. The samples\oodialog and it subdirectories contain a relatively large number of example programs that demonstrate the use of OODialog. A subset of these examples can be launched from the oorexx Program folder in the Start Menu. "Start->All Programs->Open Object Rexx->ooRexx Samples- >oodialog" There are several examples provided to help with programming external function libraries using the oorexx native API. These samples are located under the samples\api directory, along with two read me files: sample\api\readme.txt sample\api\callrxnt sample\api\callrxwn sample\api\rexxexit sample\api\wpipe sample\api\wpipe\readme.txt Several of the API samples can be launched from the oorexx Program folder in the Start Menu. "Start->All Programs->Open Object Rexx->ooRexx Samples->API" 3. Unix-Like (AIX, Linux, etc.,) Requirements, Installation and Configuration 3.1. Hardware Requirements 12 MB free disk space for the program (20 MB for AIX) 13.5 MB free disk space for online documentation IBM-compatible, Pentium or AMD processor, or higher, for an x86 32-bit or 64-bit platform. Any system capable of running AIX 5L 5.2/5.3 or AIX 6.1 for an AIX platform. SPARC processor for a SUN Solaris (SPARC) platform. 11
Open Object Rexx 3.2. Software Requirements Linux Linux ELF system (i386 or x86_64.) Linux kernel version 2.4.1 or higher, with support for System V IPC. Linux PPC system. Linux kernel version 2.4.1 or higher, with support for System V IPC. AIX AIX 5L 5.2 TL10 and up. AIX 5L 5.3 TL7 and up. AIX 6.1 TL1 and up. Solaris Solaris V2.8 or higher. 3.3. Installation and Configuration Information This new version of Open Object Rexx cannot coexist with a previous installed version of Open Object Rexx or IBM Object REXX on your system. If you have previously installed IBM Object Rexx or Open Object Rexx, you must first de-install that program. 3.3.1. Installation/Removal of the RPM Package Note The installation of Open Object Rexx requires that all steps be run with root authority. To install the rpm package, use your rpm package manager. Refer to your package manager for further information. The package manager adds orexx to your local rpm-database. Select the appropriate package for your system. Although the 32-bit version of oorexx can be installed on some 64-bit Linux distributions it is recommended that the 64-bit version of oorexx be installed on all 64-bit Linux systems. There may be several rpm packages available. Each package name will indicate the processor architecture (i386, x86_64, ppc, etc.,) it is intended for, and the Linux distribution it was built on. In general, the Linux distribution the package was compiled on does not make a difference. The oorexx rpm will install on any Linux system that supports rpms. However, sometimes, because of the libraries present on a system, the oorexx rpm will not install. For instance, the Fedora Core 10 rpm may not install on a SuSE 9.3 system. Because of this, when resources are available, the oorexx project will make available rpm packages built for older Linux distributions. To install with the command line rpm package manager, a typical command line might be: rpm -i oorexx-4.0.0-1.i386.fedora10.rpm or 12
Installation and Configuration Information rpm -i oorexx-4.0.0-1.x86_64.fedora10.rpm Open Object Rexx is installed in the directory /opt/oorexx. Links are created in /usr/lib and / usr/bin for the oorexx shared libraries and executables respectively. Additional links are created in /usr/include for the native API header files. Use the rpm package manager to remove oorexx from the system. The command line rpm can also be used to remove the package from the system. The command to enter is: rpm -e oorexx 3.3.2. Installation/Removal of the DEB Package Note The installation of Open Object Rexx requires that all steps be run with root authority. Debian based Linux distributions (Kubuntu, Ubuntu, etc.,) use the debian package manager. If you use one of the... refer to the documentation for that tool. On the other hand, oorexx installs easily from the command line. Use the following command to install a.deb package from the command line: dpkg -i <packagefile> For example: tom@loon:~/downloads$ dpkg -i oorexx-4.0.0-1.i386.kubuntu810.deb Open Object Rexx is installed in the directory /opt/oorexx. The command dpkg --purge is used to remove oorexx from the system. For example: tom@loon:/$ dpkg --purged oorexx Or, use the same package manager you used to install to remove oorexx from a debian based system. 3.3.3. Detailed Installation/Removal Information for AIX Installation location This build is installed in /opt/oorexx. The following links are created from /opt/oorexx/bin to /usr/bin: 13
Open Object Rexx /usr/bin/rexx /usr/bin/rexx.img /usr/bin/rxftp.cls /usr/bin/rxregexp.cls /usr/bin/socket.cls /usr/bin/rxapi /usr/bin/oorexx-config /usr/bin/rexxc /usr/bin/rxqueue /usr/bin/rxsubcom /usr/bin/rexximage Required xlc.rte runtime level xlc runtime 9.0.0.9 or higher This runtime is contained in the April 2009 XL C/C++ Enterprise Edition V8.0 for AIX PTF. IBM support 5 xlc runtime 10.1 or higher This runtime is contained in the January 2009 IBM C++ Runtime Environment Components for AIX. IBM support 6 Installed services The oorexx 4.0.0.0 LPP will install the rxapi daemon. This package integrates seamlessly into the AIX SRC (System Resource Controller). The daemon is started automatically after the installation. The daemon will be started upon system boot via an entry in /etc/inittab. Comments If you have any comments or questions please do not hesitate to ask. See the "Getting Help" sections in any of the reference manuals for places to ask questions. The AIX maintainer can be reached by posting questions to the Developer Mailing List (see the :Developer Mailing List" section in any of the reference manuals). To install the LPP package, use smitty. smitty -> Software Installation and Maintenance -> Install and Update Software -> Install Software To remove the LPP package, use smitty. smitty -> Software Installation and Maintenance -> Software Maintenance and Utilities -> Remove Installed Software 5 http://www-01.ibm.com/support/docview.wss?rs=2239&context=ssjt9l&dc=d400&uid=swg24022586&loc=en_us&cs=utf- &&lang=en 6 http://www-01.ibm.com/support/docview.wss&rs=2239&context=ssjt9l&dc=d400&uid=swg24022049&loc=en_us&cs=utf- &&lang=en 14
Installation and Configuration Information 3.3.4. Installation of the TGZ Package Note The installation of Open Object Rexx requires that all steps be run with root authority. If you have the package maintenance tool pkgtool on your system, you can use it to install or de-install Open Object Rexx via a graphical tool. Start pkgtool as root and install the oorexx-4.0.0-1.i386.tar.gz or oorexx-4.0.0-1.x86_64.tar.gz, as appropriate, package. All files will be copied to the directory /opt/oorexx/. If pkgtool is not available, you can install Open Object Rexx by copying the oorexx-4.0.0-1.i386.tar.gz (or x86_64) file to the root directory ( / ) and decompress the package with the following command: tar -zxvf oorexx-4.0.0-1.i386.tar.gz Then, you must manually execute the following commands, or cut and paste the following into a shell script and execute the script: if [ -d /opt/oorexx ]; then ln -sf /opt/oorexx/bin/rexx /usr/bin/rexx ln -sf /opt/oorexx/bin/rexxc /usr/bin/rexxc ln -sf /opt/oorexx/bin/rxapi /usr/bin/rxapi ln -sf /opt/oorexx/bin/rxqueue /usr/bin/rxqueue ln -sf /opt/oorexx/bin/rxsubcom /usr/bin/rxsubcom ln -sf /opt/oorexx/bin/rexx.img /usr/bin/rexx.img ln -sf /opt/oorexx/bin/rexx.cat /usr/bin/rexx.cat ln -sf /opt/oorexx/bin/rxregexp.cls /usr/bin/rxregexp.cls ln -sf /opt/oorexx/bin/rxftp.cls /usr/bin/rxftp.cls ln -sf /opt/oorexx/bin/socket.cls /usr/bin/socket.cls ln -sf /opt/oorexx/bin/oorexx-config /usr/bin/oorexx-config ln -sf /opt/oorexx/lib/oorexx/librexx.so.4.0.0 /usr/lib/librexx.so.4.0.0 ln -sf /opt/oorexx/lib/oorexx/librexx.so.4.0.0 /usr/lib/librexx.so.4 ln -sf /opt/oorexx/lib/oorexx/librexx.so.4.0.0 /usr/lib/librexx.so ln -sf /opt/oorexx/lib/oorexx/librexx.la /usr/lib/librexx.la ln -sf /opt/oorexx/lib/oorexx/librexxapi.so.4.0.0 /usr/lib/librexxapi.so.4.0.0 ln -sf /opt/oorexx/lib/oorexx/librexxapi.so.4.0.0 /usr/lib/librexxapi.so.4 ln -sf /opt/oorexx/lib/oorexx/librexxapi.so.4.0.0 /usr/lib/librexxapi.so ln -sf /opt/oorexx/lib/oorexx/librexxapi.la /usr/lib/librexxapi.la ln -sf /opt/oorexx/lib/oorexx/librxsock.so.4.0.0 /usr/lib/librxsock.so.4.0.0 ln -sf /opt/oorexx/lib/oorexx/librxsock.so.4.0.0 /usr/lib/librxsock.so.4 ln -sf /opt/oorexx/lib/oorexx/librxsock.so.4.0.0 /usr/lib/librxsock.so ln -sf /opt/oorexx/lib/oorexx/librxsock.la /usr/lib/librxsock.la ln -sf /opt/oorexx/lib/oorexx/librxmath.so.4.0.0 /usr/lib/librxmath.so.4.0.0 ln -sf /opt/oorexx/lib/oorexx/librxmath.so.4.0.0 /usr/lib/librxmath.so.4 ln -sf /opt/oorexx/lib/oorexx/librxmath.so.4.0.0 /usr/lib/librxmath.so ln -sf /opt/oorexx/lib/oorexx/librxmath.la /usr/lib/librxmath.la ln -sf /opt/oorexx/lib/oorexx/librxregexp.so.4.0.0 /usr/lib/librxregexp.so.4.0.0 ln -sf /opt/oorexx/lib/oorexx/librxregexp.so.4.0.0 /usr/lib/librxregexp.so.4 ln -sf /opt/oorexx/lib/oorexx/librxregexp.so.4.0.0 /usr/lib/librxregexp.so ln -sf /opt/oorexx/lib/oorexx/librxregexp.la /usr/lib/librxregexp.la ln -sf /opt/oorexx/lib/oorexx/librexxutil.so.4.0.0 /usr/lib/librexxutil.so.4.0.0 ln -sf /opt/oorexx/lib/oorexx/librexxutil.so.4.0.0 /usr/lib/librexxutil.so.4 ln -sf /opt/oorexx/lib/oorexx/librexxutil.so.4.0.0 /usr/lib/librexxutil.so 15
Open Object Rexx ln -sf /opt/oorexx/lib/oorexx/librexxutil.la /usr/lib/librexxutil.la ln -sf /opt/oorexx/include/rexx.h /usr/include/rexx.h ln -sf /opt/oorexx/include/rexxapidefs.h /usr/include/rexxapidefs.h ln -sf /opt/oorexx/include/rexxapitypes.h /usr/include/rexxapitypes.h ln -sf /opt/oorexx/include/rexxplatformapis.h /usr/include/rexxplatformapis.h ln -sf /opt/oorexx/include/rexxplatformdefs.h /usr/include/rexxplatformdefs.h ln -sf /opt/oorexx/include/oorexxapi.h /usr/include/oorexxapi.h ln -sf /opt/oorexx/include/oorexxerrors.h /usr/include/oorexxerrors.h ln -sf /opt/oorexx/share/man/man1/oorexx-config.1 /usr/share/man/man1/oorexxconfig.1 ln -sf /opt/oorexx/share/man/man1/rexx.1 /usr/share/man/man1/rexx.1 ln -sf /opt/oorexx/share/man/man1/rexxc.1 /usr/share/man/man1/rexxc.1 ln -sf /opt/oorexx/share/man/man1/rxsubcom.1 /usr/share/man/man1/rxsubcom.1 ln -sf /opt/oorexx/share/man/man1/rxqueue.1 /usr/share/man/man1/rxqueue.1 ln -sf /opt/oorexx/share/oorexx/rexxtry.rex /usr/bin/rexxtry.rex # allow backwards compatibility to Object REXX 2.x ln -sf /opt/oorexx/lib/oorexx/librexxapi.so.4.0.0 /usr/lib/librexxapi.so.2 fi if [ -d /etc/rc.d/init.d ]; then # Red Hat cp /opt/oorexx/bin/rxapid /etc/rc.d/init.d ln -sf /etc/rc.d/init.d/rxapid /etc/rc.d/rc3.d/s89rxapid ln -sf /etc/rc.d/init.d/rxapid /etc/rc.d/rc5.d/s89rxapid ldconfig /etc/rc.d/init.d/rxapid start else # Suse cp /opt/oorexx/bin/rxapid /etc/rc.d ln -sf /etc/rc.d/rxapid /etc/rc.d/rc3.d/s89rxapid ln -sf /etc/rc.d/rxapid /etc/rc.d/rc5.d/s89rxapid ldconfig /etc/rc.d/rxapid start fi To remove oorexx after installing using the tar file, just reverse the process. Manually execute, or cut and paste into a shell script the following commands: rm -f /usr/bin/rexx rm -f /usr/bin/rexxc rm -f /usr/bin/rxapi rm -f /usr/bin/rxqueue rm -f /usr/bin/rxsubcom rm -f /usr/bin/rexx.img rm -f /usr/bin/rexx.cat rm -f /usr/bin/rxregexp.cls rm -f /usr/bin/rxftp.cls rm -f /usr/bin/socket.cls rm -f /usr/bin/oorexx-config rm -f /usr/lib/librexx.so rm -f /usr/lib/librexx.4.0.0 rm -f /usr/lib/librexx.4 rm -f /usr/lib/librexxapi.so rm -f /usr/lib/librexxapi.4.0.0 rm -f /usr/lib/librexxapi.4 rm -f /usr/lib/librxsock.so rm -f /usr/lib/librxsock.4.0.0 rm -f /usr/lib/librxsock.4 rm -f /usr/lib/librxmath.so rm -f /usr/lib/librxmath.4.0.0 rm -f /usr/lib/librxmath.4 rm -f /usr/lib/librxregexp.so rm -f /usr/lib/librxregexp.4.0.0 rm -f /usr/lib/librxregexp.4 16
Installation and Configuration Information rm -f /usr/lib/librexxutil.so rm -f /usr/lib/librexxutil.4.0.0 rm -f /usr/lib/librexxutil.4 rm -f /usr/share/man/man1/oorexx-config.1 rm -f /usr/share/man/man1/rexx.1 rm -f /usr/share/man/man1/rexxc.1 rm -f /usr/share/man/man1/rxsubcom.1 rm -f /usr/share/man/man1/rxqueue.1 rm -f /usr/include/rexx.h rm -f /usr/include/rexxapidefs.h rm -f /usr/include/rexxapitypes.h rm -f /usr/include/rexxplatformapis.h rm -f /usr/include/rexxplatformdefs.h rm -f /usr/include/oorexxapi.h rm -f /usr/include/oorexxerrors.h rm -f /usr/bin/rexxtry.rex rm -rf /usr/share/oorexx if [ -d /etc/rc.d/init.d ]; then # Red Hat /etc/rc.d/init.d/rxapid stop rm /etc/rc.d/rc3.d/s89rxapid rm /etc/rc.d/rc5.d/s89rxapid rm /etc/rc.d/init.d/rxapid else # Suse /etc/rc.d//rxapid stop rm /etc/rc.d/rc3.d/s89rxapid rm /etc/rc.d/rc5.d/s89rxapid rm /etc/rc.d/rxapid fi ldconfig # Do no change this to rm -rf /opt/oorexx # If you do you could wipe out the all the /usr subdirs! if [ -d /opt/oorexx ]; then rm -rf /opt/oorexx fi Then delete the oorexx directory in /opt. Be careful you delete what you mean to delete: cd /opt # Check that the oorexx directory is there: ls oorexx # If the oorexx directory is there: rm -rf oorexx/ 3.3.5. Installation/Removal of the PKG Package Note The installation of Open Object Rexx requires that all steps be run with root authority. 17
Open Object Rexx To install the pkg package, use your package-manager. Select the appropriate package for the installation. Refer to your package manager for further information. The package manager adds orexx to your local pkg-database. The basic command for the command line package-manager is: pkgadd -d <packagename> Open Object Rexx is installed in the directory /opt/oorexx. The command pkgrm can also be used to remove the package from the database if it is entered at the command line: pkgrm oorexx 3.4. Configuration There is nothing to configure for a Unix/Linux installation. 3.5. Open Object Rexx and Other Rexx Interpreters If you have other Rexx interpreters installed, you may have to set the PATH manually because Open Object Rexx and the other Rexx interpreters may both use the name "rexx" for invoking the interpreter. Interpreter error messages that begin with "Rexx: " indicate that another Rexx interpreter was called instead of Open Object Rexx. You can verify which Rexx interpreter is running either by the form of the error messages, by running rexxtry and executing SAY VERSION, or by invoking rexx -v, which then should display information about the Rexx interpreter that is invoked. If no information is displayed, it is not Open Object Rexx. If you don't want the other Rexx interpreter to be invoked, you should remove it from the PATH, delete it, or rename the rexx binary in the /usr/bin directory to orx and use orx to invoke the interpreter. 3.6. Exploring Open Object Rexx for Unix/Linux Once you have installed the Open Object Rexx files you can run Rexx scripts by issuing the command rexx followed by the name of your script at the command prompt. To interactively try Rexx statements, from a command prompt type rexx rexxtry. Enter exit to end the program. To help you explore programming in Open Object Rexx, the following sample programs are provided in the /opt/oorexx/share/oorexx: ccreply.rex concurrent program using REPLY complex.rex complex number class factor.rex factorial program greply.rex concurrent program using WAIT and NOWAIT guess.rex a guessing game 18
Exploring Open Object Rexx for Unix/Linux ktguard.rex concurrent program using START and GUARD makestring.rex demonstrated the usage of the makestring method month.rex displays a calendar for the month of January pipe.rex a pipeline implementation properties.rex shows usage of the.properties class and some Sys functions qdate.rex date query program qtime.rex time query program rexxcps.rex measures Rexx clauses per second rexxtry.rex interactively try out Rexx statements scclient.rex scserver.rex a client / server demonstration using the.socket class from socket.cls semcls.rex implements a semaphore class on oorexx sfclient.rex sfserver.rex a client / server demonstration using the external rxsock library stack.rex program that uses a stack class usecomp.rex program that uses the complex number class usepipe.rex program that uses the pipeline implementation Note To run these programs, you must either add the /opt/oorexx/share/oorexx directory to the PATH or execute them directly from the /opt/oorexx/share/oorexx directory. 19
Open Object Rexx 4. The rxapi Daemon Process Part of oorexx is rxapi which is a daemon process that manages all data that can persist across interpreter invocations or is used for cross-process communications. The rxapi process manages the Rexx data queues, the macrospace, and all of the external function, subcommand handler and exit registrations. In oorexx 4.0.0, and later versions, the interpreter and rxapi communicate through a socket interface, rather than through shared memory as in versions of oorexx prior to 4.0.0. Ideally, rxapi should run as a service. When you install oorexx from a package on Linux, rxapi will be set up to run as a system service. When installing the Windows package, the default is to install rxapi as a Windows service. In this scenario, the operating system will start the rxapi daemon on boot up and shut the daemon down when the system is halted. If rxapi is not installed as a service, the first time the interpreter executes, and needs the function provided by rxapi, the interpreter will start the daemon process. Once started, the rxapi process will continue to run until the system is halted. There is little or no point in stopping the rxapi process once it is started. Be aware that if you do stop the rxapi process, all queues, all registered subcommand handlers, system exits, and external functions, and the macrospace, disappear. When rxapi is installed as a service, it can be started and stopped by the user, if the user has the proper authority, in the same manner as other services. On Windows, the services manager can be used to start or stop rxapi. Or, from the command line, net stop or net start can also be used: C:\work.ooRexx>net stop rxapi The RXAPI service is stopping. The RXAPI service was stopped successfully. C:\work.ooRexx>net start rxapi The RXAPI service was started successfully. C:\work.ooRexx> On Linux, the following can be used from the command line: [root@falcon work.oorexx]# /etc/init.d/rxapid stop Stopping rxapi: [ OK ] [root@falcon work.oorexx]# /etc/init.d/rxapid start Starting rxapi: [ OK ] [root@falcon work.oorexx]# It is likely that your installation of Linux also has a graphical means of starting or stopping services. On AIX, the following can be used from the command line: 20
Known Limitations, Problems and Workarounds [root@myhost]# stopsrc -s rxapi 0513-044 The rxapi Subsystem was requested to stop. [root@myhost]# startsrc -s rxapi 0513-059 The rxapi Subsystem has been started. Subsystem PID is 1134614. [root@myhost]# lssrc -s rxapi Subsystem Group PID Status rxapi 1134614 active [root@falcon work.oorexx]# If rxapi is not installed as a service, it can be stopped by using an appropriate process killer for your platform. Typically the Task Manager on Windows and kill on a unix-like system. 5. Known Limitations, Problems and Workarounds The global directory.environment is process local, not global to the system. Under Unix/Linux only piped " " input and redirected output (">") can be evaluated by Open Object Rexx. Redirected input ("<") can not be evaluated. 6. Documentation All documentation is contained in PDF files and zipped HTML package files and is available online at SourceForge in the files section for documentation for the version of the interpreter in use. For the 4.2.0 release the documentation is at: oorexx 4.2.0 Documentation 7 The following documents are available: rexxref.pdf This is the Open Object Rexx: Reference. rexxpg.pdf This is the Open Object Rexx: Programming Guide. oodialog.pdf This is the oorexx Documentation: oodialog Reference 4.2.3. oodguide This is the oorexx Documentation: oodialog User Guide 4.2.3. rxsock.pdf This is the Open Object Rexx: TCP/IP Socket Library Functions Reference. rxftp.pdf This is the Open Object Rexx: FTP Class Library Reference. rxmath.pdf This is the Open Object Rexx: Mathematical Functions Reference. winextensions.pdf This is the Open Object Rexx: Windows Extensions Reference. unixextensions.pdf This is the Open Object Rexx: Unix Extensions Function Reference. 7 https://sourceforge.net/projects/oorexx/files/oorexx-docs/4.2.0/ 21
Open Object Rexx readme.pdf This document itself. The document is in PDF and HTML format. A. Notices Any reference to a non-open source product, program, or service is not intended to state or imply that only non-open source product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any Rexx Language Association (RexxLA) intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-open source product, program, or service. Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurement may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment. Information concerning non-open source products was obtained from the suppliers of those products, their published announcements or other publicly available sources. RexxLA has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-rexxla packages. Questions on the capabilities of non-rexxla packages should be addressed to the suppliers of those products. All statements regarding RexxLA's future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only. This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. A.1. Trademarks Open Object Rexx and oorexx are trademarks of the Rexx Language Association. The following terms are trademarks of the IBM Corporation in the United States, other countries, or both: 1-2-3 AIX IBM Lotus OS/2 S/390 VisualAge AMD is a trademark of Advance Micro Devices, Inc. Intel, Intel Inside (logos), MMX and Pentium are trademarks of Intel Corporation in the United States, other countries, or both. Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the Unites States, other countries, or both. 22
Source Code For This Document Linux is a trademark of Linus Torvalds in the United States, other countries, or both. Microsoft, Windows, Windows NT, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both. UNIX is a registered trademark of The Open Group in the United States and other countries. Other company, product, or service names may be trademarks or service marks of others. A.2. Source Code For This Document The source code for this document is available under the terms of the Common Public License v1.0 which accompanies this distribution and is available in the appendix Appendix B, Common Public License Version 1.0. The source code itself is available at http://sourceforge.net/project/ showfiles.php?group_id=119701. The source code for this document is maintained in DocBook SGML/XML format. B. Common Public License Version 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. B.1. Definitions "Contribution" means: 1. in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and 2. in the case of each subsequent Contributor: a. changes to the Program, and b. additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 23
Open Object Rexx B.2. Grant of Rights 1. Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. 2. Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. 3. Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. 4. Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. B.3. Requirements A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: 1. it complies with the terms and conditions of this Agreement; and 2. its license agreement: 24 a. effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; b. effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; c. states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and d. states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: 1. it must be made available under this Agreement; and 2. a copy of this Agreement must be included with each copy of the Program.
Commercial Distribution Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. B.4. Commercial Distribution Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. B.5. No Warranty EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. B.6. Disclaimer of Liability EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 25
Open Object Rexx B.7. General If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. C Common Public License, 23 CPL, 23 L License, Common Public, 23 License, Open Object Rexx, 23 N Notices, 22 Index 26
General O oorexx License, 23 Open Object Rexx License, 23 27
28