March 14, 2003: The
RUNOFF source file of this document has not been located. This file is the result of scan, OCR, and manual touchup, starting with an original loose-leaf copy of the December 1966 version.
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 1
Manuscript typing and editing
J. Saltzer, X6039
The command TYPSET is used to create and edit 12-bit BCD
line-marked files. This command permits editing and
revising by context, rather than by line number. The
command RUNOFF will print out (in a format subject to
control words placed in the file via TYPSET) a 12-bit BCD
line-marked file in manuscript format. RUNOFF contains
several special control features which were not available
with the DITTO command, including type-justification.
This work represents one more iteration in the arduous task
of creating an "ultimate" editing scheme. As such, it is
primarily a synthesis of techniques which have been proven
valuable in several separate problem areas. It is felt that
this particular synthesis brings to bear on the editing
problem an easy to use package of techniques, and might
provide a model for an editor on a "next generation"
time-sharing system. Here is a list of some of the sources
of ideas for these commands:
J. McCarthy (Colossal typewriter)
S. Piner (Expensive Typewriter)
P. Samson (Justify)
Comp. Center staff (Input, Edit, and File)
M. L. Lowry (Memo, Modify, and Ditto)
M. P. Barnett (Photon)
V. H. Yngve (Comit, Vedit)
R. S. (Madbug)
A. L. Samuels (Edits)
F. J. CorbatoĢ (Revise)
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 2
An Edit-by-Context Program
Program Name: TYPSET
TYPSET is a command program used to type in and edit
memorandum files of English text. TYPSET, along with the
command RUNOFF, is a replacement for the (old system)
commands MEMO, MODIFY, and DITTO. Editing is specified by
context, rather than line number, and input is accomplished
at high speed since the program does not respond between
"name" specifies the primary name of a file to be edited, or
of a file to be created; it may be absent, in which case a
file is to be created, and must be named later by the "FILE"
When TYPSET is ready for typing to begin, the word "Input"
or "Edit" is typed, and the user may begin. If he is
creating a file, he begins in high-speed input mode; if he
is editing a file, he begins in edit mode.
High-Speed Input Mode
In high speed input mode, the user may type lines of up to
360 characters in length (e.g., 120 underlined characters)
separated by carriage returns. He does not walt for
response from the program or the supervisor between lines,
but may type as rapidly as desired. The full character set
of his keyboard may be used.
The user leaves high-speed input mode and enters edit mode
by typing an extra carriage return. When switching modes,
the program acknowledges the switch by typing the name of
the new mode, "Input" or "Edit".
In Edit mode, the program recognizes "requests" of the form
given below. All requests take effect immediately on a copy
of the file being edited. Except where a request is
expected to cause a response, such as "PRINT," successive
requests may be entered immediately on successive lines
without waiting for a response from the program. Each
separate request must begin on a separate line. Program
responses are typed in red, if you use a two-color ribbon.
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 3
The standard 12-bit character set is available. (See
Section AC.2.01.) The preset erase character is # and the
preset kill character is @ . The 1050 characters lozenge,
cent sign, plus-over-minus, and exclamation point should not *
be used in TYPSET memos. Anticipated future changes to the
1050 character set are not guaranteed to preserve the code
values or existence of these characters.
Editing is done line by line. We may envision a pointer
which at the beginning of editing is above the first line of
the file. This pointer is moved down to different lines by
same requests, while other requests specify some action to
be done to the line next to the pointer. All requests
except FILE may be abbreviated by giving only the first
letter. Illegal or misspelled requests will be commented
upon and ignored.
For purposes of description, the requests have been divided
into two categories, those necessary for effective use of
the command, and special-purpose requests which are not so
generally useful. The first category includes eight
LOCATE character string
This request moves the pointer down to the first line
which contains the given character string. Only enough
of the line need be specified to identify it uniquely.
Since the pointer only moves down through the file the
second occurrance of a line containing a given
character string may be located by giving the LOCATE
request twice. The line which has been found is
printed in its entirety.
It is not necessary to count blank characters exactly.
If one blank character appears at some point in the
request string, any number of blank characters or tabs
at the corresponding point in the file will be deemed
to satisfy the request. If 2 blank characters appear
together in the request string, there must be at least
two blank characters or tabs at the corresponding point
in the file, etc.
If the LOCATE request fails to find a line containing
the given character string, a message is printed, and
the pointer is set to point after the last line in the
file. Any requests which were typed in between the
LOCATE which failed and the message from the program
about the failure are ignored. Another LOCATE request
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 4
will move the pointer back to the top of the file to
begin another scan down through the file.
Starting at the pointer, n lines are printed on the
typewriter console. The pointer is left at the last
line printed. If n is absent, 1 line is printed and
the pointer is not moved. If the pointer is not at a
line (e.g., above or below the file, or at a line just
deleted) only a carriage return is typed.
This request moves the pointer down "n" lines. If "n"
is absent, the pointer is moved to the next line.
This request deletes "n" lines, starting with the line
currently being pointed at. The pointer is left at the
last deleted line. If "n" is absent, the current line
is deleted and the pointer not moved.
INSERT new line
The line "new line" will be inserted after the line by
the pointer. The first blank following the request
word is part of the request word, and not part of the
new line. The pointer is set to the new line. To
insert more than one line, give several INSERT
requests, or just type a carriage return to switch to
high-speed input mode. All lines typed are inserted
after the line being pointed at. When the user returns
to edit mode by typing an extra return, the pointer is
set to the last inserted line. If the very first edit
request given is an INSERT, the inserted lines are
placed at the beginning of the file. If an INSERT is
given after the pointer has run off the bottom of the
file, the inserted lines are placed at the end of the
CHANGE /string 1/string 2/ n G
In the line being pointed at, the string of characters
"string 1" is replaced by the string of characters
"string 2". If "string 1" is void, "string 2" will be
inserted at the beginning of the line. Any character
not appearing within either character string may be
used in place of the "slash" character. If a number,
"n", is present, the change request will affect "n"
lines, starting with the one being pointed at. All
lines in which a change was made are printed. The last
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 5
line scanned is printed whether a change was made or
not. The pointer is left at the last line scanned. If
the letter "G" is absent, only the first occurrence of
"string 1" within a line will be changed. If "G" is
present, all occurrences of "string 1" within a line
will be changed. If "string 1" is void, "G" has no
effect. Blanks on CHANGE-request strings must be
line: It is a nice day in Boston.
request: CHANGE /is/was/
new line: It was a nice day in Boston.
request: CHANGE xwasxisx
new line: It is a nice day in Boston.
request: CHANGE ' '.' g
new line: It.is.a.nice.day.in.Boston.
request: CHANGE '."
new line: Itis.a.nice.day.in.Boston.
request: CHANGE "tis"t is"
request: CHANGE '.' ' G
request: CHANGE 'on 'on.'
new line: It is a nice day in Boston.
This request is used to terminate the editing process
and to write the edited file on the disk. The edited
file is filed as "name (MEMO)". If "name" is absent,
the original name will be used, and the older file
deleted. If no name was originally given, the request
is Ignored and a comment made. If "name" Is given and
a file of that name already exists, the user will be
asked If he wishes to delete the old file. When this
request Is finished, the user returns to command level,
and the supervisor will respond by typing "R" and the
This request moves the pointer back to above the first
line in a file.
The following seven requests are handy for special purposes,
but will probably not be used as often as the ones
This request moves the pointer to the end of the file
and switches to input mode. All lines which are then
typed are placed at the end of the file.
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 6
The character "c" becomes the erase character.
normally, the character "#" is the erase character.
(The erase character is used to delete the previously
typed character or characters.)
The character "c" becomes the kill character.
Normally, the character "@" is the kill character.
(The kill character is used to delete the entire line
currently being typed.)
APPEND character string *
The string of characters "character string" is appended
to the line being pointed at.
If the parameter, "p" is "OFF", the following program
responses are not automatically typed:
"INPUT" or "EDIT" when the mode is changed.
Lines found by the FIND or LOCATE requests.
Lines changed by a CHANGE request.
If the parameter "p" is "ON", the responses are
restored. The command begins In "ON" mode.
RETYPE new line
The line "new line" replaces the line being pointed at.
The first blank following the request word is part of
the request word and therefore is not part of the new
FIND character string
This request moves the pointer down to the first line
which starts with the given character string.
All the lines above the pointer are split into a file
called "name (MEMO)". Any old copy of "name (MEMO)" is
deleted. The remainder of the file may still be
edited, and filed under another name. The SPLIT
request may be used several times during a single edit,
if desired. Unless at least one "TOP" request has been
given, "name" must be different from the original name
of the file being split.
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 7
This request is used to terminate the editing process
without making any changes to the original file, and
without creating a new file. All intermediate files
are deleted, and the user returns to command level.
The backspace key may be used to create overstuck or
underlined characters. All overstruck characters are stored
in a standard format, independent of the way they were typed
in. CHANGE-, LOCATE- and FIND-request strings are also
converted to this standard format, so it is not necessary to
remember the order in which an overstruck character was
typed in order to identify it. For example, suppose the
The NØRMAL MØDE statement of MAD
had been typed in by typing the letters NORMAL, five
backspaces, a slash, and four forward spaces. The slashed Ø
in NØRMAL can be changed to a standard O by typing
Restricted Names and Recovery Procedures
Two special names are used for intermediate files by TYPSET.
Following a QUIT sequence (or a CTSS system breakdown) one
or both of these files may be found. (Whenever a QUIT
sequence has been given, a SAVE command should be issued to
save the status of all files.) Because the (INPT1 FILE)
generally contains a complete copy of the file since the
last TOP command, it may be renamed and used as a source
file, and may permit recovery of lost requests. The (INPUT
FILE) contains only that part of the file above the pointer,
and therefore contains only a partial record of the original
file. The original file is never deleted until the new,
edited file has been successfully written and closed.
The intermediate files are normally written in permanent
mode. If the user's track quota becomes exhausted while
editing, TYPSET will switch to temporary mode intermediate
files. If it is necessary to leave the edited file in
temporary mode, a comment will be made.
If a new file name is to be created (including these
intermediate files) and the user already has a file of the
same name in his directory, he is first asked if he wishes
to delete the old file.
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 8
Summary of TYPSET requests.
abbrev. request response
L LOCATE string line found *
D DELETE n end-of-file
N NEXT n end-of-file
I INSERT line none
P PRINT n printed lines,
C CHANGE QxxQyyQ n G changed lines *
T TOP none
FILE name Ready message
B BOTTOM "Input" *
V VERIFY ON (or OFF) none
S SPLIT name no name given
R RETYPE new line none
E ERASE x none
K KILL x none
A APPEND string none *
F FIND string line found *
Q QUIT Ready message *
* These responses will not occur if VERIFY mode is off.
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 9
A Right-Justifying Type Out Program
Program Name: RUNOFF
RUNOFF is a command used to type out memorandum files of
English text, in manuscript format. Control words scattered
in the text may be used to provide detailed control over the
format. Input files may be prepared by the context editor,
RUNOFF NAME1 -P1- -P2- ... -Pn-
NAME1 is the primary name of a file "NAME1 (MEMO)"
to be typed out.
P1,P2, etc., are any number of the
following parameters, in any order:
STOP Pause between pages.
NOWAIT Suppress the initial pause to load paper and
the pause between pages.
PAGE n Begin printing with the page numbered "n".
BALL n Typewriter is using printing ball "n". If
this parameter is omitted, Runoff assumes
that the ball in use will properly print all
CTSS characters in the file. The number "n"
is engraved on top of the printing ball.
CTSS characters not appearing on the ball
being used will be printed as blanks, so that
they may be drawn In.
Input generally consists of English text, 360 or fewer
characters to a line. Control words must begin a new line,
and they begin with a period so that they may be
distinguished from other text. RUNOFF does not print the
.line length n
Set the line length to "n". The line length is preset
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 10
Set the number of spaces to be inserted at the
beginning of each line to "n". Indent is preset to 0.
In an indented region, this control word causes a
break, and the next line only will be indented n spaces
fewer than usual. This control word is useful for
typing indented numbered paragraphs.
.paper length n
This control word is used for running off a memorandum
file on non-standard paper. The number "n" is a line
count, figured at 6 lines per inch. If this control
word is not given, "n" is assumed to be 66, for 11-inch
Copy is to be single spaced. This mode takes effect
after the next line. (The normal mode is single
Copy is to be double spaced. This mode takes effect
after the next line.
Print out this page, start next line on a new page.
Right adjust lines to the right margin by inserting
blanks in the line. The next line is the first one
affected. (This is the normal mode.)
Do not right-adjust lines.
Lengthen short lines by moving words from the following
line; trim long lines by moving words to the following
line. (This is the normal mode.) A line beginning
with one or more blanks is taken to be a new paragraph,
and is not run into the previous line.
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 11
Print all lines exactly as they appear without right
adjustment or filling out.
Print page numbers. (The first page is not given a
page number. It has instead a two-inch top margin.
See also "Manuscript Conventions", below.) If "n" is
present, insert a page break and number the next page
"n". Note that RUNOFF does not print completely empty
Insert "n" vertical spaces (carriage returns) in the
copy. If "n" carries spacing to the bottom of a page,
spacing is stopped. If "n" is absent or 0, one space
All of the line after the first blank is used as a
header line, and appears at the top of each page, along
with the page number, if specified.
The lines before and after the ".break" control word
will not be run together by the "fill" mode of
The following line is to be centered between the left
and right margins.
The following line is not a control word, despite the
fact that it begins with a period.
.heading mode P
This control sequence alters the mode of the running
head to that specified by the parameter "P". Any of
the following parameters are allowed:
CENTER The header will be centered on the page.
MARGIN The header will be adjusted against the right
margin of the page.
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 12
FACING On even-numbered pages, the header will be
adjusted against the left margin, on odd
numbered pages against the right.
OPPOSED The header will be adjusted against the
opposite margin from the page number.
In the absence of a .HEADING MODE control
sequence, the default option is OPPOSED.
This control word causes the current page to be printed
out, and the next page to be numbered with the next
higher odd page number.
.paging mode P1 P2 ... Pn
This control sequence alters the mode of page
numbering to that specified by the parameter P1, P2,
etc. The P1's may be in any order, and selected from
the following list:
MARGIN Page numbers will be adjusted against the
FACING Odd page numbers are adjusted against the
right margin, even page numbers are adjusted
against the left margin.
CENTER Page numbers are centered between the right
and left margin.
TOP Page numbers are placed on the fourth line
from the top of the page.
BOTTOM Page numbers are placed on the fourth line
from the bottom of the page.
OFF Page numbers are discontinued.
PREFIX "string" The string of characters between
quotation marks is prefixed to the page
number. The quotation marks may be next to
each other, in which case no prefix is used.
ROMANU Page numbers will be printed in upper case
ROMANL Page numbers will be printed in lower case
ARABIC Page numbers will be printed in Arabic.
(This is the normal mode.)
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 13
SET n Set the next page number to be "n".
SKIP n Skip "n" page numbers.
If in a single use of .PAGING MODE several pi's specify
competing functions, the last one specified takes
precedence. When the .PAGING MODE sequence appears in
text at point A, all text up to A (and probably some
text after A) will appear on a page controlled by the
previous paging mode. The new paging mode will take
effect on the next page. Then there is no danger of
getting page numbers both at the top and bottom of the
Use of the TOP parameter may conflict with the heading
mode. If a heading and a page number should be printed
in the same column, the page number will take
In the absence of a .PAGING MODE control sequence, the
default options are: TOP MARGIN PREFIX "PAGE"
Take as the next input line the first line of A (MEMO).
Note that the whole of A is appended, and that the
appending is an irreversible process - that is, once
RUNOFF encounters the .APPEND control word it will
switch to file A (MEMO) and continue from its first
line. Other text in the original file (which contained
the control word) will not be processed by RUNOFF. The
file A (MEMO) may, of course, itself call for appending
of still another file, and so on.
All control words may be typed in either upper case or lower
case. Illegal control words are ignored by the RUNOFF
command. A comment may appear to the right of a control
word, as long as it is on the same line.
All control words may be abbreviated if desired. A list of
abbreviations is given in the summary. In most cases, a
single word is abbreviated by giving its first two letters;
two words are abbreviated by giving the first letter of each
The RUNOFF program assumes a page length of 11 inches, with
6 vertical lines per inch. The top and bottom margins are 1
inch, except for the first page which has a 2-inch top
margin. If a header is used, it will be placed 1/2 inch
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 14
from the top of the page. The first page is not numbered,
nor is it given the header line, unless the control words
".header" and ".page 1" appear before the first line of
Customary margins are 1-1/2 inches on the left and 1 inch on
the right, implying a 60-character line. This is the
standard line length in the absence of margin control words.
Unless restrained from doing so by NOWAIT, the program stops
before the first page for loading of paper. The STOP
parameter will cause a stop between all pages. The paper
should be loaded so that after the first carriage return
typing would take place on line 1 of the paper. The left
margin stop of the typewriter should be placed at the point
typing will begin, and the right margin moved as far right
as possible. Now, when you type the first carriage return,
the program will start typing and continue to the end of the
When performing right-adjustment, the RUNOFF command does
not take special account of the tabulate characters.
Therefore, tabs should not be used unless "fill" mode is
off. If tabs on a 1050 are not set at the CTSS standard *
settings of 11, 21, 31, etc., the supervisor may mistime
characters or insert extra carriage returns. For this
reason, use of tab characters is not recommended.
If a memo does use tabs in a section where "fill" is off,
the mechanical tab stops on the typewriter must be set
properly. The following conventions should be used in any
memo which uses tabs: The first two lines of the memo
should contain two comments, beginning with the words ".SET
TABS AT", followed by a string of blanks and x's, with the
x's positioned at the desired tab stop positions. The
second comment should be ".TABS SET AT" followed by a string
of tabs and x's. If the typewriter is correctly set up, the
typset request "PRINT 3" will cause the two lines to be
printed out with the x's lined up. Since the supervisor *
assumes that tab stops are at 11, 21, 31, etc., a line with
too many tab characters may appear to overflow the carriage
size, and the supervisor may insert extra returns.
Underlining or overtyping may be accomplished with the aid
of the backspace key, even in a line that is subject to
CTSS PROGRAMMER'S GUIDE Section AH.9.01 12/66 15
Summary of RUNOFF Control Words
abbrev. control word automatic break
.ap .append A no
.ll .line length n no
.pl .paper length n no
.in .indent n no
.un .undent n yes
.ss .single space yes
.ds .double space yes
.bp .begin page yes
.ad .adjust yes
.fl .fill yes
.nf .nofill yes
.pa .page (n) yes, if n
.sp .space (n) yes
.he .header xxxx no
.br .break yes
.ce .center yes
.li .literal no
.hm .heading mode P no
.op .odd page yes
.pm .paging mode P no
If "automatic break" is yes, the lines before and after the
control word will never be run together, and the previous
line will be printed out in its entirety before the control
word takes effect.