Post by Scott LurndalPost by Acceptable NameIn order to do the equivalent of UNIX
$ cp file1.txt file2.txt
on CTSS, I'm using
UPDATE 1 FILE1 TXT
COMFIL 1
RENAME FILE1 TXT FILE2 TXT
UPDATE 0 FILE2 TXT
DELETE FILE2 TXT
COMFIL 0
Is there a better way to do that? Once I learn how RUNCOM parameter substitution works I might be able to script it but I'm wondering how something so basic requires so many steps.
Very few systems in that era had a file copy function embedded
into the command interpreter[*]. DEC had PIP, HP had FCOPY,
IBM had IEBGENER, Burroughs had DMPALL and SYSTEM/COPY.
[*] Generally due to space constraints.
Thanks, Scott. However, the CTSS UPDATE and COPY commands
are not embedded into the supervisor, which is the CTSS command
interpreter, module RUNCOM which interprets simple scripts.
On CTSS:
comfil 2
W 1257.2
R .016+.000
listf update *
W 1257.3
UPDATE TSSDC. 000 5 03/21/14
R .016+.016
listf copy *
W 1257.3
COPY TSSDC. 104 M1416 CMFL02 UPDATE
R .016+.016
Files on CTSS and ITS have two names, usually called NAME1 NAME2.
File names are each a 36-bit word containing 6-bit BCD characters
on CTSS or ASCII on ITS which ran on a PDP-6 and later PDP-10s.
I haven't found it in writing yet but I think the TSSDC. NAME2
stands for Time Sharing System Disk Command. The 1969 CTSS
Programmer's Guide uses the term "disk commands" repeatedly.
http://www.bitsavers.org/pdf/mit/ctss/CTSS_ProgrammersGuide_Dec69.pdf
COPY is the same as UPDATE except that the "source directory"
and "target directory" are swapped. It would take more steps to copy
a file using COPY because I would have to backtrack to remove the
intermediate copy of the file.
COMFIL 1 (change directory to common files 1)
COPY 0 FILE1 TXT (copy file from common files 0, which is really
a personal user file directory (U.F.D.)
RENAME FILE1 TXT FILE2 TXT
COMFIL 0
COPY 1 FILE2 TXT
COMFIL 1
DELETE FILE2 TXT
COMFIL 0
One other thing I discovered is that David Pitts' asm7090 which is
not 64-bit clean also cannot assemble these FAP statements:
$ grep =VO *.fap
cpyc8b.fap: LDQ =VO18/UCOMBT+UCMLBT SET COMMAND SWITCHES CPYC0041
cpyc8b.fap: LDQ =VO18/SB.CMD INDICATE SUBSYS TRAPPED COMMAND CPYC0054
ctrl8f.fap: ORA =VO36/RSYSBT .. ADD SUBSYSTEM PRIVILEGES CTRL0164
ctrl8f.fap: LDQ =VO18/UCOMBT+UCHNBT+UCBFBT SET UP COMMAND SWITCHES CTRL0251
ulod8a.fap: ANA =VO18/TPWRSW .. MASK ULOD0605
util8c.fap: LDQ =VO18/LOGTBT SET COMMAND SWITCHES UTIL0110
IBM FAP has VFD and OPVFD pseudo operations. For MIT CTSS FAP
a new literal statement was introduced, the VFD literal. The syntax is =V which
follows =H for Hollerith literals and =O for octal ones.
I'm guessing that =VO is a VFD octal literal based on reading the source for CTSS FAP.
I don't know why anyone would want to take the numbers 18 or 36 as octal values so
I'm still not sure if =VO is is octal or has some other meaning.
David Pitts' asm7090 does have support for VFD literals but when I try to
assemble =VO36/RSYSBT it truncates RSYSBT to RS and outputs a symbol RS
which is undefined causing linking via his lnk7090 to fail.
I don't know how David Pitts got a working CTSS despite that. I haven't
tried building a system from the tapes that are generated despite those errors
yet and seeing if it runs.