TOPS-10 utilities: PIP, RUNOFF, FILCOM and SEND
This week we'll look at four utilities included in TOPS-10: PIP, for
file copy and translation; RUNOFF to produce text documents; FILCOM
to compare files; and finally the chat facility provided by SEND.
PIP
PIP or the Peripheral Interchange Program, is a tool to copy and
transform files that was implemented on most of DEC's operating
systems, and later copied by CP/M. Many of the file handling utilities
on TOPS-10 such as COPY or RENAME are actually implemented by
calling PIP.
Start the program with R PIP and then give commands at the *
prompt. Note you can't supply arguments on the command line directly.
Once at PIP's * prompt, the command format is
dest = src /flags
You can enter multiple commands, and can then press Control-C to exit when done.
Wildcards are allowed, eg to make a backup of all your Fortran files
under the extension .BAK you could do *.bak=*.for. Device names,
like TTY: for the terminal, or a tape drive logical device, can be
used as well.
PIP is a bit of a Swiss Army knife of a tool: there are 25 flags that can be used in this version, consuming all letters from A-Z except K. Many of these are only useful when dealing with specific hardware such as tapes. Here are some of the other ones of interest when running TOPS-10 under emulation.
| Flag | Meaning |
|---|---|
| /C | Delete trailing spaces and convert multiple spaces to tab |
| /J | Convert non printing character to printable, eg ^A |
| /N | Delete sequence numbers |
| /O | Adds sequence numbers |
| /Q | Prints out help options |
| /W | Converts tab to spaces |
RUNOFF
RUNOFF is a document production system that takes a text file that
has been marked up with special codes and produces an output text file
that is suitable for printing. The concept is clearly inspired by
CTSS's RUNOFF, with typesetting codes indicated by a period as the
first character of the line, and many similar commands. For example,
both CTSS and TOPS-10 use .center to indicated that the next line
should be centred on the page. The TOPS-10 program does have more
commands, including support for footnotes, indices and callouts.
Special flag characters can precede text for additional effects: &
will underline it while > will add the next word to the index.
To use, prepare your input file using a standard text editor like SOS
and give it a .RNO extension. Start RUNOFF with R RUNOFF and
give the input file at the * prompt. It will report any errors and
write an output file with the extension MEM.
Here's an example of RUNOFF processing this section's text:
.type blog.rno .chapter RUNOFF &R&U&N&O&F&F is a document production system that takes a text file that has been marked up with special codes and produces an output text file that is suitable for printing. .note Be sure to read the manual first .end note .r runoff *blog BLOG 1 page *^C .type blog.mem CHAPTER 1 RUNOFF RUNOFF is a document production system that takes a text ______ file that has been marked up with special codes and produces an output text file that is suitable for printing. NOTE Be sure to read the manual first
FILCOM
FILCOM is a utility to determine differences between files, similar to
diff on Unix. Start it with R FILCOM and at its * prompt give
commands of the format
output = input1,input2
where input1 and input2 are the files to compare and output is
the output file - which can be omitted, in which case the differences
are displayed on the terminal.
For an example we'll use our Hello World program from before and just
change one line so it prints Hello Earth instead, and save that to a
file hearth.for. Here's what FILCOM prints when comparing the two
files:
.r filcom
*=hworld.for,hearth.for
File 1) DSKB:HWORLD.FOR[100,100] created: 1441 16-JAN-1979
File 2) DSKB:HEARTH.FOR[100,100] created: 1100 21-FEB-1979
1)1 00400 2 FORMAT(' HELLO, WORLD')
1) 00500 END
****
2)1 00400 2 FORMAT(' HELLO, EARTH')
2) 00500 END
**************
%files are different
The lines that differ are marked with n)m where n is the file
number and m the page in the file. This is followed by a line where
both files are the same (the END statement here) for identification
purposes.
By adding the /U switch it will print differing lines with a bar in
column 1 like the below. But there is no equivalent of Unix's < and
> to show both lines side by side.
| 00400 2 FORMAT(' HELLO, EARTH')
| 00500 END
FILCOM will also compare binary files, for example looking at two
object code files:
*=hworld.rel,hearth.rel File 1) DSKB:HWORLD.REL[100,100] created: 1443 16-JAN-1979 File 2) DSKB:HEARTH.REL[100,100] created: 1101 21-FEB-1979 000024 536372 246210 426032 252220 110340 014030 %files are different
Here the output is broken into three fields: the octal address, file 1's word, file 2's word and the XOR of the two words.
By default FILCOM will decide whether to do a text or binary
comparison by looking at the file extensions. You can override this by
giving a flag after the input file specifications: /A to force
ASCII text mode, /B to force binary mode.
Some other useful flags are /S to ignore spaces and tabs, and /C
to ignore comments (text after ;).
SEND
SEND allows one-way communication from one terminal to another. The
parameters can either be a terminal device
.send dev:message
or a job number
.send job message
An example of the former would be if you are logged in on TTY0: and want to send a message to TTY1:
.send tty1:hello
On tty1 the bell will ring and it will type
;;TTY0: - hello
You can also specify cty: as the device to send the message to the
operator's console.
More information
The User Utilities manual on Bitsavers describes the PIP, RUNOFF
and FILCOM commands in more detail, but note this manual is for a
later version of TOPS-10. The Operating Systems Command Manual
documents the SEND command.
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 and I will add it here and update the main text.