Est. 1978 Intermediate

CDC NOS CCL

CYBER Control Language on Control Data's NOS operating system: the job-control language of IFE, WHILE, BEGIN and .PROC that turned punched-card control statements into something close to a scripting language on 60-bit Cyber mainframes.

Created by Control Data Corporation (no individual designer is credited in the manuals)

Paradigm Procedural, Job control / command language
Typing Untyped; expressions evaluate to integers, with true = 1 and false = 0, and NOS 2 adds $-delimited literal strings
First Appeared 1978
Latest Version Shipped with NOS 2.8.7, the latest NOS release listed by Wikipedia; the CCL release level can be read at run time through the VERCCL symbolic name or the LVL(CCL) function

CDC NOS CCL is the CYBER Control Language as implemented on the Network Operating System (NOS), Control Data Corporation’s operating system for its 60-bit 6000-series, Cyber 70, Cyber 170 mainframes, and the later Cyber 180 machines running in their Cyber 170 state. On these machines a job was a sequence of control statements (NOS 2 manuals call them commands), one per card or line, such as GET,PROG. or FTN5,I=PROG. CCL added verbs that operate on that sequence itself. IFE and SKIP skip statements conditionally, WHILE and ENDW repeat a block, SET assigns values to registers, and BEGIN expands and runs a stored procedure. The result sat somewhere between a job-control language such as IBM’s JCL and a Unix shell script. For the computing centres, universities and laboratories that ran Cyber systems from the late 1970s into the 1990s, CCL procedures were the ordinary way to package a multi-step job as a single command.

History & Origins

The KRONOS control language

CCL did not appear from nowhere. KRONOS, the time-sharing system that NOS replaced, already had a small control language. Revision D of the KRONOS 2.1 reference manual (June 1975) describes it as statements “very similar to FORTRAN statements”: GOTO, SET, CALL, IF, DISPLAY, FILE and NUM, with FORTRAN-style expressions (.EQ., .AND. and so on) and symbolic names such as EF (previous error flag) and EM (exit mode). The manual singles out procedure files as “an important feature”: a group of control statements “which can be called much like a subroutine,” started with CALL or by naming the file.

NOS was released in 1975. Its first user manuals (the NOS 1 Application Programmers Instant, July 1975) list that same KRONOS set of control-language statements.

CYBER Control Language

The name “CYBER Control Language” and the structured verbs that go with it appear first on NOS/BE, CDC’s other Cyber operating system. Revision C of the NOS/BE Version 1 reference manual, dated 15 March 1977 and covering NOS/BE 1.2 at PSR level 447, adds a new section 5, “CYBER Control Language (CCL).”

NOS got CCL about a year later. The revision record of the NOS 1 Application Programmers Instant shows no CCL through the NOS 1.2 editions of January and July 1977. Revision E, dated 12 April 1978 and “revised to reflect NOS 1.3,” lists “CDC CYBER Control Language” among the added features. The NOS 1.4 edition of August 1979 lists BEGIN, IFE, ELSE, ENDIF, WHILE, ENDW, REVERT and .PROC next to the old KRONOS CALL, and marks the CCL-only features with “(CCL)”.

A note on the date. The encyclopedia master list gives 1976 for this entry. The manuals examined here do not support that: they show the KRONOS-derived control language in NOS from 1975, CCL on NOS/BE from March 1977, and CCL on NOS from NOS 1.3 in 1978. This page uses 1978, the year CCL itself reached NOS. A NOS source dated 1976 that mentions CCL would change that.

Design Philosophy

CCL was designed to fit an existing command stream, not to replace it. Every CCL statement is itself a control statement with the same shape as REWIND,TAPE1.: a verb, parameters separated by commas, and a terminating period. That design has consequences:

  • Structured flow, not a new syntax. Blocks are delimited by label strings instead of nesting keywords: IFE,expr,LABEL. is closed by ENDIF,LABEL., and WHILE,expr,LOOP. by ENDW,LOOP. The NOS 2 manual warns that WHILE labels should be unique within a job and that duplicates “can produce unpredictable results.”
  • The job’s own state is the data. Most of the useful values are symbolic names the system maintains: the error flag, the exit mode, the current time-sharing subsystem, the terminal page width, the operating system version. A procedure asks the system about itself instead of computing values.
  • Procedures are macros first. A CCL procedure is expanded before it runs. Parameters are substituted textually into the procedure body to produce a command record, and that record is then executed. In NOS 2, the .IF directive controls what goes into the command record at expansion time, while the IF command decides what runs at execution time. The manual spends a good deal of space on this two-stage model.

Key Features

Conditional and iterative statements

StatementPurpose
IFE,expr,label. (NOS 2: IF/IFE)If expr is true, process the following statements; otherwise skip to the matching ELSE or ENDIF
SKIP,label.Skip unconditionally to the matching terminator
ELSE,label. / ENDIF,label.End or reverse a skip (NOS 2 also has ELSEIF)
WHILE,expr,label. / ENDW,label.Repeat the enclosed statements while expr is true
SET,name=expr.Assign a value to a settable symbolic name such as R1
DISPLAY,expr.Evaluate an expression and write the result to the dayfile
BEGIN,pname,pfile,params.Expand and run procedure pname from file pfile
REVERT. / REVERT,ABORT.Return from a procedure, normally or with an error

NOS 2 also has a one-line form, IF,expression.command., which runs or skips a single command.

Registers and symbolic names

In NOS 2, the settable names include three control registers R1, R2 and R3, which are local to a procedure: when a procedure reverts, they are restored to the values they had when it was called. R1G is a global register that keeps its value across calls, and there is a local error flag EF and a global error flag EFG. Read-only names report the environment, for example SS (the interactive subsystem), PW (page width), TIME, WEEKDAY and VERCCL, the CCL release level. Functions such as FILE(lfn,attribute), DT(lfn) (device type) and NUM(string) (is the string numeric?) query files and parameters.

This loop is the WHILE example from the NOS 2 System Commands manual. It repeats five times, writing R1 to the dayfile on each pass:

SET,R1=0.
SET,R2=5.
WHILE,R1.LT.R2,FINISH.
SET,R1=R1+1.
DISPLAY,R1.
ENDW,FINISH.

Procedures

A procedure begins with a .PROC header naming it and its formal parameters (keywords), optionally with default values. It is stored on a file and started with BEGIN. The following minimal example uses the formats documented in the NOS 1.4 Instant; it is an illustration, not copied from a manual:

.PROC,COPYIT,IN=OLDFILE,OUT=NEWFILE.
REWIND,IN.
COPYEI,IN,OUT.
REVERT.

Called with BEGIN,COPYIT,PROCFIL,IN=MAZE,OUT=TAXES., it expands to REWIND,MAZE. and COPYEI,MAZE,TAXES. The job’s dayfile then shows the expanded commands and a closing $REVERT.CCL line, as the NOS 2 manual’s own examples do. The NOS/BE manual also documents in-procedure directives: .DATA embeds data in the procedure, .EOR and .EOF write record and partition marks on that data, and .* adds comments that are not printed in the dayfile.

Interactive procedures (NOS 2)

NOS Version 2 turned procedures into interactive commands. Adding *I to the procedure name in the header makes the system prompt the terminal user for any required parameter that is missing or invalid. Adding *M makes it present a numbered menu of choices. Headers can attach checklists of acceptable values to each parameter. A help section of .HELP directives, closed by .ENDHELP, supplies text for ? requests; if there are no .HELP directives, the system generates help from the header. Later directives include .EX, which executes a command immediately and is mostly used for menu options, .SET, and a .WHILE/.ENDW pair that operates at expansion time.

Evolution

PeriodReleaseChange (per CDC manual revision records)
1975KRONOS 2.1, NOS 1.0KRONOS-style control language with CALL procedure files
March 1977NOS/BE 1.2CYBER Control Language introduced on NOS/BE
April 1978NOS 1.3CYBER Control Language added to NOS
April 1982NOS 2.0Parameter-prompting (*I) procedures
January 1983NOS 2.1Menu procedures (*M), new procedure directives
October 1983NOS 2.2Screen-mode input for procedures
1984–1985NOS 2.3, 2.4.1Manual revisions list “NOS procedure enhancements”
April 1987NOS 2.5.2.SET directive; STR, STRB, STRD functions
April 1988NOS 2.6.1LVL function, able to report the CCL level

The NOS 2 manuals also treat CCL as one part of a larger system. The flow-control commands have their own chapter, and procedures have a separate chapter covering headers, directives, parameter matching modes and help. By August 1994, the NOS 2 Installation Handbook (revision R, NOS 2.8.3 at PSR level 840) carried a Control Data Systems, Inc. copyright rather than Control Data Corporation’s. Its installation process still consists largely of running procedures from an INSTALL procedure file.

Current Relevance

CCL is a historical language. No vendor supports NOS, and Cyber hardware has long been out of production. The language can still be run, though. Wikipedia lists NOS 2.8.7 as the latest NOS release. DtCyber, Kevin Jordan’s derivative of Tom Hunter’s Desktop CYBER simulator (on GitHub since February 2021 and still updated in September 2026; Jordan is with the Nostalgic Computing Center), installs a working NOS 2.8.7 system on Windows, Linux, macOS or FreeBSD hosts. Parts of that system are written in CCL: its README describes the NETSEND and NETRECV utilities as “interactive CCL procedures” with context-sensitive help, and says the services of its NJMD message daemon are CCL procedures in the NJMDLIB library. For anyone exploring NOS today, reading and writing CCL procedures is part of using the system.

There is no Docker image; DtCyber, built from source, is the practical way to run CCL.

Why It Matters

CCL shows the step from job-control statements to a real command language, taken inside a mainframe batch environment instead of on a minicomputer. Within a job file that was still, conceptually, a deck of cards, it provided structured conditionals and loops, local and global registers with call-and-return semantics, parameterized procedures stored in libraries, and, by 1982–83, self-documenting commands that prompted for parameters and generated menus. Its label-matched IFE/ENDIF blocks and its expand-then-execute procedure model are specific to CDC. For the many scientific and university sites that used Cyber systems, CCL was the language used to automate everyday work on the machine.

Sources and Verification Notes

  • KRONOS control language: KRONOS 2.1 Reference Manual Vol. 1, publication 60407000 revision D (17 June 1975), section “Control Language.” This page does not claim the facility existed in the July 1973 first edition, because that edition was not checked.
  • NOS 1 dates: revision record of the NOS 1 Application Programmers Instant, publication 60436000 revision G (31 August 1979): revision A July 1975; revision E, 12 April 1978, NOS 1.3, adds CCL; revision G, NOS 1.4.
  • NOS/BE dates: revision record of the NOS/BE Version 1 Reference Manual, publication 60493800 revision E (13 June 1978); CCL introduction text from revision C/D (August 1977).
  • NOS 2 features and examples: NOS Version 2 Reference Set Volume 3, System Commands, publication 60459680 revision M (8 December 1989), including its revision record for revisions A–M.
  • DtCyber: GitHub API (repository created 24 February 2021, last push 22 September 2026) and the repository’s NOS2.8.7/README.md for the NETSEND, NETRECV and NJMD claims.
  • Installation procedures: NOS Version 2 Installation Handbook, publication 60459320 revision R (August 1994).
  • Not verified: the exact release date of NOS 2.8.7 (Wikipedia gives none), the manual revision dates for NOS 2.3 and 2.4.1, and any single designer of CCL. The master list’s 1976 date could not be matched to any CCL documentation.

Timeline

1975
Revision D (17 June 1975) of the KRONOS 2.1 reference manual documents a "control language" of GOTO, SET, CALL, IF, DISPLAY, FILE and NUM statements, with FORTRAN-like expressions and procedure files invoked by CALL. This is the facility NOS inherited from KRONOS, and the one CCL later extended
1975
CDC releases NOS, KRONOS's successor. The first edition of the NOS 1 Application Programmers Instant (publication 60436000) is dated July 1975 and lists only the KRONOS-style control-language statements
1977
CYBER Control Language first appears on CDC's other Cyber operating system, NOS/BE. Revision C of the NOS/BE Version 1 reference manual (15 March 1977, NOS/BE 1.2 at PSR level 447) adds a new section 5 on CCL, covering IFE, SKIP, ELSE, ENDIF, WHILE, ENDW, SET, DISPLAY, BEGIN, REVERT and .PROC procedures
1978
CCL reaches NOS. Revision E of the NOS 1 Application Programmers Instant (12 April 1978) is revised for NOS 1.3, and its revision record lists "CDC CYBER Control Language" among the added features
1979
The NOS 1.4 edition of the Application Programmers Instant (31 August 1979) lists BEGIN, IFE, ELSE, ENDIF, WHILE, ENDW, REVERT and REVERT.ABORT as control-language formats, next to the older CALL statement, and adds a section on CCL procedure-file statements beginning with .PROC
1982
NOS Version 2 ships. The first edition of the NOS 2 Reference Set Volume 3, System Commands (26 April 1982, PSR level 562) documents parameter-prompting procedures, in which a procedure header marked *I makes the system prompt the terminal user for missing or invalid parameters
1983
NOS 2.1 (manual revision of 27 January 1983) adds menu-generating procedures (*M) and new procedure directives. NOS 2.2 (11 October 1983) adds screen-mode input for procedures
1987
NOS 2.5.2 (manual revision of 23 April 1987) adds the .SET procedure directive and the STR, STRB and STRD string functions
1988
NOS 2.6.1 (manual revision of 5 April 1988) adds the LVL function, which returns the PSR level of the operating system or of CYBER Control Language itself
2021
Kevin Jordan's DtCyber, a derivative of Tom Hunter's Desktop CYBER simulator, is created on GitHub in February 2021. Its installable NOS 2.8.7 system includes network utilities such as NETSEND and NETRECV that are written as interactive CCL procedures. The repository was still being updated in September 2026

Notable Uses & Legacy

NOS system installation

The NOS Version 2 Installation Handbook (revision R, August 1994, NOS 2.8.3) has the site analyst build products by running installation procedures from the INSTALL procedure file, and use procedures such as SYSGEN and MANLOAD to place files and load the online manuals

Batch job control on Cyber installations

CCL's purpose, as the NOS/BE manual puts it, is to conditionally skip or process control statements and to process and reprocess groups of them. That lets a single card deck or job file branch on the error flag, loop over a set of files, or call a shared procedure library with BEGIN

Interactive terminal commands

From NOS 2 on, procedures can prompt for parameters (*I) or display numbered menus (*M), with generated or hand-written .HELP text. Site-written procedures could therefore act as commands for terminal users, not just batch scripts

DtCyber NOS 2.8.7 network utilities

In the preservation system distributed with DtCyber, the NETSEND and NETRECV file-transfer utilities are implemented as interactive CCL procedures with context-sensitive help, and the NJMD message daemon's services, including an ECHO service, are CCL procedures kept in the NJMDLIB library

Running Today

Run examples using the official Docker image:

docker pull
Last updated: