March 15, 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 hectograph copy.
January 8, 1965
                 PROGRAMMING STAFF NOTE 40
SUBJ:     Experimental Additions to the RUNOFF Command
FROM:     J.H. Saltzer
     A number of experimental features have  been  added  to
the control word language of the RUNOFF  command,  primarily
to learn of possible directions in  which  such  a  language
should develop.  It is hoped that this note,  and  usage  of
the  command  itself  will  spark  discussion  and  creative
suggestions to aid in the  development.    The  experimental
features are described here, rather  than  in a  publication
for general distribution, since  they  are  not  necessarily
smoothly implemented or bugfree, and  they  are  subject  to
change pending reassessment of their value.
     Although   the   ability  to  produce  acceptable  flow
diagrams with a typewriter is limited,  some  useful  things
can be done even in this  medium.    The  following  control
words are designed to simplify the  composition  of  a  flow
diagram:
.figure
     This control  word  turns  control  over  to  a  figure
processor, which creates in core memory a representation  of
a flow diagram under the control of a  few  special  control
words.  When the control word ".end figure" is  encountered,
the completed picture is printed  immediately  on  the  page
being generated if there is room on that page; otherwise the
figure will appear at the  top  of  the  next  page.    Text
following the ".end figure" control word  will  be  smoothly
attached   to   text  before  the  ".figure",  no  break  is
generated.  (Restriction:  If a figure  is  being  held  for
placement at the top of the next page,  another  figure  may
not be encountered before the first one is  printed.)    The
only control words which are recognized when in  the  figure
processor are the following three:
                         -2-
.frame m n
     This control word intitalizes the figure  processor  by
giving the height and width of the figure  to  be  produced.
"m" is the height, in lines;   and  "n"  is  the  width,  in
characters.  (Note that a 1050 types 6 lines per  inch,  and
10 characters per inch.)  Any attempt to place items in  the
picture which extend beyond the  boundaries  will  cause  an
error comment to be generated.  M and n must  both  be  less
than 100 and their product must be smaller than  5400.    We
may now think of the figure to be produced as an array of  m
x n elements.
.box i j
     The text on the lines following this control word  will
be placed in the figure such that the first character on the
first line following the ".box"  will  appear  in  row  "i",
character position "j".  The end of the text is indicated by
a ".box" control word for another piece of text or the ".end
figure" control word.   Temporarily,  the  text  should  not
include underlined or overtyped characters.
.end figure
     This control word  causes  control  to  return  to  the
regular control processor of the  RUNOFF  command,  for  the
decision to print the picture.  Note that another  ".figure"
control word may not appear until after this figure has been
printed.
     One further  control  word  has  been  added  which  is
intended to facilitate bringing out revised  editions  of  a
memorandum.
.flag
     The next line to be printed after this control word  is  *
encountered will have an asterisk placed two spaces  to  the
right of the right margin, as illustrated.
.define symbol
     This control word  defines  the  value  of  the  sumbol
"symbol" to be  the  number  of  the  page  currently  being
printed.  The symbol may  be  used  later  with  the  ".use"
control word to cause printing of the page number  in  text.
The characters in the  symbol  must  be  mappable  into  the
six-bit character set, and all symbols must be six of  fewer
characters.
                         -3-
.use symbol
     The value of the symbol "symbol" is inserted  into the
text with a single blank preceding and no blank  following.
If the symbol has not been previously defined, its value is
"0".  Text may continue following a blank typed  after  the
symbol.
Here is an example of the use of these control words.
     In one area of text:
          We now discuss the operation of the typewriter
         .define ref1
          coordinator module, which . . .
     In a later area of text:
          As we saw in  the  discussion  of  the  typewriter
          coordinator on page
          .use ref1 , the rest of . . .
     If the first area of text were on page 14, the later
     line would read:
          As we saw in  the  discussion  of  the  typewriter
          coordinator on page 14, the rest of . . .
Further Study
     A number of suggestions have been  made  for  extending
the control word language of RUNOFF, and  its  capabilities.
These are listed  here,  primarily  to  elicit  comment  and
discussion, both  on  the  language  which  describes  these
operations   and   the   less  important  problem  of  their
implementation.
1.   Word division.  This is a whole are of study in itself.
2.     Automatic  footnote  insertion.    This  was  handled
     somewhat awkwardly in the DITTO command,  although  the
     basic approach was probably reasonable.
3.   Automatic page references, perhaps  via  some  symbolic
     reference scheme.  This  would enable the  page  number
     in "as was described on page 32" to be inserted by  the
     program.  The analogy with an assembly  program  should
     be hotly pursued for ideas.
4.   Special provision for  printing  facing  pages.    This
     would require alternate  running  heads,  placing  page
                         -4-
     numbers alternately at right  and  left,  and  matching
     line counts on facing pages.
5.   Improved page-division rules, to prevent the last  line
     of a paragraph appearing alone at the top  of  a  page,
     for example.  At present, copy must be run off to check
     by hand that awkward page divisions have not been made.
6.   Automatic generation of page numbers  for  a  table  of
     contents.  Again, the analogy of  an  assembly  program
     symbol table appears fruitful.
7.   Automatic generations of an index.  The problem here is
     obtaining too many references  to a  given  word,  many
     irrelevant.
8.   Arrangement of tabulated data.  This problem  may  have
     already been partly approached with the above-described
     figure generator, or the facilities  already  available
     in RUNOFF, but automatic setup  of  column  widths  and
     positions would be desirable.   One  could  include  in
     this category the ability to call on other programs  to
     computer numbers to place in tables, although  this  is
     going pretty far afield.
9.   Placing figures in a  "cut"  or  inset.    The  control
     language is the most difficult problem here.
10.  Equation typing and  numbering.    Again,  the  control
     language appears formidable.