Control Language
   HOME

TheInfoList



OR:

The Control Language (CL) is a
scripting language A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system. Scripting languages are usually interpreted at runtime rather than compiled. A scripting ...
originally created by IBM for the
System/38 The System/38 is a discontinued minicomputer and midrange computer manufactured and sold by IBM. The system was announced in 1978. The System/38 has 48-bit addressing, which was unique for the time, and a novel integrated database system. It w ...
Control Program Facility Control Program Facility (CPF) is the operating system of the IBM System/38. CPF represented an independendent line of development at IBM Rochester, and was unrelated to the earlier and more widely used System Support Program operating system. CPF ...
and later used in
OS/400 IBM i (the ''i'' standing for ''integrated'') is an operating system developed by IBM for IBM Power Systems. It was originally released in 1988 as OS/400, as the sole operating system of the IBM AS/400 line of systems. It was renamed to i5/OS ...
(now known as IBM i). It bears a resemblance to the IBM
Job Control Language Job Control Language (JCL) is a name for scripting languages used on IBM mainframe operating systems to instruct the system on how to run a batch job or start a subsystem. More specifically, the purpose of JCL is to say which programs to run, us ...
and consists of a set of command objects (*CMD) used to invoke traditional programs or get help on what those programs do. CL can also be used to create CL programs (congruent to
shell script A shell script is a computer program designed to be run by a Unix shell, a command-line interpreter. The various dialects of shell scripts are considered to be scripting languages. Typical operations performed by shell scripts include file manip ...
s) where there are additional commands that provide program-like functionality (IF/ELSE,
variable declaration In computer programming, a declaration is a language construct specifying identifier properties: it declares a word's (identifier's) meaning."A declaration specifies the interpretation and attributes of a set of identifiers. A ''definition'' of ...
, file input, etc.) Although CL is a scripting language for system administration, it is used mainly to create compiled programs. The use of interpreted CL scripts through the SBMDBJOB command is in fact extremely limited. While thousands of commands were written by IBM developers to perform system level tasks like compiling programs, backing up data, changing system configurations, displaying system object details, or deleting them, commands are not limited to systems level concerns and can be drafted for user applications as well.


Commands and programs

Parameters A parameter (), generally, is any characteristic that can help in defining or classifying a particular system (meaning an event, project, object, situation, etc.). That is, a parameter is an element of a system that is useful, or critical, when ...
(
command-line argument A command-line interpreter or command-line processor uses a command-line interface (CLI) to receive commands from a user in the form of lines of text. This provides a means of setting parameters for the environment, invoking executables and pro ...
s) defined in the main procedures of all traditional System/38 and AS/400 programs are hard coded lists that are made up of parameters that can be numeric, alphanumeric, boolean, etc. and the order in which parameters are passed is important. This is a stark difference from the
Unix Unix (; trademarked as UNIX) is a family of multitasking, multiuser computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, and ot ...
and
DOS DOS is shorthand for the MS-DOS and IBM PC DOS family of operating systems. DOS may also refer to: Computing * Data over signalling (DoS), multiplexing data onto a signalling channel * Denial-of-service attack (DoS), an attack on a communicat ...
worlds where the parameter list in Unix shell scripts and C programs is a set or array of character pointers and more often than not the parameters are not positionally dependent. The developer's solution to this problem was the command object (*CMD). While the parameters on the command can be specified in any order, each parameter is defined to be passed in a specific order to the program. The programmer can also define, among other things, the parameter's
data type In computer science and computer programming, a data type (or simply type) is a set of possible values and a set of allowed operations on it. A data type tells the compiler or interpreter how the programmer intends to use the data. Most progra ...
, unique parameter name, descriptive text (for prompting), default value (used only if the parameter isn't specified during execution), if the values are restricted to a certain set or range, if the data entered should be changed to another value before calling the program, etc. At its most basic a command names a single program to call when the user types or prompts the command and presses the Enter key. The command takes all of the parameters typed by the user, and those not typed by the user, and builds a parameter list that it passes to the program when it's called.


Syntax

The BNF for a much simplified CL command syntax would be defined as follows: ::= command-name positional-parameter-list> named-parameter-list> ::= positional-parameter-list> ::= parameter-name "(" ")" named-parameter-list> ::= parameter-element-list> ::= CL-name , qualified-CL-name , "*"special-value , generic-CL-name"*" , "'"alphanumeric-value"'" , numeric-value , "X'"hexadecimal-value"'" The items above that end in ''-name'' follow
object Object may refer to: General meanings * Object (philosophy), a thing, being, or concept ** Object (abstract), an object which does not exist at any particular time or place ** Physical object, an identifiable collection of matter * Goal, an ...
naming conventions which, generally speaking, means the name starts with a letter and can be up to ten characters in length. (CL commands are also case-insensitive.) A good example of a typical CL command is the Change Program (CHGPGM) command below: CHGPGM MYPGM OPTIMIZE(*FULL) RMVOBS(*BLKORD *PRCORD) TEXT('My program.') The above command is passing four parameters to the program that does ''Change Program'' processing and they are: * MYPGM: A positional parameter (PGM), and the only required parameter. In this case it's the name of the program being changed. Positional parameters are always first. Once a named parameter appears all parameters that follow must be named parameters. * OPTIMIZE(*FULL): A named parameter specifying a single element which is a special value. In this case it will change the program to be fully optimized. * RMVOBS(*BLKORD *PRCORD): A named parameter (Remove Observability) specifying multiple special values. In this case telling it to remove two kinds of profiling data from the program. * TEXT('My program.'): Another named parameter specifying a single alphanumeric value. In this case it's changing the descriptive text of the program. In reality the system will pass many more parameters than the four specified above. This is because the rest of the CHGPGM command's parameters were not specified, so default values will be passed instead. For every parameter on this, aside from the PGM parameter, that default is ''*SAME'', meaning don't change it.


Prompting

All CL commands can be prompted directly from the command line or within CL program
source Source may refer to: Research * Historical document * Historical source * Source (intelligence) or sub source, typically a confidential provider of non open-source intelligence * Source (journalism), a person, publication, publishing institute o ...
by typing the command and pressing the F4
function key A function key is a key on a computer or terminal keyboard that can be programmed so as to cause an operating system command interpreter or application program to perform certain actions, a form of soft key. On some keyboards/computers, function ...
. An OS/400 command can also be prompted by typing a ? before the command. (This is useful in an interactive program which cues a command string, having already filled in some values.) The system will then present a screen with the set of parameters that the program accepts/requires (required parameters are usually highlighted). Required parameters are listed first, and parameters with system-supplied default values are listed last of all. To see all parameters, press F10. If any one choice requires further selections, those are cued as you select that value for that parameter, by appearing onscreen. Prompting is further enhanced to allow the programmer to find what values are valid for each parameter. To do this during prompting the user would move the cursor to the parameter field in question and press F4 again. The system would then display a screen describing the type of input required and an available list of allowable values. To enter a longer name, or extend the list to allow you to enter extra values, type a plus sign instead of a value. (As when listing names of objects to be saved or restored.)


Command help

Cursor sensitive help can also be provided on commands but it's not required. If help has been provided one can view help for a parameter by moving the cursor to the desired parameter field and pressing F1 (help). To get help for the entire command itself (and all of its parameters) the user would press F1 anywhere on the prompt display and then press F2 (extended help).


Creating new commands

New commands can be created to call non-system programs and they will work exactly like the inbuilt variety. The Command Definition Language is described in th
CL Programmer's Guide
It's a good idea to create help screens for new commands and their parameters. All help screens use panel group objects (*PNLGRP) and these can be created using the UIM language described in th
IBM AS/400 Application Display Programming manual
Beginning in V5R3 of the operating system a new, much simpler method of creating help was added: run the command GENCMDDOC CMD(MYLIB/MYCMD) TODIR('/QSYS.LIB/MYLIB.LIB/QPNLSRC.FILE) GENOPT(*UIM) A skeleton UIM panel group will be automatically generated including all parameters described by the command. The result file can be edited (seu, wdsc, rdi), then compiled with the CRTPNLGRP command, and finally associated with the command via CHGCMD HLPPNLGRP().


Finding the right command

There are 2,262 built-in IBM commands contained in V7R3, but finding them isn't all that hard because of several designs of the system that make life easier. These labor saving designs are: Standardized Abbreviations, Command Grouping Menus, and Command Selection.


Standardized abbreviations

The IBM developers standardized the abbreviations used to create command names. Verbs like ''change'' are always rendered as ''CHG'', ''display'' as ''DSP'', ''work'' as ''WRK'', ''create'' as ''CRT'', etc. Subjects like ''program'' are always ''PGM'', ''user'' is ''USR'', ''module'' is ''MOD'', ''server'' is ''SVR'', etc. You can see every possible verb and subject used on the system in the VERB and SUBJECT menus, just enter the commands GO VERB or GO SUBJECT. Likewise, "Control Language Programming" was abbreviated CLP, and the source type was accordingly CLP. With the introduction of the ILE programming model, the source type was changed to "CLLE".


Command grouping menus

The VERB and SUBJECT menus are part of what are called the Command Grouping Menus. For every Three (or four) Letter abbreviation there is a menu devoted to it that starts with the letters ''CMD''. So to see all ''CHG'' commands the user would execute the command GO CMDCHG. For ''program'' commands the menu would be CMDPGM. There are other menus besides the Command Grouping Menus. The starting point for the menuing system can be accessed by pressing F4 on an empty
command line A command-line interpreter or command-line processor uses a command-line interface (CLI) to receive commands from a user in the form of lines of text. This provides a means of setting parameters for the environment, invoking executables and pro ...
.


Command selection

If one only knows part of a command or if third party software is being used where the commands don't conform to the AS/400 abbreviation standard then you would enter that part of the command that is known, attach an asterisk (to make it generic), and press enter. The system will then display a list of commands in the job's library list that match the generic names just typed. One can then page through the list looking for the command needed and then select it using option 1. In the background the system is using the SLTCMD command to perform this function. If one wants to select all commands in a
library A library is a collection of materials, books or media that are accessible for use and not just for display purposes. A library provides physical (hard copies) or digital access (soft copies) materials, and may be a physical location or a vir ...
then prompt this command and enter the special value *ALL.


Sample code

The following is a sample of CL programming. The program interactively converts dates from Julian to MDY and vice versa. Results are displayed on line 24 of the terminal. It accepts two parameters. The &IN parameter which is the date string to be converted. If a Julian string it should be in the format YYNNN where YY is the year number and NNN is the day number of the year. If a MDY string it must be in the format MMDDYY. The second parameter is &TYP which is the type of date to be converted to. It must be 'J' (Julian) or 'M' (MDY). For example: the command CALL PGM(ICVTDATC) PARM('04180' 'M') will convert the Julian date 04180 to 062804 (June 28, 2004).
PGM (&IN &TYP)

   DCL &IN  *CHAR 6
   DCL &OUT *CHAR 8
   DCL &TYP *CHAR 1

   IF (&TYP = J) +
      DO
         CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*MDY) +
                TOFMT(*JUL) TOSEP(*NONE)
      ENDDO

   ELSE IF (&TYP = M) +
      DO
         CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*JUL) +
                TOFMT(*MDY) TOSEP(*NONE)
      ENDDO

   SNDPGMMSG MSG('IN=' , ,  &IN , ,  '  OUT=' , ,  &OUT) +
             MSGTYPE(*COMP)

ENDPGM  


See also

* Qshell *
Rexx Rexx (Restructured Extended Executor) is a programming language that can be interpreted or compiled. It was developed at IBM by Mike Cowlishaw. It is a structured, high-level programming language designed for ease of learning and reading. ...


References

{{Programming languages Scripting languages AS/400 Command shells