PL/I for OpenVMS and Tru64
1.WelcomeKednos has closed its doors!,  What is PL/I?
2.DocumentationKednos PL/I for OpenVMS,  Kednos PL/I for Tru64 UNIX,  Integration Products
2.1Articles
3.IntegrationOverview,  Examples
3.1SDLOverview,  Software,  Documentation
3.2JavaOverview,  Software,  Documentation,  Examples
4.HobbyistOverview,  Public Access,  Emulated/Simulated Systems,  Links
5.Kits
6.Examples
7.ResourcesPL/I Software,  Mailing Lists & Newsgroups,  Games
7.1Editors
7.2Code ManagementConcurrent Version System,  Code Management System,  Mercurial,  Subversion
7.3Benchmarks
7.4RexxOverview,  NetRexx,  Links
8.Site Map
9.Contact

1.  Welcome

Kednos has closed its doors!

After many years supplying PL/I compilers to OpenVMS and Tru64 UNIX users around the world, from October 2016, Kednos will cease trading.  The PL/I compilers, run-time libraries and integration tools will no longer be updated or supported by Kednos.  Licenses for commercial purposes can still be obtained on an "as is" basis, here.

This website will remain as a place to download software kits for those still holding valid licenses.  It is also still possible to request a hobbyist license and use the compilers in a non-commercial capacity.

What is PL/I?

PL/I is a powerful high-level programming language that is a superior alternative to using Fortran for scientific applications, COBOL for commercial applications and C for systems programming. Enjoy using the King of Programming Languages and don't worry about buffer overrun exploits.

Why should you use PL/I?   Find out!    How does PL/I compare to C?

From this site you may download both documentation and kits for the PL/I compiler for OpenVMS for both Alpha and VAX. As well as PL/I Run-Time Library kits for OpenVMS VAX, Alpha and I64. Also, you may download the kits for the PL/I compiler for Tru64.

 *For an etymology of Kednos see the Perseus Project.

2.  Documentation

This page is the starting point for accessing documentation for all Kednos software products.

All manuals are produced using either DECdocument from Touch Technologies, Inc. or Javadoc from Oracle.

Kednos PL/I for OpenVMS

The following documentation is related to all versions of Kednos PL/I for OpenVMS on all supported architectures.

Documentation for HP OpenVMS is available in HTML and PDF format from HP here.

All documentation for all OpenVMS products (including Integration products) can be downloaded below as a single saveset.as a single savset.  It is possible that the BACKUP savset file attributes may be scrambled.  To correct this download the DCL procedure, RESET_BACKUP_SAVSET_ATTRIBUTES.COM and execute it, passing the saveset name as the first parameter.

  • OpenVMS Products Documentation Bundle ZIP|BCK

Kednos PL/I for Tru64 UNIX

The following documentation is related to all versions of Kednos PL/I for Tru64 UNIX (formerly Digital UNIX and OSF/1).

  • Installation Guide HTML
  • User's Manual HTML
  • Reference Manual HTML

Documentation for HP Tru64 UNIX is available in HTML and PDF format from HP here.

Integration Products

The documentation for all integration products can be found on their respective pages.  The links below will take you to the documentation for the relevant product.

2.1  Articles

 Date  Article
29 Jul 2009 OpenVMS I64 TIE Internals: Emulating Alpha Control Instructions HTML|PDF
 

This article, published in the OpenVMS Technical Journal V13, is intended as the first in a series of articles detailing as finely as possible the internals of the Translated Image Environment for OpenVMS I64.

This particular article covers the emulation of Alpha control instructions. It describes both local and non-local jumps as well as emulated and translated branches.

22 Jun 2009 WSIT and J2VMS: A Comparative Analysis HTML|PDF
 

This article attempts to compare the features of Kednos' Java-to-VMS Toolkit and HP's Web Services Integration Toolkit as a method for calling native OpenVMS routines from a Java environment.

*This article was submitted to the OpenVMS Technical Journal, but rejected on the grounds that this journal does not publish articles comparing products.

 28 Jan 2009 Calling OpenVMS Native Routines From Java HTML|PDF
  This article, published in the OpenVMS Technical Journal V12, is a brief introduction and tutorial on the use of a collection of tools offered by Kednos intended to make it easier for Java and native code to interact. Although Kednos' primary business is PL/I compilers, the tools described in this article can be used to interface Java with any native OpenVMS language that adheres to the common calling standard.

3.  Integration

Overview

The following sections provide a range of tools and libraries for integrating PL/I on OpenVMS with other native languages. Although all native languages on OpenVMS adhere to the common calling standard, there are some situations where building up the necessary modules and include files can be a large and drawn out task. The tools offered here attempt to ease this difficulty.

The following tools and libraries are currently available:

  • J2VMS, a interface between the Java Virtual Machine and the native calling standard of OpenVMS,
  • SDLEXT, a collection of Structure Definition Language (SDL) compiler backends that generate output for Java (to be used with J2VMS) and other languages;

Use the menu on the left hand side to navigate to the language integration you are interested in.

In many situations the tools presented here are as useful to other languages as they are PL/I. For example, the J2VMS Java->OpenVMS interface can be used to call routines and manipulate data structures from any language.

Examples

The following is a growing collection of complete working examples that attempt to properly demonstrate the use of these integration tools.

Phone Book

This example demonstrates the calling of OpenVMS native routines from Java, as well as the manipulation of data structures. The original program is an example PL/I application called PHONE (not to be confused with the OpenVMS PHONE utility). It is a simple progam that presents an example for file I/O and screen management as a phone book.

For the purpose of demonstrating the integration utilities the file access routines were extracted and put into a run-time library. A Java-Swing application was then developed that uses this RTL to access and update the phone book file.

The main objectives were to:

  • move the application to a Java-Swing based frontend,
  • re-use the existing file access routines,
  • avoid any major changes to the original application,
  • allow the original application to continue being used in parallel with the new Java application.

All of these objectives were met and the whole process is demonstrated in the article, Calling Native OpenVMS Routines from Java.

A backup saveset containing the full source for both the PL/I and Java-Swing applications can be downloaded here. The saveset is also available inside a ZIP file here.

PHONE - The original PL/I application
Source:
BUILD_PHONE.COM Build Procedure.
CONSTANTS.PLI Some helpful constants (include file).
DATABASE.PLI Utility routines for working with the phone book file.
ENTRY.PLI Database entry record definition (include file).
KEYS.PLI Keypad constants (include file).
OPERATIONS.PLI Menu operation constants (include file).
PHONE.FDL Phone book database file.
PHONE.PLI Main program.
SCREEN.PLI Screen handling support routines.
Description: The PHONE utility (not to be confused with the OpenVMS PHONE utility) is a simple phone/address book utility that maintains it's data in an indexed file. It originally appeared in the Kednos PL/I for OpenVMS example program library that ships with the compiler.
Build Instructions:

The following build instructions, as well as building the PHONE utility, also build the run-time library necessary to implement the jPhone utility shown below.

$ TYPE BUILD_PHONE.COM
$ PLI PHONE
$ PLI DATABASE
$ PLI SCREEN
$ LINK/SHARE=DATABASE_RTL.EXE,SYS$INPUT/OPTION
SYMBOL_VECTOR = ( -
    OPEN_PHONEBOOK = PROCEDURE, -
    CLOSE_PHONEBOOK = PROCEDURE, -
    GET_A_RECORD = PROCEDURE, -
    GET_A_MONTH_RECORD = PROCEDURE, -
    GET_A_DATE_RECORD = PROCEDURE, -
    WRITE_A_RECORD = PROCEDURE, -
    DELETE_A_RECORD = PROCEDURE -

    )
$ DEFINE/NOLOG DATABASE_RTL SYS$DISK:[]DATABASE_RTL
$ LINK PHONE,SCREEN,SYS$INPUT/OPTIONS
DATABASE_RTL/SHARE
$ IF (F$SEARCH("PHONE.DAT") .EQS. "") THEN CREATE/FDL=PHONE.FDL
$ EXIT 1

$ @BUILD_PHONE.COM

jPhone - The Java/Swing version of PHONE.
Source: Database.java (javadoc) Java class interface to the native DATABASE_RTL run-time library.
DATABASEDEF.java Java class generated from DATABASEDEF.SDL. It details the record structure of the phone book database file and the native routines found in DATABASE_RTL.
DATABASEDEF.SDL SDL header file, generated from DATABASE.PLI (above).
EntryPanel.java Panel for manipulating phone book entries.
EventPanel.java Panel for querying the phone book for upcoming events.
JPhone.java Main application.
Description: This application is the Java/Swing based version of the PHONE utility. It uses J2VMS to interface with the DATABASE_RTL run-time library so it can manipulate the same data file in a way that can be viewed by either the Java or native application.
Build Instructions:

$ TYPE BUILD_JPHONE.COM
$ set noon
$ on control_y then goto bail_out
$
$ set process/parse_style=extended
$ define/nolog decc$efs_case_preserve enable
$ define/nolog decc$efs_case_special enable
$ define/nolog decc$efs_charset enable
$ define/nolog decc$argv_parse_style enable
$
$ jc = "''javac' -classpath - "
     + """/sys$library/j2vms$vs.jar:./bin"" -d ""./bin"""
$
$ set verify
$ $ ! Database Interface
$ jc Database.java
$ jc DATABASEDEF.java
$
$ ! Supporting classes
$ jc UpperCaseField.java
$
$ ! Application
$ jc EntryPanel.java
$ jc EventPanel.java
$ jc JPhone.java
$
$ set noverify
$
$ jphone == "''java' -classpath " -
          + """/sys$library/j2vms$vs.jar:./bin"" com.kednos.jphone.JPhone"

$
$ write sys$output "Type: ""jphone"" to run"
$bail_out:
$ set noverify
$ exitt 1
$ @BUILD_JPHONE.COM

3.1  SDL

Overview

Structure Definition Language (or SDL) is a language for defining data structures, constants, external symbols and entry points. The SDL compiler is a tool for taking those definitions and generating language specific include files.

The SDLEXT product offers a collection of backends that generate output for the following languages:

  • Java, for use with the J2VMS interface
  • XML Schema Definition.

Software

SDLEXT ships in a combined PCSI kit. This means that the single kit contains software that will install on OpenVMS VAX, Alpha and I64.

  • SDLEXT V2.0 PCSI software kit PCSI|ZIP.

The SDL compiler kit is available on the OpenVMS Freeware distribution. It is also available online here. The last release (EV1-65) of ALPHA_SDL can also be downloaded (including source) from here.

Documentation

The following documentation covers the SDLEXT software product:

All manuals are produced using DECdocument from Touch Technologies, Inc.

Documentation for the SDL compiler and language can be viewed in either HTML, PS or PDF formats. The original VAX SDL RUNOFF manual can be viewed here.

3.2  Java

Overview

J2VMS is a generic calling interface for accessing native code on OpenVMS. By using a collection of classes that mimic the argument passing mechanisms of compiled languages and a helper class that is reminiscent of LIB$CALLG it is possible to call any routine found in a shareable run-time library. Also included is the ability to manipulate OpenVMS data structures using a method similar to that offered in the BLISS programming language.

Originally conceived and written by Jim Brankin, J2VMS disappeared into obscurity for some time. Kednos has since resurrected this software package and begun active development of the interface. Below is documentation and software for the latest release.

Articles relating to J2VMS have been published in the OpenVMS Technical Journal. Calling OpenVMS Native Routines From Java was published in V12. WSIT and J2VMS: A Comparative Analysis is an unpublished article that attempts to compare the merits of HP's Web Services Integration Toolkit and Kednos' Java-to-VMS Toolkit..

Software

The following J2VMS software product kits are available for download:

  • J2VMS PCSI software kit, PCSI|ZIP. This kit contains V1.3 of J2VMS and is for both OpenVMS Alpha and I64.

The last release from www.j2vms.co.uk (now defunct), Version 1.2 is available from here.

Java for OpenVMS Alpha and I64 can be downloaded from HP at their website here.

Documentation

The following documentation covers the J2VMS product:

All manuals are produced using DECdocument from Touch Technologies, Inc. and Javadoc from Oracle.

For all Java on OpenVMS Alpha and I64 related documentation please visit the following HP websites:

For documentation related to the Java language and API then please consult the Oracle website.

Examples

The following are a collection of examples demonstrating the J2VMS interface. Some have corresponding native language examples that can be used to compare the two environments. All Java examples are included in the software product kit.

Hello World
Source: put.java (javadoc)
Description: This example simply demonstrates the declaration of an external routine (similar to the C extern construct) and calling it. In this case it is the routine LIB$PUT_OUTPUT writting that familiar message to the terminal.
Build Instructions: Assuming the correct J2VMS and Java setup has been preformed, the following commands should build and execute the example program.
$ javac -classpath "/sys$library/j2vms$vs.jar" put.java
$ java -classpath "/sys$library/j2vms$vs.jar:./" put

Get Some Input
Source: get.java (javadoc)
Description: This example fetches a line of input using the LIB$ Run-Time Library routine LIB$GET_INPUT and then writes it to the terminal using LIB$PUT_OUTPUT. This example demonstrates the use of the StringBuffer class to pass a dynamic string to LIB$GET_INPUT for receiving the resulting string.
Build Instructions:

Assuming the correct J2VMS and Java setup has been performed, the following commands should build and execute the example program.

$ javac -classpath "/sys$library/j2vms$vs.jar" get.java
$ java -classpath "/sys$library/j2vms$vs.jar:./" get

Disk Driver
Source: disk_driver.java
Description:

This program is an example that demonstrates the use of OpenVMS disk drivers using RMS and QIO services. It is based on the C module of the same name and produces identical results. The C version can be found in SYS$EXAMPLES or can be downloaded here. The following comments are from the module header:

  DISK_DRIVER -- Programming example to demonstrate use of
  OpenVMS disk drivers using RMS and QIO services.  The module
  first uses RMS $CREATE to create a file called MYDATAFIL.DAT in
  the default directory and then writes one hundred 512-byte (1 disk
  block) records, each of which contains the record number
  repeated 512 times, using RMS $PUT.  It then uses QIO services
  to access, randomly read and write, and close the file, swapping the
  contents of each pair of records.  If any errors are detected,
  the program exits with the error status associated with the
  error.
Build Instructions:

Assuming the correct J2VMS and Java setup has been performed, the following commands should build and execute the example program.

$ javac -classpath "/sys$library/j2vms$vs.jar" disk_driver.java
$ java -classpath "/sys$library/j2vms$vs.jar:./" disk_driver

Working With Locks
Source: lock.java
Description: This example demonstrates calling the $ENQW and $DEQW System Services from Java including modifying the lock value block.
Build Instructions:

Assuming the correct J2VMS and Java setup has been performed, the following commands should build and execute the example program.

$ javac -classpath "/sys$library/j2vms$vs.jar" lock.java
$ java -classpath "/sys$library/j2vms$vs.jar:./" lock

Get Some More Input
Source: get.java
Description: This example is from the J2VMS User Guide. It simply demonstrates the difference between passing java.lang.String and java.lang.StringBuffer objects by descriptor. It does this by requesting input from the user via the LIB$ Run-Time Library LIB$GET_INPUT.
Build Instructions:

Assuming the correct J2VMS and Java setup has been performed, the following commands should build and execute the example program.

$ javac -classpath "/sys$library/j2vms$vs.jar" get2.java
$ java -classpath "/sys$library/j2vms$vs.jar:./" get2

4.  Hobbyist

Overview

Kednos is a proud supporter of the OpenVMS Hobbyist Program.  This program came about as result of the efforts of OpenVMS Hobbyist #1, Pat Jankowiak, the late John Wisniewski and David Cathey from Montagar.  Since then a number of vendors have offered their software products to hobbyists and non-commercial users for a great fee, NOTHING!

Kednos is happy to offer their PL/I compilers for OpenVMS VAX and Alpha under this same licensing arrangement.  To begin you need to qualify for a regular old OpenVMS hobbyist license.  If you do, then you can apply for a Kednos hobbyist license here.  The remainder of this page consists of information and pointers to resources useful to OpenVMS hobbyists.  If you believe there is an error or ommition, then please contact us at here.

Public Access

If you don't have an Alpha or VAX system with which to install the hobbyist PL/I compiler on, there are a number of public access systems available (for non-commercial use) that do have the Kednos PL/I compiler installed.  The following is a list of such systems currently available.

  • eisner.decus.org is possibly the oldest public access OpenVMS system.  It is an Alpha system running a host of hobbyist software, including the Kednos PL/I compiler.
  • FAFNER was a VAX 7000/820 system running OpenVMS V7.3.  However, FAFNER has since been shutdown and replaced with a DS20 called FASOLT. It too has the Kednos PL/I compiler installed.  FASOLT's system manager also offers other classic systems for temporary use.

If you know of a system not listed here, please contact us here.

Emulated/Simulated Systems

If you would rather have your own personal system, yet still don't have the necessary hardware then maybe you sohuld consider and emulated system.  There are a number of VAX and Alpha emulators available for free use, although some only non-commerically.  The following list covers all emulators know to Kednos at this time.  If you know of an emulator not listed here, then please contact us with the details.

  • SIMH is possibly the best know simulator available.  It supports a whole host of systems from DEC as well as other vendors.  Included in this is a MicroVAX 3900 and a VAX-11/780.  Both of these will run OpenVMS and in-turn will run the Kednos PL/I VAX compiler.
  • ts10 is another emulator family.  Originally developed as PDP-10 emulator it has since grown to include PDP-11 and VAX systems.  The VAX system emulated ar the VAXserver 3900 and MicroVAX II.  This emulator will boot OpenVMS and support the Kednos PL/I compiler.
  • Stromasys (formerly SRI) offers a collection of emulators for commercial use (SPARC, HPe3000, VAX, Alpha and PDP-11).  Their VAX and Alpha emulators will run OpenVMS and the Kednos PL/I compilers.
  • es40 is an opensource AlphaServer ES40 emulator.  It boots OpenVMS Alpha and has been known to run on Windows, Linux, OpenVMS MacOS X and Solaris.  It will also run the Kednos PL/I compiler.
  • Advanced Virtualisation Technologies offer both VAX and Alpha commerical emulators capable of running OpenVMS and tje Kednos PL/I compilers.

Links

The following is a collection of links to other supporters of the OpenVMS Hobbyist programme.  Further this great community programme and grab some more hobbyist software for you system, today!

5.  Kits

All software product kits for OpenVMS are compressed with Zip from Info-ZIP with the qualifier /VMS (-"V") to preserve OpenVMS file attributes. All software product kits for Tru64 UNIX. are packaged with tar and gzip. To download a kit, right-click on the link and select 'Save Link As...' (or your browser's equivalent).

For documentation relating to all PL/I products, procede to the Documentation page. Documentation for all Integration products can be found at their respective pages.

  • Latest version of the OpenVMS PL/I compiler for Alpha and VAX.

    • A new kit is available as of January 18, 2007 and resolves a number of outstanding issues for the Alpha compiler. Please refer to the release notes for more information. This version, consolidates the fixes to all outstanding issues.

    • A new kit is available as of October 25, 2003 and resolves a number of outstanding issues for the VAX compiler. Please refer to the release notes for more information. This version, 3.8, consolidates the fixes to all outstanding issues.

  • Just the OpenVMS shared runtime libraries; Alpha RTL and VAX RTL.

  • Latest version of the Native IPF PL/I Run-Time Library  for Translated Images

    • A new production kit is available as of January 14, 2009. This RTL provides support for executing PL/I images that have been compiled and linked on OpenVMS Alpha and subsequently translated, using the AEST utility, for execution on OpenVMS I64. Please refer to the release notes for further information.

  • Latest Unix version of the PL/I compiler for Tru64 UNIX (formerly Digital UNIX and OSF/1).

  • SDL Extensions software kits can be downloaded here.

  • Java-to-OpenVMS Toolkit (J2VMS) software kits can be downloaded here.

ECCN Number EAR99 so no Export Control License is required.

6.  Examples

There are a number of PL/I Programming Examples for the OpenVMS environment which have been culled from this site.

These examples of PL/I code in the OpenVMS environment, range from simple applications to systems programming and has a search engine to assist you in locating specific examples. Suppose, for example, that you are looking for coding examples calling SYS$QIOW. Enter, PLI-EXAMPLE + SYS$QIOW into the search engine.

Both PL1 and PLI are used in this data base. Click on these links and enter specific items into the search engine to further refine the search.

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