PL/I for OpenVMS and Tru64

7.  Resources

This section presents a number of resources useful to PL/I and OpenVMS users alike.  Please report any broken links or suggestions to webmaster@kednos.com.

PL/I Software

The following are a collection of links to various websites offering utilities and libraries written in PL/I:

  • The PL/I Software Repository is collection of PL/I source from many contributors and maintained by Robin Vowels.
  • The PL/I Language is a website (recently back online) maintained by Peter Flass.  It offers quite a lot of information regarding PL/I including code samples, style guide and manuals.
  • The source code for the final release of MULTICS, MR 12.5, is available from the MIT MULTICS History website.  Unfortunately very little, if any, of this code will compile without modification on a modern PL/I compiler.
  • Lastly, there are also a large number of PL/I programs and examples under the Examples section.

Mailing Lists & Newsgroups

There exists on the internet a few forums for OpenVMS and PL/I. The following list covers some of the more popular and better known.

  • PL1-L is a mailing list that covers the PL/I language in general. It is more targeted towards IBM developers and compilers. To join, visit the listserv website here.
  • PLIEDIT - PL/I Editor for Eclipse, as well as offering the Eclipse editor plugin also has a discussion board that includes general PL/I discussion forums.
  • comp.lang.pl1 is another forum for discussing PL/I. It is a usenet newsgroup so it can be accessed from either Google or your favourite NNTP client. Again, this is a more IBM centric newsgroup, but still a valuable general PL/I resource.
  • comp.os.vms is an OpenVMS specific usenet newsgroup. It can be accessed either via Google or NNTP. There are also some language specific groups, listed here:
  • HP's IT Resource Centre (ITRC) includes a moderated, web-based technical forum. It requires registration and covers all HP products, including OpenVMS. With the signal to noise ratio getting worse at newsgroups like comp.os.vms most HP engineers now lurk here.

Games

OpenVMS isn't typically known for being a premier gaming platform, at least not these days. The following are a collection of of links (some local) to various games that have been ported to OpenVMS.

7.1  Editors

The following are a collection of editors and development environments known to have support for PL/I. In some instances this may be just as simple as syntax highlighting, others offer PL/I integration into a larger development environment.

GNU Emacs http://www.gnu.org/software/emacs
GNU Emacs is an extensible, customizable text editor—and more. At its core is an interpreter for Emacs Lisp, a dialect of the Lisp programming language with extensions to support text editing. Mark Riggle has developed a PL/I mode for Emacs that can be found here. Details of the most recent version of Emacs ported to OpenVMS can be found here.
jEdit http://www.jedit.org
  jEdit is a text editor written in Java. It runs on Windows, Unix/Linux, MacOS X and OpenVMS. Rob Watson has written a module that provides syntax highlighting for PL/I. This module thips with the editor which can be downloaded from here.
Vim http://www.vim.org
 

Vim (Vi improved) is a vi-compatible text editor that runs on nearly every operating system known to humanity (including OpenVMS). Michael Fitz has written a plugin for Vim, PLI-Tools, that provides syntax highlighting and indentation. The plugin and instructions on how to install and use it can be found here.

GNU nano http://www.nano-editor.org
  GNU nano is a simple text editor designed to be a drop-in replacement for the Pico editor that is part of the Pine email suite. Tim Sneddon has written a simple syntax highlighting module that can be included in the user's .nanorc file. This can be downloaded here.
Language Sensitive Editor http://h41379.www4.hpe.com/commercial/decset/decset_index.html
The Language Sensitive Editor (LSE) is a commerical editor that ships as part of HP's DECset development tool chain for OpenVMS. It provides support for PL/I.
Ecplise http://www.pliedit.com/
William Fenalson has developed PLIEDIT, a plugin for the Eclipse IDE. which provides a PL/I sensitive editor for the Eclipse framework.  It supports syntax checking, highly customizable syntax colouring and supports the full IBM and ANSI language features.

7.2  Code Management

The following are a collection of utilities for manageing source code on OpenVMS.  Some are open source, some are proprietry and in some cases they offer only client functionality.

Concurrent Version System

Otherwise known as CVS, this is a distributed version control system that grew out of RCS on UNIX-like systems. Unfortuantely there has never been a port of the server-side functionality of CVS to OpenVMS.  Client support has been available for sometime and older releases can be found on the Freeware V3 and V4 CDs.

Another Java-based CVS implementation is available, called jCVS.  Although there has been mention of work into supporting OpenVMS there does not appear to be anything more than this post to the jCVS forum.

Jouk Jansen has ported the latest unstable release, 1.12.13 to OpenVMS.  It is available from his website here.

Code Management System

Otherwise known as CMS, this is a non-distributed code management system developed and maintained at HP as part of the DECset collection of tools.  It runs on OpenVMS VAX, Alpha and I64.There are a number of supporting tools that add some level of a distributed nature to the system.

For Windows environments there is the DECset CMS and MMS clients.  Although details of these utilities seem to be missing from the HP website they are available and allow integration of CMS into the Visual Studio suite of tools.

For OpenVMS Alpha and I64 environments there is the Distributed Netbeans IDE.  Although this runs on Windows, the source code itself is located elsewhere on an OpenVMS system.

It is also worth mentioning the VDE software.  This is the code management system used to maintain OpenVMS.  It is available on the Freeware V4 and V7 distributions for those interested.  It does require a number of extra products, including CMS and Oracle Rdb.

Mercurial

Mercurial is often referred to by its command name, hg.  Mercurial is another distributed code management system, this time written in Python (there is no support for Python on OpenVMS VAX).  It does have support for client and server functionality on OpenVMS and can be used with both WASD and HP's port of Apache, Secure Web Server.

The OpenVMS port of Python, Mercurial and a host of other Python software has been performed by Jean-Fran�ois Pi�ronne and is available from his website, here.  There is also a forum for discussing Python and MySQL here.

Subversion

Subversion, also known as SVN, is yet another distributed code management system.  It was started as a project to replace CVS, providing many new features and fixing long standing bugs.  Since its creation it has grown and has replaced CVS in many areas.

Support for OpenVMS Alpha and I64 is provided through the Java client implementation, SVNkit.  It can be downloaded here

7.3  Benchmarks

The following are a collection of benchmarks that have been gathered from around the internet and translated into PL/I.

Tower of Hanoi
Source: hanoi.pli
Description:

This benchmark was originally written in C and appeared in Albert Aburto's collection here. Due to increasing processor speed, rather than compute the time taken to complete the Tower Of Hanoi puzzle this benchmark computes the average number of moves in a 25μs slice.

Build Instructions: After downloading the source module, as well as the timer module below, this software can be built using the following DCL commands:
$ PLI HANOI+TIMER
$ LINK HANOI
$ RUN HANOI
Results: The below table shows gathered results for the PL/I version of the benchmark. Results for the C version can be found here
System OS, Compiler CPU
MHz Moves/25μs
Digital VAXstation 4000-90 OpenVMS V7.3, Kednos PL/I 3.8 VAX KA49-A 70 29.689
Compaq PWS XP1000 OpenVMS V8.2, Kednos PL/I 4.4G Alpha EV6 (21264) 500 528.974
Compaq AlphaServer ES45 OpenVMS V8.3, Kednos PL/I 4.4G Alpha EV68CB (21264C) 1000 1058.281
HP Integrity rx2600 Server OpenVMS V8.3-1H1, Kednos PL/I 4.4G and PLI_RTL_AV T4.5-B* Itanium 2 Madison 1.4GHz/1.5MB 1400 47.345

Fibonacci Numbers
Source: fib.pli
Description:

This benchmark was originally written in C and appeared in Albert Aburto's collection here. Its purpose is to calculate the first 40 Fibonacci numbers. The last of which is 102334155.

This benchmark was used to determine the usefulness of an address lookup cache in the OpenVMS I64 Translated Image Environment (TIE).

Build Instructions: After downloading the source module, as well as the timer module below, this software can be built using the following DCL commands:
$ PLI FIB+TIMER
$ LINK FIB
$ RUN FIB
Results: The table below shows results gathered for the PL/I version of the Fibonacci Numbers benchmark. Results for the original C version can be found here.
System OS, Compiler CPU MHz Run Time (sec)
Digital VAXstation 4000-90 OpenVMS V7.3, Kednos PL/I V3.8 VAX KA49-A 70  90.047
Compaq PWS XP1000 OpenVMS V8.3, Kednos PL/I V4.4G Alpha EV6 (21264) 500  3.766
Compaq AlphaServer ES45 OpenVMS V8.3, Kednos PL/I V4.4G Alpha EV68CB (21264C) 1000  1.828
HP Integrity rx2600 Server OpenVMS V8.3-1H1, Kednos PL/I 4.4G and PLI_RTL_AV T4.5-B* Itanium 2 Madison 1.4GHz/1.5MB 1400  70.695

Prime Numbers
Source: prime.pli
Description:

This benchmark determines how long it takes to calculate the specified number of prime numbers. This benchmark is suited to testing raw number crunching, in particular integer division.

Build Instructions: After downloading the source module, as well as the timer module below, this software can be built using the following DCL commands:
$ PLI PRIME+TIMER
$ LINK PRIME
$ RUN PRIME
Results: The table below shows results gathered for the Prime Numbers benchmark. In each of these tests the number of primes calculated was 55,000. The last of which is 679,277.
System OS, Compiler CPU MHz Run Time (sec)
Digital VAXstation 4000-90 OpenVMS V7.3, Kednos PL/I 3.8 VAX KA49-A 70 988.617
Compaq PWS XP1000 OpenVMS V8.2, Kednos PL/I 4.4G Alpha EV6 (21264) 500 158.883
Compaq AlphaServer ES45 OpenVMS V8.3, Kednos PL/I 4.4G Alpha EV68CB (21264C) 1000 79.102
HP Integrity rx2600 Server OpenVMS V8.3-1H1, Kednos PL/I 4.4G and PLI_RTL_AV T4.5-B* Itanium 2 Madison 1.4GHz/1.5MB 1400 3730.970

Timer Module
Source: timer.pli
Description: This module is not a benchmark. It is the timer code used by most of the other benchmarks to determine the time taken to complete. Currently there is only a module for OpenVMS (all versions). If you have a PL/I compiler on your non-OpenVMS system and you have run these benchmarks, please submit your timer module (plus instructions) so it can be published here for others to use.

 *These results were obtained by translating an Alpha version of the benchmark using an experimental release of the OpenVMS Migration Software for Alpha to IPF Systems (OMSAI) binary translator from HP. Run-time support was provided by the Kednos Native IPF PL/I Run-Time Library  for Translated Images.

7.4  Rexx

Overview

Rexx is a programming language developed at IBM by Mike Cowlishaw in 1979.  It is largely based on PL/I.  Cowlishaw's original intention was to develop a language similar to PL/I, but easier for beginners and non-programmers to grasp.  Since its creation Rexx has been extended and implemented on many platforms in different ways.  This page is a repository for all OpenVMS related Rexx activity.

NetRexx

NetRexx is IBM's Java based version of Rexx.  It is entirely written in Java and consists of a compiler and run-time.  Rexx code is compiled to Java which is then compiled to Java byte-code.  Although not officially supported by IBM, it is possible to run NetRexx under OpenVMS.

After downloading and unpacking the IBM binary kit you should be left with a [.NetRexx...] directory tree.  Download the OpenVMS NetRexx setup procedures and unpack the, in the [.NetRexx] directory.  In this kit are two procedures.  The first is NETREXX_STARTUP.COM, to be included in the system startup procedure. It defines the system-wide product logicals.  The second is NETREXX_LOGIN.COM, to be included in the user's login procedure. It sets up the nrc and netrexxc compiler commands.  When adding NETREXX_LOGIN.COM to the user's login procedure it is important to run the Java setup procedure first.  An excert from a typical login procedure might look like this:

    $ if (f$search("SYS$MANAGER:JAVA$142_SETUP.COM") .nes. "")
    $ then
    $    @sys$manager:java$142_setup
    $    if (f$search("NETREXX_ROOT:[000000]NETREXX_LOGIN.COM") .nes. "") then -
    $        @netrexx_root:[000000]netrexx_login
    $ endif

NetRexx is a Java application so it responds to all the Java and DECC$* feature logicals.  At a minimum the following should be configured:

    $ set process/parse_style=extended
    $ define DECC$ARGV_PARSE_STYLE "TRUE"
    $ define DECC$EFS_CASE_PRESERVE "TRUE"
    $ define DECC$EFS_CASE_SPECIAL "TRUE"

To run a compiled program, simply use the Java VM, making sure to include the NetRexx run-time in the classpath.  The following example demonstrates compiling and running a NetRexx program.

    $ type hello.nrx
    /* This is a fully documented NetRexx program */

    say 'Hello World!'
    $ netrexxc hello.nrx
    NetRexx portable processor, version 2.05
    Copyright (c) IBM Corporation, 2005.  All rights reserved.
    Program hello.nrx
    Compilation of 'hello.nrx' successful
    $ java -classpath /netrexx_runlib/NetRexxR.jar:. hello
    Hello World!

It is also possible to run the program in the NetRexx Interpreter, with a couple extra options:

    $ netrexxc hello.nrx -exec -nojava
    NetRexx portable processor, version 2.05
    Copyright (c) IBM Corporation, 2005.  All rights reserved.
    Program hello.nrx
    ===== Exec: hello =====
    Hello World!
    Processing of 'hello.nrx' complete

Links

The following are a collection of links to other Rexx resources around the internet.

  • comp.lang.rexx is a forum for discussing Rexx. It is a usenet newsgroup so it can be accessed from either Google or your favourite NNTP client.
  • RexxLA is The Rexx Language Association.  They are an independant, non-profit organization dedicated for futhering the Rexx Programming Language.  They have been involved in the release of Open Object Rexx and the upcoming open source release of NetRexx.
  • Mike Colishaw's Rexx Page was once the definitive reference for all things Rexx, it has been preserved by RexxLA.