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.