DIGITAL Command Language

   

DCL is Digital's (now Hewlett-Packard) standardised command line interface. It had its roots in the IAS and RSTS/11 operating systems, but took its most powerful form in the OpenVMS operating system. It was implemented as a standard across most Digital operating systems, notably RSX-11.

A scripting language that was written when the Fortran programming language was in heavy use, it supports several datatypes, including strings, integers, bit arrays, arrays and booleans, but not floating point numbers. Access to OpenVMS system services (kernel API) is through lexical functions, which perform the same as their compiled language counterparts and allow scripts to get information on system state. DCL includes IF-THEN-ELSE, access to all the RMS file types including stream, indexed, and sequential, but unfortunately lacks a DO-WHILE or other looping construct, requiring users to make do with IF and GOTO instead.

The command line parser is a runtime library (CLI$) that can be compiled into user applications and therefore gives a consistent command line interface for both operating system supplied commands and user written commands. The command line must start with a verb and is then followed by arguments and/or position independent qualifiers (switches in Unix terminology), which can occur anywhere on the command line, or position dependent qualifiers which affect the parameter they appear after. Most qualifiers are position independent; that is, they can appear anywhere in the command line. Only the first most significant part of the verb and qualifier name is required. An example operating system command may look like:

   set audit/alarm/enable=(authorization,breakin=all)
   show device/files $1$DGA1424:

The second show command could also be typed as

   sho dev $1$DGA1424:/fil

Unlike other systems which use paths for locating commands, DCL requires commands to be defined explicitly, either via CLD (Command Language Definition) definitions or a foreign symbol. Most OpenVMS-native commands are defined via CLD files; these are compiled by the CDU (Command Definition Utility) and added to a DCL 'table' -- SYS$LIBRARY:DCLTABLES.EXE by default, although processes are free to use their own tables -- and can then be invoked by the user. For example, to define a command FOO, which accepted the option "/BAR", and was implemented by the image SYS$SYSEXE:FOO.EXE, might require a CLD file similar to:

DEFINE VERB FOO
   IMAGE "SYS$SYSEXE:FOO.EXE"
   QUALIFIER BAR

The user can then type "FOO", or "FOO/BAR", and the FOO program will be invoked. The command definition language supports many types of options, for example dates and file specifications, and allows a qualifier to change the image invoked -- for example "CREATE", to create a file, vs. "CREATE/DIRECTORY" to create a directory.

The other (simpler, but less flexible) method to define commands is via foreign commands. This is more akin to the Unix method of invoking programs. By giving the command:

FOO :== $SYS$SYSEXE:FOO.EXE

the command 'FOO' will invoke FOO.EXE, and supply any additional arguments literally to the program, for example, "foo -v". This method is generally used for programs ported from Unix and other non-native systems.

Recent versions of OpenVMS DCL support the DCL$PATH logical for Unix-style command paths, but this feature does not receive widespread use.

Scripting

DCL scripts look much like any other scripting language, with some exceptions. All DCL verbs in a script are preceded with a $ symbol; other lines are considered to be input to a command. For example, to use the TYPE command to print a paragraph onto the screen, one might use a script similar to:

$ TYPE SYS$INPUT:
This is an example of using the TYPE verb
in the DCL language.
$ EXIT

External links

Retrieved from "http://www.mywiseowl.com/articles/DIGITAL_Command_Language"

This page has been accessed 147 times. This page was last modified 14:18, 24 Nov 2004. All text is available under the terms of the GNU Free Documentation License (see Copyrights for details).