CTSS: The "." shell, chat and email
Many people think that command line shells, electronic mail and chat
as something fairly modern. But CTSS had them all 60 years ago. In
this post we'll look at ".
" (or "dot"), the interactive shell
including a chat facility, along with the MAIL
command.

A chat session on CTSS using "dot". Source: Rupert Lane. License: CC0.
"dot"
The CTSS supervisor contains basic functionality for users to enter commands. During the design of Multics, this concept was developed further to create the idea of a shell, a program intended for humans to enter commands and monitor what is going on. From the Multics design memo:
[…] unlike a calling program, a user is not assigned once and for all a predetermined set of instructions. One does not know what he plans to do next, and he will eventually overlook some yet highly recommendable checking, if the command does not warn him against any possible misunderstanding as to what has been performed.
This idea was brought back to CTSS by Tom Van Vleck and Noel Morris in 1965 with the creation of "dot".
Installation: "dot" is included on simh. On s709, you will need a
recent version of the CTSS kit to run this - either version 1.0.10 or
later from Dave Pitts' site or a version of my quickstart or
eliza-ctss released after 1 May 2025. Reinstall your system, then
start CTSS and login as user sysdev
password system
. Run the
runcom mkdot
command. This will compile and install "dot" as a
system component.
To start it, just type .
You will notice the prompt changes to an
abbreviated form of the R and W notifications. "dot" will reload
itself after you run a command, but in some cases, for example after
an error, it will be suspended, so type RSTAT
to continue
. W 1508.2 R hello W MIT8C0: 2 USERS AT 05/03/25 1509.3, MAX = 30 R xxx W 'XXX' NOT FOUND. TYPE RSTART TO IGNORE. R .100+.150 rstart W 1509.7 R
Multiple commands
With "dot" running, you can type more than one command per line,
separating them by commas with whitespace. For example to run hello
and listf
:
hello , listf * mad W MIT8C0: 2 USERS AT 05/03/25 1451.4, MAX = 30 3 FILES 5 RECORDS NAME1 NAME2 MOD NOREC USED HELLO MAD 000 1 BOTTLE MAD 000 1 04/14/25 CQA1 MAD 000 3 R
You can run several commands on a given parameter, so rather than
typing MAD HELLO , LOADGO HELLO
you can do:
( mad loadgo ) hello W LENGTH 00020. TV SIZE 00003. ENTRY 00011 EXECUTION. HELLO WORLD EXIT CALLED. PM MAY BE TAKEN. R .166+.050
You can also run one command on multiple parameters: rather than
typing MAD HELLO , MAD BOTTLE
you can do:
mad ( hello bottle ) W LENGTH 00020. TV SIZE 00003. ENTRY 00011 LENGTH 00155. TV SIZE 00003. ENTRY 00070 R
Abbreviations
Commonly used commands can be abbreviated using DC
. Existing
abbreviations can be listed with ABBREV COM
. So for forgetful
Unix users who keep typing ls
and cp
you could do:
dc ls listf cp move W R abbrev com W LS LISTF CP MOVE R ls * mad W 3 FILES 5 RECORDS NAME1 NAME2 MOD NOREC USED BOTTLE MAD 000 1 05/03/25 HELLO MAD 000 1 CQA1 MAD 000 3 04/14/25 R
Command line parameter can be defined with DP
. Abbreviations are
stored across sessions in the file USER PROFIL
.
There is also a handy built in abbreviation .x
for (CFLx)
so to
list files in common file directory #4 you now just need to type ls
.4
instead of LISTF (CFL4)
.
Several people are typing
"dot" also includes a typewriter-to-typewriter chat facility. Both
ends of the chat need to be running "dot". Say you are logged in as
guest
and want to chat to sysdev
who is user M!416 5. Use the
write m1416 5
command. On the other end, you will see the messages
and can respond immediately. See the image at the top of this post for
an example.
Either end can type Control-C to exit the chat session. The ALLOW
and FORBID
commands control who can chat to whom.
Electronic mail
A separate facility from "dot" was the electronic mail command MAIL
.
The design and history of this is covered by Tom Van Vleck (one of
MAIL
's original authors) at multicians.org which is well worth a
read.
A quick demo of how it is used. Say I am logged on as SYSDEV
and I
want to send an email to GUEST
. I put my message in a file, here
HELLO TXT
, and send it using MAIL
.
p hello txt W 1924.2 HELLO GUEST, WELCOME TO CTSS. R .000+.033 mail hello txt m1416 guest W 1925.1 R .016+.016
When GUEST
logs in, they will see
YOU HAVE MAIL BOX
and they can view the message by printing the file.
p mail box W 1926.8 FROM M1416 6 IN M1416 SYSDEV AT 04/27 1925.1 HELLO GUEST, WELCOME TO CTSS. R .016+.033
The source code for the MAIL
program is in com5/
in the CTSS kit.
As mentioned in the article, the program is simple (only 250 lines of
MAD code) and contains a hard coded list of users who can email * *
,
ie all users:
INTERNAL FUNCTION(X,Y)
ENTRY TO USRCHK.
R
WHENEVER X.NE.$ M1416$ .OR. (Y.NE.$ 385$ .AND. Y
1 .NE. $ 4301$ .AND. Y .NE. $ 2962$ .AND. Y .NE.
2 $ 3845$)
3 , ERROR RETURN
Questions, corrections, comments
I welcome any questions or comments, and also especially any corrections if I have got something wrong. Please email me at rupert@timereshared.com