Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-05 - decus/20-0147/format.doc
There are 12 other files named format.doc in the archive. Click here to see a list.








            FORMAT*PROG AM*US  S*GUIDE*  RMAT     RAM*   RS*  IDE*FORMAT
            *         OGR   USER      E*FO  AT   OG  M  SE S* U        A
            E  ORMAT*PR  RAM  SE  *GUI  *F   AT PR   A *U   S*GUID  FORM
            D  FORMAT*  OGRAM  S  S*GUI  *    AT*    RAM  S  S*GUI  *
            I  *FORMAT  ROGRA  U  RS*G  DE  O  A  P  GR  *US  S*GU  E
            U      RMA  PROGR  *      GUID  FO   T*  O  AM*US  S*G  D
            G  DE*FORM  *PROG  M  SE  *GUI  *FO MAT  R  RAM*U  RS*  I
            *  IDE*FOR  T*PRO  A  USE  *GU  E*FORMA  P         ERS  U
            S  UIDE*FOR  T*P  GR  *USE  *G  DE*FORM  *  OGRAM  SER  G
            R  GUIDE*FORM   PROG  M*USE  *  IDE*FOR  T  ROGRA  USE  *
      RAM*USERS*GUIDE*FORMAT*PROGRAM*USERS*GUIDE*FORMAT*PROGRAM*USERS*    E*FO
      G      ERS*      FORMAT*   GRAM*US      I      MAT*PROG AM*US  S*  ID  F
      O  AM*U  RS  UIDE  ORM  *PR  RAM  SERS*GU  E*FO  AT*PR   AM*U   S*GU   *
      R  RAM*U  R  GUIDE  O  AT*PR  R  *USERS*G  DE*FO  AT*  O  AM*    S*    E
      P  GRAM  SE  *GUI  *F  MAT*P  G  M*USERS*  IDE*  RMA  PRO  AM  S    G  D
      *      M*US      IDE*  RMAT*  O  AM*    S      *FOR  T*PRO  A  US  S*  I
      T  ROGRAM*U  RS  UIDE  ORMAT  R  RAM*U  R  GU  E*FO  AT*PR  R  *USERS  U
      A  PROGRAM*  ERS  UID  FORMA  P  GRAM*  E  *GU  E*F         G  M*USER  G
      M  *PROGRAM  SERS  UID  FOR  T*P  GRAM  S  S*GU  E*  RMAT*  O  AM*USE  *
      R  T*PROGRA  USERS  UIDE   RMAT*PR      U  RS*GU  E  ORMAT  R  RAM*US  S
      ORMAT*PROGRAM*USERS*GUIDE*FORMAT*PROGRAM*USERS*GUIDE*FORMAT*PROGRAM*USER
              R  RAM*US  S*GU       M          *       UIDE*FO       O
              P  GRAM*U  RS  UIDE*FOR  T*PROGRAM  SERS*  IDE  ORMAT*PR
              *  OGRAM*  E  *GUIDE*FO  AT*PROGRA  USERS*  I  *F
              T  ROGRAM  SE  *GUIDE*F  MAT*PROGR  *USER  GUI  *FORM
              A  PROGRA  USER    IDE*       PROG       RS*GUID    RMA
              M  *PROGR  *USERS*G  DE  ORMAT*PRO  AM*  ERS*GUIDE*F  MA
              R  T*PROG  M*USERS*G  D  FORMAT*PR  RAM*  ERS*GUIDE*F  M
              OR  T*PR  RAM*USERS  UI  *FORMAT*P  GRAM*  ERS*GUIDE  OR
               ORM    ROGR       S*GU          *  OGRAM*  E       E*F
                 RMAT*PROGRAM*USERS*GUIDE*FORMAT*PROGRAM*USERS*GUIDE
                 ORM       R  *USERS  U      R       GRAM          D
                *F  MAT*PROG  M*USER  GUI  *FO  AT*PR  RA  USERS*GUI
                E  ORMAT*PRO  AM*USE  *GU  E*F  MAT*PR  R  *
                D  FORMAT*PR  RAM*US  S*G  DE*  RMAT*P  G  M*USER
                I  *FO     P  GRAM*U  RS*  IDE  ORMAT*  O       E
                U  E*FORM  *  OGRAM*  ERS  UID  FORMAT  R  RAM*US
                G  DE*FOR  T  ROGRAM  SER  GUI  *FORMA  P  G
                *G  DE*FO  AT  ROGR  *USE  *GU  E*FOR  T*  OGRAM*USE
                 *GU       MAT*    RAM*      G       RMAT          S
                   GUIDE*FORMAT*PROGRAM*USERS*GUIDE*FORMAT*PROGRAM*U



                     FORTRAN FORMAT Statement Generator Program

                                    User's Guide

                                  Donald E. Barth

                                  1 December 1983











             FFFFFFFFF   OOO    RRRRRR    MM       MM     A    TTTTTTTT
             FF        OO   OO  RR    RR  MMM     MMM    AAA      TT
             FF       OO     OO RR     RR MMMM   MMMM   AA AA     TT
             FF       OO     OO RR    RR  MM MM MM MM  AA   AA    TT
             FFFFFF   OO     OO RRRRRR    MM  MMM  MM AA     AA   TT
             FF       OO     OO RR  RR    MM   M   MM AA     AA   TT
             FF       OO     OO RR   RR   MM       MM AAAAAAAAA   TT
             FF        OO   OO  RR    RR  MM       MM AA     AA   TT
             FF          OOO    RR     RR MM       MM AA     AA   TT

       PPPPPP    RRRRRR       OOO       GGGGGG RRRRRR        A     MM      MM
       PP    PP  RR    RR   OO   OO   GG       RR    RR     AAA    MMM    MMM
       PP     PP RR     RR OO     OO GG        RR     RR   AA AA   MMMM  MMMM
       PP    PP  RR    RR  OO     OO GG        RR    RR   AA   AA  MM MMMM MM
       PPPPPP    RRRRRR    OO     OO GG   GGGG RRRRRR    AA     AA MM  MM  MM
       PP        RR  RR    OO     OO GG     GG RR  RR    AA     AA MM      MM
       PP        RR   RR   OO     OO GG     GG RR   RR   AAAAAAAAA MM      MM
       PP        RR    RR   OO   OO   GG    GG RR    RR  AA     AA MM      MM
       PP        RR     RR    OOO       GGGGGG RR     RR AA     AA MM      MM

               UU      UU    SSSSSSS EEEEEEEEEE RRRRRRR       SSSSSSS
               UU      UU  SS        EE         RR     RR   SS
               UU      UU SS         EE         RR      RR SS
               UU      UU  SS        EE         RR     RR   SS
               UU      UU    SSSS    EEEEEEE    RRRRRRR       SSSS
               UU      UU        SS  EE         RR   RR           SS
               UU      UU         SS EE         RR    RR           SS
                UU    UU         SS  EE         RR     RR         SS
                  UUUU    SSSSSSS    EEEEEEEEEE RR      RR SSSSSSS

                    GGGGGGG UU      UU IIIIII DDDDDDD    EEEEEEEEEE
                  GG        UU      UU   II   DD     DD  EE
                 GG         UU      UU   II   DD      DD EE
                 GG         UU      UU   II   DD      DD EE
                 GG   GGGGG UU      UU   II   DD      DD EEEEEEE
                 GG      GG UU      UU   II   DD      DD EE
                 GG      GG UU      UU   II   DD      DD EE
                  GG     GG  UU    UU    II   DD     DD  EE
                    GGGGGGG    UUUU    IIIIII DDDDDDD    EEEEEEEEEE




                     FORTRAN FORMAT Statement Generator Program

                                    User's Guide

                                  Donald E. Barth

                                  1 December 1983









                           TABLE OF CONTENTS
                           ----- -- --------


      Chapter 1:  General Instructions

        Introduction  .  .  .  .  .  .  .  .  .  .  .  .  .  .   1

        Command Structure   .  .  .  .  .  .  .  .  .  .  .  .   2

        Case Notation for Alphabetic Letters  .  .  .  .  .  .   3


      Chapter 2:  Short Descriptions of the Commands

        The Commands listed in Alphabetical Order   .  .  .  .   5

        Table of Command Argument Types .  .  .  .  .  .  .  .  15


      Chapter 3:  Complete Descriptions of the Commands

        The Commands listed in Alphabetical Order   .  .  .  .  17


      Chapter 4:  Commands Needed for Paging on Video Terminals

        Introduction  .  .  .  .  .  .  .  .  .  .  .  .  .  .  95

        Example of FORTRAN Code Containing Several Messages  .  98

        Short Descriptions of the Paging Commands   .  .  .  . 101

        Table of Command Argument Types .  .  .  .  .  .  .  . 105

        Complete Descriptions of the Paging Commands   .  .  . 106


      Appendix A

        FORMAT Program Development History .  .  .  .  .  .  . 139


      Appendix B

        List of Files Included in this Package   .  .  .  .  . 141




                                     Chapter 1

                                GENERAL INSTRUCTIONS



                                    Introduction
                                    ------------

      The FORMAT program reads a sample form or a rough version  of  messages,
      and  generates  FORTRAN FORMAT statements which can be used by a FORTRAN
      program to reproduce the form complete with embedded  variables,  or  to
      generate   the   messages  with  lines  of  uniform  length.   The  case
      conventions, the structure of the commands, and the meanings of many  of
      the commands which are recognized by the FORMAT program are identical to
      those accepted by the DECsystem-10 text processing program RUNOFF.  When
      text  containing  only  those  commands which are recognized by both the
      FORMAT and RUNOFF programs is processed by the FORMAT program, then  the
      use  of  the  resulting FORMAT statements generates the text which would
      have been produced directly by  RUNOFF.   Although  the  FORMAT  program
      provides  many of the same capabilities as RUNOFF, the FORMAT program is
      itself written in a system independent subset of FORTRAN and is  not  an
      extended  version of RUNOFF.  If a RUNOFF capability is not described in
      this documentation, then this capability is not provided by  the  FORMAT
      program.   In  particular,  the  FORMAT  program  does  not  provide any
      footnoting, indexing or underlining capabilities.

      For sections of text which are too long to be represented  in  a  single
      FORMAT   statement,  the  FORMAT  program  can  generate  FORTRAN  WRITE
      statements which reference each of the resulting FORMAT statements.  The
      statement  numbers  of  the FORMAT statements and the references to them
      are incremented as necessary.  For very long messages, the text on  each
      page  can  be  broken  into  separate  FORMAT statements and sections of
      predefined FORTRAN code can be inserted automatically at  the  tops  and
      bottoms of the pages.

      The lines of text which are represented in  the  FORMAT  statements  can
      include  output field descriptions which are kept separate from the text
      which is represented in H, apostrophe or  asterisk  notation.   A  fixed
      line  of  text  can  be  superimposed  upon  each  line of text which is
      represented in the resulting FORMAT statements to rule vertical lines of
      characters.   If  identical parallel forms are being generated, then the
      input file only needs to specify the text for the left form and this can
      be copied to the right as many times as are desired.

      The FORMAT program produces 2 output files, a FORTRAN language file  and
      a proof file.  The FORTRAN language file must be merged into an existing
      program or else the input file must  have  specified  the  rest  of  the
      FORTRAN  statements,  which,  together with the newly constructed FORMAT
      statements, make up the program.  The proof file contains the text which
      would  be  generated when the resulting FORMAT statements are used.  The
      locations  at  which  output  field  specifications  are  inserted   are
      indicated  by  dollar  signs  in  this  text.   The  actual output field
      specifications are indicated in separate lines in the proof file  before
      the  lines  into  which  these output field specifications are inserted.
      The proof file also contains an indication of the location at which each
      FORMAT  statement  begins,  a  copy of each of the commands in the input
2                                            FORMAT Program User's Guide


file, and a copy of each of the FORTRAN statements which were  specified
directly by the input file.


                           Command Structure
                           ------- ---------

Each line of the input file which does not start with a  period  in  the
left  column  contains  text  which  is  to be represented in the FORMAT
statements or contains a FORTRAN statement or a FORTRAN comment which is
to  be  copied  into  the output file unchanged except for possible case
conversion of the alphabetic letters.  Each line  which  starts  with  a
period  in  the  left  column  is  interpreted  as a command.  A command
consists of the leading period followed either by a word or by a  phrase
which  identifies  the  command,  followed  for  some commands by 1 or 2
numbers, by 1 or 2 characters, or by the text which extends through  the
rightmost  printing character on the line.  The alphabetic letters which
form the word or phrase can be supplied in lower case, in upper case, or
in  a  mixture of upper and lower cases.  The word, or each of the words
in a phrase, can be abbreviated by truncation leaving at least the  left
letter in each word if additional words or their abbreviations appear to
the right.  Spaces are allowed before, between and after the words in  a
phrase  but  are  not  required.   Only  enough letters must be typed to
unambiguously identify the word or phrase from all others.  The numbers,
characters or line of text which follows the word or phrase are referred
to as the arguments of the command.  The pairs of numbers  or  pairs  of
characters  which  are  arguments  of  some commands can be separated by
spaces and/or by a single comma, but the comma is  not  required  unless
only the second number or second character of the pair is supplied.

For example, a few of the many ways in which the command

     .FLAGS SPACE *

could be specified are

     .FS* or .F S * or .FLS* or .FSP* or .FLSP* or .FL SP *

Except for those commands in which the word or phrase can be followed by
the  text  which extends through the rightmost printing character on the
line, any command can be followed on the same line by another command or
by  a  semicolon  which  can  be followed in turn by whatever would have
otherwise have appeared on the next line.  If 2 commands  are  separated
by  a semicolon, then spaces can appear to the left of the semicolon and
to the right of  the  second  period,  but  cannot  appear  between  the
semicolon  and the second period.  If 2 commands appear on the same line
but are not separated by a semicolon, then spaces can appear between the
first  command and the second period.  A leading period or a command can
be followed by an exclamation point and then by a comment which  extends
through  the  next  semicolon on the same line or through the end of the
line if a semicolon does not appear on the same line to the right of the
exclamation  point.   A comment is not terminated by the appearance of a
period.
      General Instructions                                                   3


      For example, the text

           .SKIP 2
           .CENTER
           This is a Title

      could also be specified by any of the following single lines

           .SKIP 2.CENTER;This is a Title
           .SKIP 2;.CENTER;This is a Title
      or
           .SKIP 2!comment;.CENTER!comment;This is a Title

      An underscore character can appear  before  any  character,  such  as  a
      leading  period in a noncommand line, or a semicolon, exclamation point,
      comma or another underscore in a command line, which is to be treated as
      an ordinary printing character.


                        Case Notation for Alphabetic Letters
                        ---- -------- --- ---------- -------

      This program can process text in which  the  letters  A  through  Z  are
      already in the desired mixture of upper and lower cases (capital letters
      and small letters, respectively), or in which the alphabetic  letters  A
      through Z are all in one case with shift indications for the other case.

      An .UPPER CASE command or 2 consecutive  circumflexes  anywhere  in  the
      source  text  indicates  that  the  cases  of  all subsequent alphabetic
      letters which are not otherwise marked are to be  retained.   An  .UPPER
      CASE command is considered to be in effect when this program is started.
      A .LOWER CASE command or 2 consecutive  back  slashes  anywhere  in  the
      source  text  indicates that all subsequent alphabetic letters which are
      not otherwise marked are to be converted  to  their  lower  case  forms.
      Regardless of the overall case setting, any single letter which is to be
      converted to its upper case form can be preceded by a single circumflex,
      and  any  single  letter which is to be converted to its lower case form
      can be preceded by a single back slash.  If a .FLAGS CAPITALIZE  command
      has  been  issued,  then  a less than sign can be used at the start of a
      word to indicate that all of the following alphabetic letters are to  be
      converted  to  their  upper  case forms in the word which extends either
      through the last character on the line, or up to the next space,  or  up
      to  the next less than sign, whichever comes first.  A single underscore
      can precede any character, such as a circumflex or a back slash or  even
      another  underscore,  which is to be treated as a nonalphabetic printing
      character.  A space which is to be treated as a  nonalphabetic  printing
      character  can  be indicated either by a number sign or by a space which
      is preceded by an underscore.  A number sign which is to be  kept  as  a
      number  sign must be preceded by a single underscore.  Any of these flag
      characters can be changed or temporarily disabled  by  commands  in  the
      source text.

      If the source file contains only lower case letters, but both cases  are
      desired  and  can  be  processed  by  the FORTRAN compiler and operating
      system, then, without any special action, all  letters  will  remain  in
      their lower case forms except for those letters which immediately follow
      a single circumflex or which are in words which are preceded by  a  less
4                                            FORMAT Program User's Guide


than sign if a .FLAGS CAPITALIZE command has been issued.

If the source file contains only upper case letters, but both cases  are
desired  and  can  be  processed  by  the FORTRAN compiler and operating
system, then the input file should contain a .LOWER CASE  command  or  2
consecutive  back  slashes so that subsequent letters will be translated
to their lower case forms except for  those  letters  which  immediately
follow  a single circumflex or which follow a single underscore or which
are in words which are  preceded  by  a  less  than  sign  if  a  .FLAGS
CAPITALIZE command has been issued.  If there are sections of the source
text which are to be kept primarily in their original upper case  forms,
then  these  sections  can be preceded by an .UPPER CASE command or by 2
consecutive circumflexes, and then any individual letters which need  to
be  converted  to  their lower case forms can be preceded by single back
slashes.

For example, the source text

.preface       WRITE(1,$)
.nofill.flags capitalize.output width 60.offset 0
\\^ONLY THE FIRST LETTER IN THIS LINE REMAINS UPPER CASE.
<THE FIRST WORD IN THIS LINE WILL BE CAPITALIZED.
^^^all but the first letter of this line remains lower case.
<the first word in this line will be capitalized.
Underscores precede _^, _\, _<, _# or __ which are kept.
.program;      END

would, when processed by this program, be transformed into the following
FORTRAN text

      WRITE(1,1)
    1 FORMAT(43HOnly the first letter in this line remains ,
     111Hupper case./35HTHE first word in this line will be,
     213H capitalized./33HAll but the first letter of this ,
     324Hline remains lower case./22HTHE first word in this,
     426H line will be capitalized./20HUnderscores precede ,
     531H^, \, <, # or _ which are kept.)
      END

which would, in turn, generate the following text when run.

Only the first letter in this line remains upper case.
THE first word in this line will be capitalized.
All but the first letter of this line remains lower case.
THE first word in this line will be capitalized.
Underscores precede ^, \, <, # or _ which are kept.


                                     Chapter 2

                         SHORT DESCRIPTIONS OF THE COMMANDS



                     The Commands Listed in Alphabetical Order
                     --- -------- ------ -- ------------ -----

      Most of the commands which can appear in  the  source  files  which  are
      processed  by  the FORMAT program are summarized in this chapter and are
      described in detail in the next chapter.  However,  the  commands  which
      are  needed  for parcelling out the lines in long messages into separate
      pages are described later in this manual.

      Above the description of each command  is  shown  the  command  name  in
      capital letters together with a one line summary in small letters of the
      numbers, characters or line of text which can appear to its  right.   To
      make  the  descriptions  easier  to  read,  the command names are always
      capitalized in the descriptions, but the commands would not have  to  be
      capitalized  in  the actual source text which is processed by the FORMAT
      program.

      .BLANK number of extra blank lines to be generated

           The specified number of extra blank lines are to be represented  in
           the FORMAT statement.  .SKIP is similar.

      .BREAK

           No additional text is to be included in the line of text  currently
           being  represented  in the FORMAT statement.  Blank lines requested
           by .BLANK or  .SKIP  or  implied  by  .SPACING  are  not  generated
           immediately.   Similar  to  .EJECT which generates such blank lines
           immediately.

      .CARRIAGE next carriage control character
           or
      .CARRIAGE next carriage control, subsequent carriage control

           The first specified character  is  to  replace  the  space  in  the
           leftmost column of the next line which is represented in the FORMAT
           statements.  If a second character is specified, it is  to  replace
           the  space  in the leftmost column of each of the subsequent lines.
           Opposite of .NO CARRIAGE.  .NO CARRIAGE is the default.

      .CENTER width of region as unsigned number
      .CENTER offset from largest right margin as signed number
      .CENTRE width of region as unsigned number
           or
      .CENTRE offset from largest right margin as signed number

           The following line of text is to be centered in the region given as
           an  unsigned  number or in the region to the left of the sum of the
           largest right margin  plus  the  signed  number.   Except  for  the
           insertion of the initial spaces, the line is to be represented with
           the same number of spaces as in the original source.
6                                            FORMAT Program User's Guide


.COMMENT line of text which is to be ignored

     The characters which appear to the right of  the  .COMMENT  command
     are  to be treated as the text of a comment and are otherwise to be
     ignored.

.CONTINUE next statement number, statement number increment

     The following text is to be represented in a new FORMAT  statement.
     .INSERT  and  .PREFACE  commands are retained.  .PROGRAM command is
     cancelled.  .TEXT is similar.

.COPY number of characters to copy, number of times to copy

     The indicated number of characters at the left  end  of  each  line
     represented  in the FORMAT statements, after the application of the
     line of text specified by a .MASK command if any,  but  before  the
     application  of  the  character specified by the .CARRIAGE command,
     are to be copied the indicated number of additional  times  to  the
     right.  Opposite of .NO COPY.  .NO COPY is the default.

.DEFINE GROUP

     The following lines  of  text  through  the  next  .END  DEFINITION
     command  or  the next of any of the various .DEFINE commands are to
     be copied  into  the  output  file  before  each  group  of  FORMAT
     statements  which is preceded by a .TEXT command.  A single line to
     be inserted before each group of FORMAT statements can  be  defined
     by the .GROUP command instead.

.DEFINE PREFACE

     The following lines  of  text  through  the  next  .END  DEFINITION
     command  or  the next of any of the various .DEFINE commands are to
     be copied into the output file before  each  FORMAT  statement.   A
     single  line  to  be  inserted  before each FORMAT statement can be
     defined by the .PREFACE command instead.

.EJECT

     No additional text is to be included in the line of text  currently
     being  represented  in the FORMAT statement.  All blank lines which
     have been requested by .BLANK or .SKIP or implied by  .SPACING  are
     generated  immediately.   Similar to .BREAK which does not generate
     such blank lines immediately.

.END DEFINITION

     Indicates that all of the lines of  text  have  been  be  specified
     which  are  to  be  inserted  before  some  or  all  of  the FORMAT
     statements which are generated.  If these lines were preceded by  a
     .DEFINE  GROUP  command,  then  these lines are inserted before the
     first FORMAT statement and before each subsequent FORMAT  statement
     which  follows  a  .TEXT  command.   If  these  lines  were instead
     preceded by  a  .DEFINE  PREFACE  command,  then  these  lines  are
     inserted before every FORMAT statement.
      Short Descriptions of the Commands                                     7


      .END OF FILE

           No additional text is to be processed.

      .FILL

           Multiple spaces are to be removed from the following text and words
           are  to  be accumulated until the next word would extend beyond the
           right margin.  Opposite of .NO FILL.  .FILL is the default.

      .FLAGS
           or
      .FLAGS ALL

           Most flag characters are enabled in  the  source  text.   Does  not
           change interpretation of flag characters specified by .FLAGS FENCE,
           .FLAGS CONTROL and .FLAGS REMARK commands.  Opposite of  .NO  FLAGS
           ALL.  .FLAGS ALL is the default.

      .FLAGS CAPITALIZE character to precede capitalized words

           Words in which each letter is to be capitalized can be preceded  by
           the specified character.  Less than sign is assumed if no character
           follows the .FLAGS  CAPITALIZE  command.   Opposite  of  .NO  FLAGS
           CAPITALIZE.  .NO FLAGS CAPITALIZE is the default.

      .FLAGS CONTROL character to precede commands

           Commands in the source file are indicated by having  the  specified
           character  in  the  first  column.   Opposite of .NO FLAGS CONTROL.
           .FLAGS CONTROL _. is the default.

      .FLAGS FENCE character to terminate and separate commands

           A command can be followed by the specified character  and  then  by
           whatever  would  have  otherwise  have  appeared  on the next line.
           Opposite of .NO FLAGS FENCE.  .FLAGS FENCE _; is the default.

      .FLAGS INSERT character to indicate location of insertions

           The specified character can be used in program text to indicate the
           locations  at  which  statement  numbers are to be inserted, and in
           text being represented in the FORMAT  statements  to  indicate  the
           locations  at  which  output field descriptions as specified by the
           .INSERT command are to be inserted.  Opposite of .NO FLAGS  INSERT.
           .FLAGS INSERT $ is the default.

      .FLAGS LOWER CASE character to precede lower case letters

           Letters in the source text which are to be  translated  into  lower
           case  can  each be preceded by a single appearance of the specified
           character.   Two  adjacent  appearances  of  this   character   are
           equivalent to the .LOWER CASE command.  Opposite of .NO FLAGS LOWER
           CASE.  .FLAGS LOWER CASE _\ is the default.
8                                            FORMAT Program User's Guide


.FLAGS QUOTE character to precede character to be used as is

     The specified character can precede any special character which  is
     to  be  treated  as  an  ordinary character.  Opposite of .NO FLAGS
     QUOTE.  .FLAGS QUOTE __ is the default.

.FLAGS REMARK character to separate commands from comments

     The specified character can precede a comment which appears to  the
     right  of  a command.  Opposite of .NO FLAGS REMARK.  .FLAGS REMARK
     _! is the default.

.FLAGS SPACE character to indicate a nonadjustable space

     The specified character can be used to represent a space  which  is
     to  be  treated  as  a  portion  of  a  word  rather than as a word
     boundary.  Opposite of .NO FLAGS SPACE.  .FLAGS  SPACE  _#  is  the
     default.

.FLAGS UPPER CASE character to precede upper case letters

     Letters in the source text which are to be translated to upper case
     can  each  be  preceded  by  a  single  appearance of the specified
     character.   Two  adjacent  appearances  of  this   character   are
     equivalent to the .UPPER CASE command.  Opposite of .NO FLAGS UPPER
     CASE.  .FLAGS UPPER CASE _^ is the default.

.GROUP line of text to precede groups of FORMAT statements

     The line of text which appears to the right of the  .GROUP  command
     is  to  be  copied into the output file before each group of FORMAT
     statements which is  preceded  by  a  .TEXT  command.   The  .GROUP
     command  can be cancelled by a .NO GROUP command.  .NO GROUP is the
     default.  A group of lines to be  inserted  before  each  group  of
     FORMAT  statements  can  be  defined  by  the .DEFINE GROUP command
     instead.

.INDENT number of extra spaces to insert beyond left margin

     The following line of text is to be indented from the  left  margin
     by the indicated number of spaces.

.INPUT WIDTH maximum number of characters in any input line

     Only the indicated number of characters in each line in  the  input
     file  are  to be read and processed.  Maximum width is 300.  .INPUT
     WIDTH 132 is the default.

.INSERT output field specification to replace next $ signs

     The characters appearing to the right of the .INSERT  command  form
     an output field specification which is to replace the next group of
     contiguous dollar signs.   All  unused  groups  of  characters  are
     discarded if either a .NO INSERT or a .TEXT command is issued.
      Short Descriptions of the Commands                                     9


      .JUSTIFY

           Extra spaces are to be inserted between the words in fill  mode  to
           cause  the  lines to be flush with both the left and right margins.
           Opposite of .NO JUSTIFY.  .JUSTIFY is the default.

      .LEADING

           The FORMAT statements are to include initial blank lines  requested
           by  .BLANK and .SKIP commands which appear before the text which is
           to be represented.  Opposite of .NO LEADING.  .NO  LEADING  is  the
           default.

      .LEFT MARGIN number of spaces to left of text

           The following text is to begin in the column to the  right  of  the
           indicated  column.   This is in addition to the offset specified by
           the .OFFSET  command.   .LEFT  MARGIN  0  and  .OFFSET  1  are  the
           defaults.

      .LOWER CASE

           Upper case letters on the following lines are to be  translated  to
           lower case unless preceded by circumflexes or underscores or, if in
           flag capitalize mode, unless in words which are  preceded  by  less
           than  signs.  Equivalent to appearance of 2 back slashes.  Opposite
           of .UPPER CASE which is the default.

      .MASK text to be superimposed onto each output line

           The printing characters appearing to the right of the .MASK command
           are  to be superimposed onto each line of text which is represented
           in the FORMAT statements.  The .MASK command is cancelled by a  .NO
           MASK command.  .NO MASK is the default.

      .NO CARRIAGE

           No special character is to replace the space in the leftmost column
           of  each  line  which  is  represented  in  the  FORMAT statements.
           Opposite of .CARRIAGE.  .NO CARRIAGE is the default.

      .NO COPY

           The characters in each line represented in  the  FORMAT  statements
           are  not  to  be copied additional times to the right.  Opposite of
           .COPY.  .NO COPY is the default.

      .NO FILL

           Except for the insertion of initial spaces required for the offset,
           left  margin  and  indentation, and except for case conversions and
           removal of underscores, each of the following lines of source  text
           is  to  be regenerated exactly when the resulting FORMAT statements
           are used.  Opposite of .FILL.  .FILL is the default.
10                                           FORMAT Program User's Guide


.NO FLAGS
     or
.NO FLAGS ALL

     Most flag characters are disabled in the  source  text.   Does  not
     change interpretation of flag characters specified by .FLAGS FENCE,
     .FLAGS CONTROL and .FLAGS REMARK commands.  Opposite of .FLAGS ALL.
     .FLAGS ALL is the default.

.NO FLAGS CAPITALIZE

     No special character can be used to indicate words  in  which  each
     letter  is  to be capitalized.  Opposite of .FLAGS CAPITALIZE.  .NO
     FLAGS CAPITALIZE is the default.

.NO FLAGS CONTROL

     Commands cannot be included in the source text.  Opposite of .FLAGS
     CONTROL.  .FLAGS CONTROL _. is the default.

.NO FLAGS FENCE

     No special character can follow a command to indicate that the text
     to  its  right is to be treated as though this text appeared on the
     next line.  Opposite of .FLAGS  FENCE.   .FLAGS  FENCE  _;  is  the
     default.

.NO FLAGS INSERT

     No special character can be used in program text  to  indicate  the
     locations  at  which  statement  numbers are to be inserted, and in
     text being represented in the FORMAT  statements  to  indicate  the
     locations  at  which  output field descriptions as specified by the
     .INSERT command are to be inserted.   Opposite  of  .FLAGS  INSERT.
     .FLAGS INSERT $ is the default.

.NO FLAGS LOWER CASE

     No special character can be used to indicate single  letters  which
     are  to  be  translated  into lower case.  Opposite of .FLAGS LOWER
     CASE.  .FLAGS LOWER CASE _\ is the default.

.NO FLAGS QUOTE

     No special character can precede any special character which is  to
     be  treated  as an ordinary printing character.  Opposite of .FLAGS
     QUOTE.  .FLAGS QUOTE __ is the default.

.NO FLAGS REMARK

     A comment cannot appear to the right of  a  command.   Opposite  of
     .FLAGS REMARK.  .FLAGS REMARK _! is the default.
      Short Descriptions of the Commands                                    11


      .NO FLAGS SPACE

           No special character can be used to represent a space which  is  to
           be  treated  as a portion of a word rather than as a word boundary.
           Opposite of .FLAGS SPACE.  .FLAGS SPACE _# is the default.

      .NO FLAGS UPPER CASE

           No special character can be used to indicate single  letters  which
           are  to  be  translated  into upper case.  Opposite of .FLAGS UPPER
           CASE.  .FLAGS UPPER CASE _^ is the default.

      .NO GROUP

           No line of text is to be  inserted  before  each  group  of  FORMAT
           statements.  Opposite of .GROUP.  .NO GROUP is the default.

      .NO INSERT

           All unused groups of characters specified by .INSERT  commands  are
           to be discarded.

      .NO JUSTIFY

           Extra spaces are not to be inserted between the words in fill mode.
           Opposite of .JUSTIFY.  .JUSTIFY is the default.

      .NO LEADING

           The FORMAT statements are to exclude initial blank lines  requested
           by  .BLANK and .SKIP commands which appear before the text which is
           to be represented.  Opposite  of  .LEADING.   .NO  LEADING  is  the
           default.

      .NO MASK

           No line of text is to be  superimposed  onto  each  line  which  is
           represented in the FORMAT statements.  Opposite of .MASK.  .NO MASK
           is the default.

      .NO OFFSET

           No spaces are to be inserted at the  left  edge  of  each  line  in
           addition  to the normal left margin and indentation.  Equivalent to
           .OFFSET 0.  .OFFSET 1 is the default.

      .NO PREFACE

           No line of text is to be inserted  before  each  FORMAT  statement.
           Opposite of .PREFACE.  .NO PREFACE is the default.

      .NO TRAILING

           Blank lines requested after the preceding text by .BLANK  or  .SKIP
           commands  or  which  are  necessary  for  multiple line spacing are
           discarded before .TEXT commands or when the end of the source  file
           is read.  Opposite of .TRAILING.  .NO TRAILING is the default.
12                                           FORMAT Program User's Guide


.OFFSET number of spaces to be inserted at left edge of text

     The indicated number of spaces is inserted at the left edge of each
     line  in  addition  to  the  normal  left  margin  and indentation.
     .OFFSET 0 is equivalent to .NO OFFSET.  .OFFSET 1 is the default.

.OUTPUT LENGTH maximum number of lines in a FORMAT statement

     FORMAT  statements  can  be  constructed  from  no  more  than  the
     indicated  number  of FORTRAN language lines.  .OUTPUT LENGTH 20 is
     the default, but this program does not impose any upper limit  upon
     this maximum.

.OUTPUT WIDTH most characters in each FORMAT statement line

     Each FORTRAN language line from which  the  FORMAT  statements  are
     constructed  can  contain  no  more  than  the  indicated number of
     characters.  Maximum is 72.  .OUTPUT WIDTH 72 is the default.

.PARAGRAPH columns to indent, multiple of line spacing
     or
.PARAGRAPH columns to indent, -1 times number of blank lines

     The next line of text is to be indented from the left margin by the
     number  of  spaces  indicated by the first argument.  If the second
     argument is greater than or equal to  zero,  then  this  times  the
     number  most  recently specified by a .SPACING command is to be the
     number of extra blank lines which are to precede the next  line  of
     text.   If the second argument is less than zero, then this without
     its sign is the number of extra blank lines which  are  to  precede
     the next line of text.

.PREFACE line of text to precede each new FORMAT statement

     The line of text which appears to the right of the .PREFACE command
     is  to be copied into the output file before each FORMAT statement.
     The .PREFACE command can be cancelled by  a  .NO  PREFACE  command.
     .NO PREFACE is the default.  A group of lines to be inserted before
     each FORMAT statement can be defined by the .DEFINE PREFACE command
     instead.

.PROGRAM next statement number, statement number increment

     The following text, through the next .TEXT or .CONTINUE command, is
     to   be  copied  unchanged  into  the  output  file  without  being
     represented in FORMAT statements.

.RESET

     All variable  conditions  are  to  be  returned  to  their  initial
     settings.
      Short Descriptions of the Commands                                    13


      .RESUME GROUP

           The line or lines of text which were defined  by  either  a  .GROUP
           command  or  a  .DEFINE  GROUP command but which were disabled by a
           subsequent .NO GROUP command are to again be inserted  before  each
           group of FORMAT statements.

      .RESUME PREFACE

           The line or lines of text which were defined by either  a  .PREFACE
           command  or  a .DEFINE PREFACE command but which were disabled by a
           subsequent .NO PREFACE command are to again be inserted before each
           FORMAT statement.

      .RIGHT MARGIN rightmost column into which text is wrapped

           If in fill mode, words are wrapped around until the next word would
           extend  beyond  the  indicated  column.   .RIGHT  MARGIN  60 is the
           default.

      .SKIP multiple of extra line spacings to be generated

           A number of extra blank lines equal to the  specified  multiple  of
           the  number  which  appeared  to the right of the previous .SPACING
           command are to be represented in the FORMAT statement.   .BLANK  is
           similar.

      .SPACING separation from top of one line to top of next line

           One less than the  indicated  number  of  blank  lines  are  to  be
           inserted  between  the  lines  of  text.   .SPACING 1 giving single
           spacing is the default.

      .TEXT next statement number, statement number increment

           The following text is to be represented in a new FORMAT  statement.
           .INSERT and .PROGRAM commands are cancelled.  .CONTINUE is similar.
           .TEXT 1,1 is the default at the start  of  the  processing  of  the
           text.

      .TRAILING

           Blank lines requested after the preceding text by .BLANK  or  .SKIP
           commands  or  which  are  necessary  for  multiple line spacing are
           generated before .TEXT commands or when the end of the source  file
           is read.  Opposite of .NO TRAILING.  .NO TRAILING is the default.

      .UPPER CASE

           The cases of letters on the following lines  are  to  be  retained.
           Equivalent  to  appearance  of  2 circumflexes.  Opposite of .LOWER
           CASE.  .UPPER CASE is the default.
14                                           FORMAT Program User's Guide


.USE character implying text representation notation

     Hollerith (number H) notation is used to represent text  in  FORMAT
     statements  if  the  following  character  is  an H.  Apostrophe or
     asterisk notation is used if the character is an apostrophe  or  an
     asterisk respectively.  .USE H is the default.


The commands which are listed below were described in previous  versions
of  this  manual.   These  commands  have  been renamed to obtain a more
consistent set of command names.   However,  the  old  names  are  still
recognized,  and  source  files containing commands having the old names
are still processed correctly.

.BEGIN next statement number, statement number increment

     This command has been renamed .TEXT with the same definition.  Both
     names are treated identically.

.FORMAT next statement number, statement number increment

     This command has been renamed .CONTINUE with the  same  definition.
     Both names are treated identically.

.LENGTH maximum number of lines in a FORMAT statement

     This  command  has  been  renamed  .OUTPUT  LENGTH  with  the  same
     definition.  Both names are treated identically.
      Short Descriptions of the Commands                                    15


      Table of Command Argument Types and Whether BREAK is Implied
      ----- -- ------- -------- ----- --- ------- ----- -- -------

      Basic         Is .BREAK   Argument      Corresponding
      Command         Implied   Type          NO Command

      .BLANK              yes   1 number
      .BREAK              yes   none
      .CARRIAGE           no    2 characters  .NO CARRIAGE
      .CENTER or .CENTRE  yes   1 number
      .COMMENT            no    text (ignored)
      .CONTINUE           yes   2 numbers
      .COPY               yes   2 numbers     .NO COPY
      .DEFINE GROUP       no    none          .NO GROUP
      .DEFINE PREFACE     no    none          .NO PREFACE
      .EJECT              yes   none
      .END DEFINITION     no    none
      .END OF FILE        yes   none
      .FILL               yes   none          .NO FILL
      .FLAGS ALL          no    none          .NO FLAGS ALL
      .FLAGS CAPITALIZE   no    1 character   .NO FLAGS CAPITALIZE
      .FLAGS CONTROL      no    1 character   .NO FLAGS CONTROL
      .FLAGS FENCE        no    1 character   .NO FLAGS FENCE
      .FLAGS INSERT       no    1 character   .NO FLAGS INSERT
      .FLAGS LOWER CASE   no    1 character   .NO FLAGS LOWER CASE
      .FLAGS QUOTE        no    1 character   .NO FLAGS QUOTE
      .FLAGS REMARK       no    1 character   .NO FLAGS REMARK
      .FLAGS SPACE        no    1 character   .NO FLAGS SPACE
      .FLAGS UPPER CASE   no    1 character   .NO FLAGS UPPER CASE
      .GROUP              no    text          .NO GROUP
      .INDENT             yes   1 number
      .INPUT WIDTH        no    1 number
      .INSERT             no    text          .NO INSERT
      .JUSTIFY            yes   none          .NO JUSTIFY
      .LEADING            no    none          .NO LEADING
      .LEFT MARGIN        yes   1 number
      .LOWER CASE         no    none
      .MASK               no    text          .NO MASK
      .OFFSET             yes   1 number      .NO OFFSET
      .OUTPUT LENGTH      no    1 number
      .OUTPUT WIDTH       no    1 number
      .PARAGRAPH          yes   2 numbers
      .PREFACE            no    text          .NO PREFACE
      .PROGRAM            yes   2 numbers
      .RESET              yes   none
      .RESUME GROUP       no    none          .NO GROUP
      .RESUME PREFACE     no    none          .NO PREFACE
      .RIGHT MARGIN       yes   1 number
      .SKIP               yes   1 number
      .SPACING            yes   1 number
      .TEXT               yes   2 numbers
      .TRAILING           no    none          .NO TRAILING
      .UPPER CASE         no    none
      .USE                no    1 character




                                     Chapter 3

                       COMPLETE DESCRIPTIONS OF THE COMMANDS



                     The Commands Listed in Alphabetical Order
                     --- -------- ------ -- ------------ -----

      Most of the commands which can appear in  the  source  files  which  are
      processed  by the FORMAT program were summarized in the previous chapter
      and are described in detail in  this  chapter.   However,  the  commands
      which  are  needed  for  parcelling  out the lines in long messages into
      separate pages are described in the next chapter.

      Above the description of each command  is  shown  the  command  name  in
      capital letters together with a one line summary in small letters of the
      numbers, characters or line of text which can appear to its  right.   To
      make  the  descriptions  easier  to  read,  the command names are always
      capitalized in the descriptions, but the commands would not have  to  be
      capitalized  in  the actual source text which is processed by the FORMAT
      program.

      .BLANK number of extra blank lines to be generated

           The .BLANK command indicates that, after the representation in  the
           FORMAT  statement  of  the  previous  text, the specified number of
           blank lines are to be  represented  in  the  FORMAT  statement,  in
           addition  to  any  blank  lines  specified by other .BLANK or .SKIP
           commands, and, if a .SPACING command has been issued,  in  addition
           to  the  normal  line  spacing  of  one  less than the number which
           appeared to the right of the  previous  .SPACING  command.   If  no
           number  appears to the right of the .BLANK command, then the number
           1 is assumed to appear to the right of the .BLANK command  instead.
           If a .SPACING 2 command is in effect, then a .BLANK 3 command would
           result in 3+(2-1) or 4 blank lines  being  generated.   The  .BLANK
           command  is  similar  to  the  .SKIP command, except that the .SKIP
           command specifies the number of extra blank lines as a multiple  of
           the  number  which  appeared  to the right of the previous .SPACING
           command.  The .BLANK command implies a .BREAK command.

           If no text has been represented in  the  FORMAT  statements  either
           since  this program was started or since the last .TEXT command was
           issued, then the .BLANK command, like the  .SKIP  command  and  the
           .BLANK  or  .SKIP  command  implied  by  the .PARAGRAPH command, is
           ignored unless a .LEADING command is in effect.  Blank lines  which
           have  not been generated when the end of the source file is read or
           when the  next  .TEXT  command  is  issued,  but  which  have  been
           requested  by  .BLANK  or .SKIP commands or which are necessary for
           the normal line spacing, will be appended to the  FORMAT  statement
           being  constructed  if  a  .TRAIL command is then in effect.  Blank
           lines will be discarded when the end of the source file is read  or
           the  next .TEXT command is issued if a .NO TRAIL command is then in
           effect or if a .TRAIL command has not by then been issued.
18                                           FORMAT Program User's Guide


     For example, the source text

     .spacing 2.output width 55
     .blank
     The quick red fox jumps over the lazy brown dog,
     then runs into the forest.
     .blank
     The quick red fox jumps over the lazy brown dog,
     then runs into the forest.
     .blank 2
     The quick red fox jumps over the lazy brown dog,
     then runs into the forest.
     .blank 3
     The quick red fox jumps over the lazy brown dog,
     then runs into the forest.

     would be transformed into the following FORTRAN text when processed
     by this program.

         1 FORMAT(38H The quick red fox jumps over the lazy,
          123H brown dog,  then  runs//17H into the forest./
          2//43H The quick red fox jumps over the lazy brow,
          318Hn dog,  then  runs//17H into the forest.////
          445H The quick red fox jumps over the lazy brown ,
          516Hdog,  then  runs//17H into the forest./////
          645H The quick red fox jumps over the lazy brown ,
          716Hdog,  then  runs//17H into the forest.)


.BREAK

     The .BREAK command indicates that  no  additional  text  is  to  be
     included  in  the  line  of text currently being represented in the
     FORMAT statement.  The line of text is assumed to be  shorter  than
     normal,  and  so  is  not right justified by the insertion of extra
     spaces between the groups of printing  characters  (words)  on  the
     line.  The .BREAK command is similar to the .EJECT command with the
     exception that blank lines requested by .BLANK  commands  or  .SKIP
     commands   or  implied  by  .SPACING  commands  are  not  generated
     immediately when the  .BREAK  command  is  issued  if  no  printing
     characters  have  been  accumulated  into the current line of text.
     The representation of the line of text will be followed by a number
     of blank lines equal to one less than the number which followed the
     previous .SPACING command if the .TRAIL command has been issued  or
     if  additional  text  is  represented.   A  .BREAK  command is also
     implied by most other commands which change the manner in which the
     source text is represented.
      Complete Descriptions of the Commands                                 19


           For example, the source text

           .output width 55.spacing 2
           one
           two three
           .break
           four five six
           seven eight nine ten
           .break
           eleven twelve thirteen fourteen fifteen
           sixteen seventeen eighteen nineteen twenty twenty-one

           would be transformed into the following FORTRAN text when processed
           by this program.

               1 FORMAT(14H one two three//19H four five six seve,
                116Hn eight nine ten//24H eleven twelve thirteen ,
                237Hfourteen  fifteen  sixteen  seventeen//4H eig,
                332Hhteen nineteen twenty twenty-one)


      .CARRIAGE next carriage control character
           or
      .CARRIAGE next carriage control, subsequent carriage control

           The first character in each line of text which  is  generated  when
           the  resulting FORMAT statements are used can be interpreted by the
           FORTRAN operating system to  select  the  carriage  motion  on  the
           output  device to which the text is written.  The .CARRIAGE command
           allows the specification of these carriage control characters.   If
           a  .CARRIAGE command has not been issued, or if a .CARRIAGE command
           is issued without any following characters, or if  a  .NO  CARRIAGE
           command  is  issued,  then  the  leftmost  character in each of the
           subsequent lines of text which are being represented in the  FORMAT
           statements  will  be a space if a positive offset has been selected
           by  the  combination  of  .OFFSET,  .LEFT  MARGIN  and  .INDENT  or
           .PARAGRAPH commands, and completely blank lines will be represented
           in the FORMAT statements by consecutive slashes.

           If the .CARRIAGE command is followed by a printing character, or is
           followed  by  a pair of printing characters optionally separated by
           spaces and/or separated by a single comma, then the first character
           following   the  .CARRIAGE  command  is  to  replace  the  leftmost
           character in the next line of text  which  is  represented  in  the
           resulting  FORMAT statements, providing that the character which is
           to be replaced is a space which was not quoted by an underscore and
           was not specified by a number sign.  If the next line of text which
           is represented in the resulting FORMAT statements is a blank  line,
           regardless  of  whether  this  blank  line  has been requested by a
           .BLANK command or a .SKIP command or has been implied by a .SPACING
           command  or  was  encountered in text being copied in no fill mode,
           then the line will contain only  the  character  specified  by  the
           .CARRIAGE  command.  In order for a space, number sign, circumflex,
           back slash, less than sign (if in flag  capitalize  mode),  period,
           comma,  semicolon,  exclamation point or underscore to be specified
           by the .CARRIAGE command as the carriage  control  character,  this
           character would have to be preceded by an underscore.
20                                           FORMAT Program User's Guide


     If a second printing character follows the .CARRIAGE command, then,
     after  the  next  line  of  text  has  been  generated, this second
     printing character is to replace the leftmost character in each  of
     the subsequent lines of text, providing that the character which is
     to be replaced is a space which was not quoted by an underscore and
     was  not  specified by a number sign.  If a printing character does
     not appear between the .CARRIAGE command and the  following  comma,
     then  the  character following the comma is considered to have also
     preceded the comma.  Neither the  .CARRIAGE  command  nor  the  .NO
     CARRIAGE  command  implies  a .BREAK command.  A .BREAK command, or
     some other command which implies a .BREAK command,  should  usually
     be  issued before the .CARRIAGE command since, if the lines of text
     are being constructed in fill mode, the carriage control  character
     is applied to the current line of text only after this line of text
     has otherwise been completed.

     For example, the source text

     .spacing 2.right margin 54.output width 55.paragraph
     .carriage 1*.preface       WRITE(1,$)
     This is the first line in the demonstration of the
     insertion of the carriage control character.
     .eject.carriage 1#.paragraph
     This is the second line in the demonstration of the
     insertion of the carriage control character.
     .eject.carriage 1.paragraph
     This is the third line in the demonstration of the
     insertion of the carriage control character.
     .eject.no carriage.paragraph
     This is the fourth line in the demonstration of the
     insertion of the carriage control character.
     .eject.program;      END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(38H1     This is the first line in  the  ,
          117Hdemonstration  of/1H*/20H*the insertion of th,
          229He carriage control character./1H*/1H1/6X,2HTh,
          345His is the second line in the  demonstration  ,
          42Hof/1X/37H the insertion of the carriage contro,
          512Hl character./1X/1H1/6X,19HThis is the third l,
          630Hine in  the  demonstration  of//10H the inser,
          739Htion of the carriage control character.///6X,
          845HThis is the fourth line in the  demonstration,
          94H  of//37H the insertion of the carriage contro,
          112Hl character./)
           END
      Complete Descriptions of the Commands                                 21


           which would, in turn, generate the following text when run.

           1     This is the first line in  the  demonstration  of
           *
           *the insertion of the carriage control character.
           *
           1
                 This is the second line in the  demonstration  of

            the insertion of the carriage control character.

           1
                 This is the third line in  the  demonstration  of

            the insertion of the carriage control character.


                 This is the fourth line in the  demonstration  of

            the insertion of the carriage control character.


      .CENTER width of region as unsigned number
      .CENTER offset from largest right margin as signed number
      .CENTRE width of region as unsigned number
           or
      .CENTRE offset from largest right margin as signed number

           The .CENTER command indicates that the  following  line  of  source
           text is to be centered and, except for the insertion of the initial
           spaces needed to obtain centering, is  to  be  represented  in  the
           FORMAT  statement with the same number of spaces as in the original
           source.  If  no  number  follows  the  .CENTER  command,  then  the
           following  line  is  to  be  centered  between  column zero and the
           farthest right margin which  has  yet  been  set.   If  the  number
           following the .CENTER command is signed, then the following line is
           to be centered between column zero and the column which is the  sum
           of the indicated number and the farthest right margin which has yet
           been set, so that the line is shifted from its centered position by
           half  the  signed  number  of columns.  If the number following the
           .CENTER command  is  unsigned  and  greater  than  zero,  then  the
           following  line  of  text is to be centered between column zero and
           the indicated column.  If the number following the .CENTER  command
           is  unsigned  and  zero,  then the following line is to be centered
           between the current left and right margins.  If the .CENTER command
           was  preceded  by  an  .INDENT command, then the .INDENT command is
           ignored.  The .CENTER command implies a .BREAK command both  before
           and after the following line of source text.
22                                           FORMAT Program User's Guide


     For example, the source text

     .OFFSET 0;.OUTPUT WIDTH 55;.PREFACE       WRITE(1,$)
     1234567890123456789012345678901234567890123456789012345
     .LEFT MARGIN 14;.RIGHT MARGIN 34
     The quick red fox jumps over the lazy brown dog
     .CENTER 0;CENTER   0
     .CENTER 52;CENTER  52
     .CENTER -4;CENTER  -4
     .CENTER;CENTER   #
     .CENTER;CENTER
     .CENTER;    CENTER
     .CENTER +12;CENTER +12
     .CENTER 76;CENTER  76
     .LEFT MARGIN 30;.RIGHT MARGIN 50;.CENTER 0
     CENTER   0
     The quick red fox jumps over the lazy brown dog
     .LEFT MARGIN 0
     1234567890123456789012345678901234567890123456789012345
     .PROGRAM;      END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(38H12345678901234567890123456789012345678,
          117H90123456789012345/14X,20HThe  quick  red  fox/
          214X,20Hjumps  over the lazy/14X,9Hbrown dog/19X,
          310HCENTER   0/21X,10HCENTER  52/23X,9HCENTER  -,
          41H4/25X,6HCENTER,4X/27X,6HCENTER/29X,6HCENTER/9X,
          522X,10HCENTER +12/33X,10HCENTER  76/35X,6HCENTER,
          63X,1H0/30X,20HThe  quick  red  fox/30X,7Hjumps  ,
          713Hover the lazy/30X,9Hbrown dog/12H123456789012,
          843H3456789012345678901234567890123456789012345)
           END

     which would, in turn, generate the following text when run.

     1234567890123456789012345678901234567890123456789012345
                   The  quick  red  fox
                   jumps  over the lazy
                   brown dog
                        CENTER   0
                          CENTER  52
                            CENTER  -4
                              CENTER
                                CENTER
                                  CENTER
                                    CENTER +12
                                      CENTER  76
                                        CENTER   0
                                   The  quick  red  fox
                                   jumps  over the lazy
                                   brown dog
     1234567890123456789012345678901234567890123456789012345
      Complete Descriptions of the Commands                                 23


      .COMMENT rest of line is ignored regardless of contents

           The text which appears to the right  of  the  .COMMENT  command  is
           treated  as  a  comment  and  is  ignored.  The comment can include
           exclamation points, semicolons and  other  periods.   Two  adjacent
           appearances  of the upper case shift character or of the lower case
           shift character are recognized, however,  and  the  requested  case
           shifts are applied to the source text on the following lines.

           The .COMMENT command can be used at the left end of  each  line  of
           explanations or instructions which are to appear in the source text
           but which are not be be copied into the resulting  FORTRAN  output.
           If  the instructions are instead to appear in the resulting FORTRAN
           output, then these instructions should be incorporated into FORTRAN
           comment  lines  starting  with the letter C and must appear below a
           .PROGRAM command.

           The .COMMENT command can be inserted  at  the  left  end  of  other
           commands  which  are to be inactivated but which are to kept in the
           source text.  A period followed by a exclamation point  could  also
           be   inserted  at  the  left  end  of  commands  which  are  to  be
           inactivated, but if a semicolon appears on the line, then the  text
           to  the  right  of  the semicolon would be treated as normal source
           text again.

           For example, the source text

           .output width 55.right margin 54
           This sentence is followed by a simple comment.
           .comment continuing across a ; (semicolon) character
           THE COMMENT WHICH APPEARS AFTER THIS WORD
           .COMMENT CONTAINING \\ (DOUBLE BACKSLASHES)
           CONTAINS A DOUBLE BACKSLASH WHICH SELECTS UPPER TO
           LOWER CASE CONVERSION IN THE FOLLOWING TEXT.
           THE COMMENT WHICH APPEARS AFTER THIS WORD
           .comment.skip.nofill!.skip.nofill;.skip.nofill^^
           CONTAINS A DOUBLE CIRCUMFLEX WHICH RESTORES THE
           RETENTION OF ORIGINAL CASES.
           The characters which select case conversion or
           retention are acted upon even though the commands
           which have been commented out are otherwise ignored.

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

               1 FORMAT(38H This sentence is followed by a  simpl,
                117He  comment.   THE/24H COMMENT  WHICH  APPEARS,
                231H  AFTER  THIS  WORD  contains a/10H double ba,
                345Hckslash which selects  upper  to  lower  case/
                445H conversion  in  the following text.  the com,
                510Hment which/31H appears after this word CONTAI,
                624HNS A  DOUBLE  CIRCUMFLEX/17H WHICH  RESTORES ,
                738H THE RETENTION OF ORIGINAL CASES.  The/4H cha,
                845Hracters which select case conversion  or  ret,
                96Hention/36H are  acted  upon  even  though the ,
                119Hcommands which have/22H been commented out ar,
                220He otherwise ignored.)
24                                           FORMAT Program User's Guide


     which would, in turn, generate the following text when run.

      This sentence is followed by a  simple  comment.   THE
      COMMENT  WHICH  APPEARS  AFTER  THIS  WORD  contains a
      double backslash which selects  upper  to  lower  case
      conversion  in  the following text.  the comment which
      appears after this word CONTAINS A  DOUBLE  CIRCUMFLEX
      WHICH  RESTORES  THE RETENTION OF ORIGINAL CASES.  The
      characters which select case conversion  or  retention
      are  acted  upon  even  though the commands which have
      been commented out are otherwise ignored.


.CONTINUE next statement number, statement number increment

     The .CONTINUE command indicates that no additional text  is  to  be
     represented by the FORMAT statement currently being constructed and
     that the text appearing in subsequent lines in the source  file  is
     to  be represented in a new FORMAT statement.  The preface line, if
     any, indicated by a previous .PREFACE command will be written  into
     the  output  before  this next FORMAT statement.  All unused output
     field descriptions previously specified by  .INSERT  commands  will
     still  be  available.   The new FORMAT statement will include blank
     lines which have been requested by .SKIP  or  .BLANK  commands,  or
     which  are  necessary for multiple line spacing, but which have not
     yet been generated.  If the .CONTINUE command is issued within  the
     range of a .PROGRAM command, then the range of the .PROGRAM command
     is terminated.  The .CONTINUE command is  identical  to  the  .TEXT
     command, except that a .TEXT command would discard all output field
     descriptions, and, unless the .LEADING and .TRAILING  commands  are
     in  effect,  would  discard all blank lines which have not yet been
     generated.

     If a number follows the .CONTINUE command, then this number is used
     to  modify  the  statement number of the next FORMAT statement.  If
     the number is not signed, then the number will be used directly  as
     the  statement  number of the next FORMAT statement.  If the number
     is signed, then the statement number of the next  FORMAT  statement
     will  differ  from  the  statement  number  of  the previous FORMAT
     statement by the  indicated  amount.   If  no  number  follows  the
     .CONTINUE  command, or if a comma follows the .CONTINUE command but
     no number appears between the .CONTINUE  command  and  this  comma,
     then  the statement number of the next FORMAT statement will differ
     from that of the previous FORMAT statement by the current value  of
     the statement number increment.

     Modifications of the statement number are cumulative such that if 2
     or more .TEXT and/or .CONTINUE and/or .PROGRAM commands are issued,
     then the statement number of the next FORMAT statement will be  the
     result  of  the  application of each of these commands in turn.  If
     the statement number of the FORMAT statement following a section of
     program  text  indicated  by  an  initial .PROGRAM command is to be
     modified, but the program text includes dollar signs which  are  to
     be  replaced  by  this statement number, then this statement number
     should be modified by the  .PROGRAM  command  rather  than  by  the
     following .TEXT or .CONTINUE command, since, if the modification is
     done by the .TEXT or .CONTINUE command,  then  incorrect  statement
      Complete Descriptions of the Commands                                 25


           numbers  will  have been inserted into the program text.  Statement
           numbers, if any, inserted into a preface line defined by a .PREFACE
           command will, however, always be correct since the statement number
           of the next FORMAT statement is known  when  the  preface  line  is
           generated.

           If the .CONTINUE command is followed either by 2 numbers or else by
           a  comma  and  then  by a number, then the right number becomes the
           statement number increment after the generation of the next  FORMAT
           statement.   The  increment can be either positive or negative.  If
           the number is  unsigned,  then  the  increment  is  assumed  to  be
           positive.   If the .CONTINUE command is followed by 2 numbers, then
           these numbers do not need to be  separated  by  a  comma.   If  the
           .CONTINUE command is not followed by any numbers, or is followed by
           a single number  which  is  not  preceded  by  a  comma,  then  the
           statement number increment is not changed.

           For example, the source text

           .preface       WRITE(1,$)
           .continue 10,5   ;This is a message in FORMAT 10
           .program         ;C     FORMAT statement $ follows
           .continue,20     ;This is a message in FORMAT 15
           .continue        ;This is a message in FORMAT 35
           .program 100-10  ;C     FORMAT statement $ follows
           .continue        ;This is a message in FORMAT 100
           .continue        ;This is a message in FORMAT 90

           would be transformed into the following FORTRAN text when processed
           by this program.

                 WRITE(1,10)
              10 FORMAT(31H This is a message in FORMAT 10)
           C     FORMAT statement 15 follows
                 WRITE(1,15)
              15 FORMAT(31H This is a message in FORMAT 15)
                 WRITE(1,35)
              35 FORMAT(31H This is a message in FORMAT 35)
           C     FORMAT statement 100 follows
                 WRITE(1,100)
             100 FORMAT(32H This is a message in FORMAT 100)
                 WRITE(1,90)
              90 FORMAT(31H This is a message in FORMAT 90)


      .COPY number of characters to copy, number of times to copy

           The .COPY command indicates that, to the  immediate  right  of  the
           initial offset in each line of text which is copied in no fill mode
           or which is constructed in fill  mode,  the  number  of  characters
           indicated  by  the  first  number is to be duplicated the number of
           times indicated by the second number.  The initial spaces requested
           either  by  the .OFFSET command or by the default .OFFSET 1 command
           cannot be duplicated and are not included in the  character  count.
           The  carriage  control character specified by the .CARRIAGE command
           is not duplicated even if the initial offset is zero.  If the .MASK
           command  has  specified a template line, then the same replacements
26                                           FORMAT Program User's Guide


     of nonquoted spaces are also made in the copies.  If the line which
     is  being  copied contains dollar signs which are being replaced by
     output field specifications specified by the .INSERT command,  then
     it  is the dollar signs which are counted to determine the width of
     the region being copied, not the characters inserted  in  place  of
     the  dollar  signs,  and  the  same insertions are also made in the
     copies.  If the first number following the .COPY  command  is  less
     than  the  number of characters to the right of the initial offset,
     including the template characters which might have been defined  by
     the  .MASK  command, then all of the characters to the right of the
     initial offset will be copied.  If the first number is greater than
     the  number  of  characters to the right of the initial offset then
     extra spaces at the right will also be copied.  The  range  of  the
     .COPY command can be cancelled by a subsequent .NO COPY command.  A
     .COPY command issued within the range of a .PROGRAM command applies
     to  the  source text following the next .TEXT or .CONTINUE command.
     Both the .COPY command and the .NO  COPY  command  imply  a  .BREAK
     command.

     For example, the source text

     .insert 5H01234
     .insert 5H56789
     .insert 6H111111
     .insert 6H222222
     .insert 6HPUBLIC
     .insert 6HSECRET
     .preface       WRITE(1,$)
     .offset 2.copy 29,1.output width 55.carriage 1,*
     ************************
     .left margin 2.right margin 22
     .mask *                      *
     .skip.center 0;Corporation: $$$$$
     .center 0;       Firm: $$$$$
     .skip;To gain initial access to the computer, you will
     use the numbers $$$$$$ and $$$$$$ and password $$$$$$.
     To run the programs, you will use the  password $$$$$$.
     .skip.left margin 0;************************
     .program;      END
      Complete Descriptions of the Commands                                 27


           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(1,1)
               1 FORMAT(38H1 ************************     *******,
                117H*****************/3H* *,22X,7H*     *,22X,1H*/
                218H* *  Corporation: ,5H01234,15H  *     *  Corp,
                39Horation: ,5H01234,3H  */3H* *,9X,6HFirm: ,
                45H56789,9H  *     *,9X,6HFirm: ,5H56789,3H  */
                53H* *,22X,7H*     *,22X,1H*/17H* * To   gain    ,
                638Hinitial *     * To   gain    initial */4H* * ,
                745Haccess     to    the *     * access     to   ,
                86H the */36H* * computer,  you  will *     * com,
                919Hputer,  you  will */22H* * use    the   numbe,
                133Hrs *     * use    the   numbers */4H* * ,
                26H111111,8H  and   ,6H222222,9H *     * ,
                36H111111,8H  and   ,6H222222,2H */11H* * and pas,
                46Hsword ,6HPUBLIC,23H. *     * and password ,
                56HPUBLIC,3H. */30H* * To run the programs, *    ,
                625H * To run the programs, */16H* * you   will  ,
                739Huse  the *     * you   will  use  the */3H* *,
                810H password ,6HSECRET,22H.     *     * password,
                91H ,6HSECRET,7H.     */3H* *,22X,7H*     *,22X,
                11H*)
                 WRITE(1,2)
               2 FORMAT(38H* ************************     *******,
                117H*****************)
                 END

           which would, in turn, generate the following text when run.

           1 ************************     ************************
           * *                      *     *                      *
           * *  Corporation: 01234  *     *  Corporation: 01234  *
           * *         Firm: 56789  *     *         Firm: 56789  *
           * *                      *     *                      *
           * * To   gain    initial *     * To   gain    initial *
           * * access     to    the *     * access     to    the *
           * * computer,  you  will *     * computer,  you  will *
           * * use    the   numbers *     * use    the   numbers *
           * * 111111  and   222222 *     * 111111  and   222222 *
           * * and password PUBLIC. *     * and password PUBLIC. *
           * * To run the programs, *     * To run the programs, *
           * * you   will  use  the *     * you   will  use  the *
           * * password SECRET.     *     * password SECRET.     *
           * *                      *     *                      *
           * ************************     ************************


      .DEFINE GROUP

           The .DEFINE GROUP command indicates that  the  following  lines  of
           source  text  which  do  not  start with periods are to be inserted
           before each FORMAT statement  which  either  is  the  first  FORMAT
           statement  ever  generated during this use of this program or which
           is the first FORMAT statement generated after a .TEXT command.  The
           lines  specified  by  the  .DEFINE  GROUP  command are not inserted
28                                           FORMAT Program User's Guide


     before a FORMAT statement which is  generated  merely  because  the
     previous  FORMAT statement has filled or merely because a .CONTINUE
     command has been issued to  break  the  text  into  another  FORMAT
     statement.   The  lines  which  are  to be inserted before each new
     group of FORMAT statements will include all of the lines  which  do
     not  start  with  periods  in  the  source text up to the next .END
     DEFINITION, .PROGRAM, .TEXT, .CONTINUE, .GROUP, .PREFACE,  .TOP  or
     .BOTTOM  command or up to any of the various .DEFINE commands.  The
     .GROUP command can be used instead of the .DEFINE GROUP command  if
     just  a  single  line  is  to  be inserted before each new group of
     FORMAT statements.  Unlike the  .GROUP  command,  however,  nothing
     else  can  appear  to the right of the .DEFINE GROUP command on the
     same line unless it follows a semicolon.

     The .DEFINE GROUP command allows the insertion of several lines  of
     FORTRAN  text  before  each  group  of  FORMAT statements which are
     logically connected.  The rules which govern  the  construction  of
     the  lines  which  are  specified  by the .DEFINE GROUP command are
     identical to those which are  described  for  the  .DEFINE  PREFACE
     command.   If  both  types  of  lines  are  being inserted before a
     particular FORMAT statement, then the lines specified by the .GROUP
     or .DEFINE GROUP command are inserted before those specified by the
     .PREFACE or .DEFINE PREFACE command.

     For example, the source text

     .OUTPUT WIDTH 55.OUTPUT LENGTH 3.NO JUSTIFY
     .DEFINE GROUP
           GO TO 1000
     C     NEW MESSAGE
     $$$$$ CONTINUE$=
     .END DEFINITION
     .PREFACE       WRITE(ITTY,$)
     The first FORMAT statement which is generated should
     be preceded by both group and preface lines even
     though this text is not preceded by either a .TEXT
     or a .CONTINUE command.
     .CONTINUE
     This text appears after a .CONTINUE command.
     It should be preceded by preface but not group lines.
     .TEXT 100
     This text appears after a .TEXT command and
     should be preceded by both group and preface lines.
      Complete Descriptions of the Commands                                 29


           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text.

                 GO TO 1000
           C     NEW MESSAGE
               1 CONTINUE
                 WRITE(ITTY,2)
               2 FORMAT(38H The first FORMAT statement which is g,
                118Henerated should be/23H preceded by both group,
                235H and preface lines even though this)
                 WRITE(ITTY,3)
               3 FORMAT(38H text is not preceded by either a .TEX,
                116HT or a .CONTINUE/9H command.)
                 WRITE(ITTY,4)
               4 FORMAT(38H This text appears after a .CONTINUE c,
                121Hommand.  It should be/20H preceded by preface,
                221H but not group lines.)
                 GO TO 1000
           C     NEW MESSAGE
             100 CONTINUE
                 WRITE(ITTY,101)
             101 FORMAT(38H This text appears after a .TEXT comma,
                116Hnd and should be/25H preceded by both group a,
                217Hnd preface lines.)


      .DEFINE PREFACE

           The .DEFINE PREFACE command indicates that the following  lines  of
           source  text  which  do  not  start with periods are to be inserted
           before each new FORMAT statement in the resulting  FORTRAN  output.
           These  lines  will  not  appear  at  the  location in the resulting
           FORTRAN output corresponding to their location in the  source  text
           unless  a  new  FORMAT  statement  also  happens  to  begin at that
           location.  The lines are copied directly as  FORTRAN  code,  rather
           than  being  taken as text which is to be represented in the FORMAT
           statements.  The lines which are to be  inserted  before  each  new
           FORMAT  statement  will include all of the lines which do not start
           with periods in the source text up to  the  next  .END  DEFINITION,
           .PROGRAM,  .TEXT,  .CONTINUE,  .GROUP,  .PREFACE,  .TOP  or .BOTTOM
           command or up to any of the various .DEFINE commands.  The .PREFACE
           command  can be used instead of the .DEFINE PREFACE command if just
           a single line is to be inserted before each new  FORMAT  statement.
           Unlike  the  .PREFACE  command, however, nothing else can appear to
           the right of the .DEFINE PREFACE command on the same line unless it
           follows a semicolon.

           If an .END DEFINITION command appears after the lines which are  to
           be  inserted,  then the lines following the .END DEFINITION command
           will be processed in the same manner as before the .DEFINE  PREFACE
           command was issued.  If a .PROGRAM command was issued more recently
           than either a .TEXT command or a .CONTINUE command, then the  lines
           of  source text will be copied into the output directly rather than
           being represented in a FORMAT statement.  If a .PROGRAM command has
           not  been issued more recently, then the following source text will
           be represented in the FORMAT statements.
30                                           FORMAT Program User's Guide


     The insertion of the preface lines before each new FORMAT statement
     can  be  terminated  either  by issuing a .NO PREFACE command or by
     specifying a null preface by issuing either a .PREFACE command with
     nothing  to  its  right  or  a  .DEFINE  PREFACE  command  followed
     immediately  by  a  .END  DEFINITION  command.   These  methods  of
     cancelling  the  preface  line are not identical.  If a .NO PREFACE
     command is used to cancel the insertion of the preface lines,  then
     a  .RESUME  PREFACE  command  can  be  issued  later  to resume the
     insertion of the same  preface  lines  before  the  subsequent  new
     FORMAT  statements.   If  a  .PREFACE  command  is  issued  without
     anything to its right or a  .DEFINE  PREFACE  command  is  followed
     immediately by a .END DEFINITION command, however, then the .RESUME
     PREFACE command cannot be used  to  resume  the  insertion  of  the
     previous  preface  lines.   Neither  the  .PREFACE command, nor the
     .DEFINE PREFACE command,  nor  the  .NO  PREFACE  command  nor  the
     .RESUME PREFACE command implies a .BREAK command.

     The Lines of text  which  are  specified  by  the  .DEFINE  PREFACE
     command  are  stored  in  the  same  area  as  are  those which are
     specified by the .GROUP or .DEFINE GROUP, .TOP or .DEFINE  TOP  and
     .BOTTOM  or .DEFINE BOTTOM commands.  There can be at most 30 lines
     containing together no more than 500 characters  in  all  of  these
     collections  of  lines.   These lines include those which have been
     temporarily disabled by the .NO GROUP, .NO PREFACE, .NO TOP or  .NO
     BOTTOM commands.

     Any dollar signs which are not preceded by underscores in the lines
     which  are  to  be  inserted  will  be  replaced  each  time by the
     statement number of the FORMAT statement before which the lines are
     inserted.   The  manner  in which these dollar signs are handled is
     described in detail in the description  of  the  .PREFACE  command.
     The  description  of  the  .PREFACE command should be consulted for
     additional information about when and how the  lines  of  text  are
     inserted.

     For example, the source text

     .output width 55.output length 5
     .define preface
     C
     C     THIS IS A NEW FORMAT STATEMENT
           WRITE(ITTY,$)
     .end definition
     This is some text which will demonstrate the insertion
     of several lines of FORTRAN code before each new FORMAT
     statement.  The code which is inserted can contain any
     desired mixture of comments and FORTRAN instructions.
     .text
     This comes after a .TEXT command
     .continue
     and this comes after a .CONTINUE command.
      Complete Descriptions of the Commands                                 31


           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text.

           C
           C     THIS IS A NEW FORMAT STATEMENT
                 WRITE(ITTY,1)
               1 FORMAT(38H This is some text which will demonstr,
                123Hate  the  insertion  of/18H several  lines  o,
                243Hf  FORTRAN  code  before  each  new  FORMAT/
                345H statement.  The code  which  is  inserted  c,
                416Han  contain  any)
           C
           C     THIS IS A NEW FORMAT STATEMENT
                 WRITE(ITTY,2)
               2 FORMAT(38H desired mixture of comments and FORTR,
                116HAN instructions.)
           C
           C     THIS IS A NEW FORMAT STATEMENT
                 WRITE(ITTY,3)
               3 FORMAT(33H This comes after a .TEXT command)
           C
           C     THIS IS A NEW FORMAT STATEMENT
                 WRITE(ITTY,4)
               4 FORMAT(38H and this comes after a .CONTINUE comm,
                14Hand.)


      .EJECT

           The .EJECT command indicates that  no  additional  text  is  to  be
           included  in  the  line  of text currently being represented in the
           FORMAT statement.  The line of text is assumed to be  shorter  than
           normal,  and  so  is  not right justified by the insertion of extra
           spaces between the groups of printing  characters  (words)  on  the
           line.  The .EJECT command is similar to the .BREAK command with the
           exception that all blank lines  requested  by  .BLANK  commands  or
           .SKIP  commands  or  implied by .SPACING commands will be generated
           immediately when the .EJECT command is issued even if  no  printing
           characters  have  been  accumulated  into the current line of text.
           The .EJECT command can be issued  before  a  .CARRIAGE  command  to
           prevent  the  newly specified carriage control character from being
           inserted into the start of the lines which have been specified  but
           not yet forced into the FORMAT statement.

           For example, the source text

           one
           .skip 2
           .carriage *,*
           two
           .skip 2
           .eject
           .carriage @,@
           three
32                                           FORMAT Program User's Guide


     would be transformed into the following FORTRAN text when processed
     by this program.

         1 FORMAT(4H one/1H*/1H*/4H*two/1H*/1H*/6H@three)


.END DEFINITION

     The .END DEFINITION command terminates the specification  of  lines
     of  FORTRAN  text  which was started by the previous .DEFINE GROUP,
     .DEFINE PREFACE, .DEFINE TOP  or  .DEFINE  BOTTOM  command.   These
     lines  of  FORTRAN  text  are to be inserted subsequently before or
     after the FORMAT statements to allow use of these FORMAT statements
     by  the  program in which these FORMAT statements will be embedded.
     The lines of FORTRAN text specified by the various .DEFINE commands
     are  stored  in  a  common  area.   There  can  be at most 30 lines
     containing together no more than 500 characters  in  all  of  these
     collections.

     After the .END DEFINITION command has been  issued,  the  following
     lines of source text will be processed in the same manner as before
     the .DEFINE command was issued.  If a .PROGRAM command  was  issued
     more  recently  than either a .TEXT command or a .CONTINUE command,
     then the lines of source  text  will  be  copied  into  the  output
     directly rather than being represented in a FORMAT statement.  If a
     .PROGRAM command has  not  been  issued  more  recently,  then  the
     following source text will be represented in the FORMAT statements.

     A particular collection of lines will be copied into the  resulting
     FORTRAN  output  whenever  the required conditions are encountered.
     The .DEFINE GROUP command specifies lines of FORTRAN text which are
     to  be  inserted before the first FORMAT statement produced by this
     program and before the first  FORMAT  statement  produced  after  a
     .TEXT  command  is  issued.   The .DEFINE PREFACE command specifies
     lines of FORTRAN text which are to  be  inserted  before  each  new
     FORMAT  statement,  regardless  of the reason for the break between
     the previous FORMAT statement and  the  current  FORMAT  statement.
     The  .DEFINE  TOP  and  .DEFINE  BOTTOM  commands  specify lines of
     FORTRAN text which are to be inserted before and after  the  FORMAT
     statements for each page of text which will be displayed on a video
     terminal and are described in a later section of this manual.

     The specification of additional lines of FORTRAN text by any of the
     various  .DEFINE  commands  can  also be terminated by a subsequent
     .PROGRAM, .TEXT,  .CONTINUE,  .GROUP,  .PREFACE,  .TOP  or  .BOTTOM
     command, or by any other of the various .DEFINE commands.
      Complete Descriptions of the Commands                                 33


           For example, the source text

           .output width 55
           .define group
           C     THIS IS INSERTED BEFORE EACH NEW GROUP OF FORMATS
                 WRITE(ITTY,100)
           .define preface
           C     THIS IS INSERTED BEFORE EACH NEW FORMAT STATEMENT
                 WRITE(ITTY,$)
           .end definition
           This text will be in the first format statement.
           .continue
           This comes after the first CONTINUE command.
           .program
           C     THIS IS INSERTED BY A PROGRAM COMMAND
           .continue
           This comes after the second CONTINUE command.
           .text
           This comes after a TEXT command.

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text.

           C     THIS IS INSERTED BEFORE EACH NEW GROUP OF FORMATS
                 WRITE(ITTY,100)
           C     THIS IS INSERTED BEFORE EACH NEW FORMAT STATEMENT
                 WRITE(ITTY,1)
               1 FORMAT(38H This text will be in the first format,
                111H statement.)
           C     THIS IS INSERTED BEFORE EACH NEW FORMAT STATEMENT
                 WRITE(ITTY,2)
               2 FORMAT(38H This comes after the first CONTINUE c,
                17Hommand.)
           C     THIS IS INSERTED BY A PROGRAM COMMAND
           C     THIS IS INSERTED BEFORE EACH NEW FORMAT STATEMENT
                 WRITE(ITTY,3)
               3 FORMAT(38H This comes after the second CONTINUE ,
                18Hcommand.)
           C     THIS IS INSERTED BEFORE EACH NEW GROUP OF FORMATS
                 WRITE(ITTY,100)
           C     THIS IS INSERTED BEFORE EACH NEW FORMAT STATEMENT
                 WRITE(ITTY,4)
               4 FORMAT(33H This comes after a TEXT command.)


      .END OF FILE

           The .END OF FILE command  indicates  that  the  processing  of  the
           source  text  is  complete.   Any additional commands or additional
           text appearing on the same line to the right of the  .END  OF  FILE
           command  are  ignored.   No  additional source text is read.  Blank
           lines which have not  yet  been  generated,  but  which  have  been
           requested  by  .SKIP  or .BLANK commands or which are necessary for
           multiple line spacing, will be appended  to  the  FORMAT  statement
           currently  being  constructed  if  a  .TRAIL  command is in effect.
           Blank lines will be discarded if a .NO TRAIL command is  in  effect
           or  if  a  .TRAIL  command  has  not  been issued.  An .END OF FILE
34                                           FORMAT Program User's Guide


     command is necessary at the end of the  source  file  only  if  the
     system  where  this  program  is being used does not support end of
     file tests in FORTRAN READ statements.


.FILL

     The .FILL command indicates that each line of text  represented  in
     the  FORMAT  statements  is  to be filled with the next words which
     appear in the source text until the  following  word  would  extend
     beyond  the  current right margin.  If the first word is wider than
     the current separation between the left and right margins, then the
     entire  word  is  fitted  onto  the  current line.  A .FILL command
     terminates the range of the previous .NO FILL command  which  would
     have  caused  each line of text represented in the resulting FORMAT
     statements to contain the same number of words  per  line  and  the
     same  number of spaces preceding and between words as in the source
     text.  A .FILL command is assumed to be in effect when this program
     is  started.  A .FILL command issued within the range of a .PROGRAM
     command applies to the source text  following  the  next  .TEXT  or
     .CONTINUE command.  The .FILL command implies a .BREAK command.

     Within the range of the .FILL command, a space  separates  adjacent
     words  which  appear  on  the  same line of text represented in the
     FORMAT statements, regardless of whether these  words  appeared  on
     separate  lines  of  the  source  text or appeared on the same line
     separated by additional spaces.  A second space follows each colon,
     semicolon, exclamation point, question mark and period which is not
     preceded by an  underscore  character  but  which  is  followed  by
     another  word.  If a .NO JUSTIFY command has not been issued, or if
     a .JUSTIFY command has been issued more recently than a .NO JUSTIFY
     command,  then  additional spaces are inserted between the words to
     cause the line of text to  extend  to  the  current  right  margin,
     providing  that a .BREAK command does not follow and is not implied
     to follow the rightmost word on the line.

     For example, the source text

     .FILL.OFFSET 0.RIGHT MARGIN 55.OUTPUT WIDTH 55
     .PREFACE       WRITE(1,$)
          The                    FILL                command
             indicates           that                each
                line             of               text
                   represented   in             the
                      FORMAT     statements   is
                         to      be    filled
     .NO JUSTIFY;           with the  next
                         words   which appear
                      in         the      source
                   text          until          the
                following        word            would
     .NOFILL;extend              beyond               the
          current                right               margin.
     .PROGRAM;      END
      Complete Descriptions of the Commands                                 35


           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(1,1)
               1 FORMAT(38HThe FILL command  indicates  that  eac,
                117Hh  line  of  text/24Hrepresented in the FORMA,
                228HT statements is to be filled/13Hwith the next,
                338H words which appear in the source text/4Hunti,
                426Hl the following word would/6Hextend,14X,3Hbey,
                53Hond,15X,3Hthe/5X,7Hcurrent,16X,5Hright,15X,1Hm,
                66Hargin.)
                 END

           which would, in turn, generate the following text when run.

           The FILL command  indicates  that  each  line  of  text
           represented in the FORMAT statements is to be filled
           with the next words which appear in the source text
           until the following word would
           extend              beyond               the
                current                right               margin.

           In the above example, the first line in the text which is generated
           when the FORTRAN text is run is justified since a .BREAK command is
           not implied following the rightmost word on the line.   The  second
           line  is not justified since a .BREAK command is implied by the .NO
           JUSTIFY command which follows the rightmost word on the line.   The
           third  and  fourth  lines  are  within the range of the .NO JUSTIFY
           command and so are not justified.  The fifth and  sixth  lines  are
           within the range of the .NOFILL command and so are direct copies of
           the corresponding lines in the source text.


      .FLAGS
           or
      .FLAGS ALL

           The .FLAGS ALL command indicates that  all  flag  characters  which
           were initially active, or which have been individually activated by
           the  corresponding  .FLAGS  commands,  and  which  have  not   been
           individually  disabled by the corresponding .NO FLAGS commands, are
           to be active in the source text.  The following flag characters are
           activated by the .FLAGS ALL command.

             $  (dollar sign) or whatever character  has  been  most  recently
                selected by a .FLAGS INSERT command.
             \  (back slash) or whatever  character  has  been  most  recently
                selected by a .FLAGS LOWER CASE command.
             _  (underscore) or whatever  character  has  been  most  recently
                selected by a .FLAGS QUOTE command.
             #  (number sign) or whatever character  has  been  most  recently
                selected by a .FLAGS SPACE command.
             ^  (circumflex) or whatever  character  has  been  most  recently
                selected by a .FLAGS UPPER CASE command.
             <  (less than sign) if  a  .FLAGS  CAPITALIZE  command  has  been
                issued,  or whatever character has been most recently selected
                by a .FLAGS CAPITALIZE  command.   This  flag  character  will
36                                           FORMAT Program User's Guide


          remain  inactive  if  a .FLAGS CAPITALIZE command has not been
          issued.

     All of these flag characters can be  temporarily  disabled  by  the
     issuing  of a .NO FLAGS or a .NO FLAGS ALL command.  The .FLAGS ALL
     command  and  the  .NO  FLAGS  ALL  command  do  not   change   the
     interpretation  of the flag characters which identify and terminate
     commands.  The flag characters which  are  to  be  interpreted  and
     acted  upon  in a preface line specified by the .PREFACE command or
     in a field specification defined by the  .INSERT  command  must  be
     those  which  are  active  when  the  preface  line  or  the  field
     specification is defined, regardless of what flag characters happen
     to  be  active  when the preface line or the field specification is
     used.  Neither the .FLAGS ALL command nor the .NO FLAGS ALL command
     implies a .BREAK command.

     For example, the source text

     .OUTPUT WIDTH 55.RIGHT MARGIN 55.OFFSET 0.NOFILL
     .UPPERCASE.INSERT 3^^H\\THE
     .CONTINUE.PREFACE       \\WRITE(1,$)
     \\^THE QUICK#_RED <FOX JUMPS OVER $$$ LAZY _BROWN <DOG.
     .PROGRAM
     \\^THE QUICK#_RED <FOX JUMPS OVER $$$ LAZY _BROWN <DOG.
     .NO FLAGS
     .CONTINUE.FLAGS CAPITALIZE.UPPER CASE.INSERT 3^^H\\THE
     \\^THE QUICK#_RED <FOX JUMPS OVER $$$ LAZY _BROWN <DOG.
     .PROGRAM.PREFACE       \\WRITE(1,$)
     \\^THE QUICK#_RED <FOX JUMPS OVER $$$ LAZY _BROWN <DOG.
     .FLAGS
     .UPPER CASE.CONTINUE
     \\^THE QUICK#_RED <FOX JUMPS OVER $$$ LAZY _BROWN <DOG.
     .PROGRAM
     \\^THE QUICK#_RED <FOX JUMPS OVER $$$ LAZY _BROWN <DOG.

     would be transformed into the following FORTRAN text when processed
     by this program.

           write(1,1)
         1 FORMAT(30HThe quick Red <fox jumps over ,3Hthe,
          117H lazy Brown <dog.)
     The quick Red <fox jumps over   2 lazy Brown <dog.
           write(1,2)
         2 FORMAT(38H\\^THE QUICK#_RED <FOX JUMPS OVER $$$ ,
          117HLAZY _BROWN <DOG.)
     \\^THE QUICK#_RED <FOX JUMPS OVER $$$ LAZY _BROWN <DOG.
           \\WRITE(1,$)
         3 FORMAT(29HThe quick Red FOX jumps over ,
          13^^H\\THE,16H lazy Brown DOG.)
     The quick Red FOX jumps over   4 lazy Brown DOG.

     It should be noted that the final preface line and the final  field
     specification  were  defined  in  the  above example while the flag
     characters were inactive so these flag characters  are  treated  as
     nonflag  characters  even  though  the  preface  line and the field
     specification are applied later when the flag characters are  again
     active.
      Complete Descriptions of the Commands                                 37


      .FLAGS CAPITALIZE character to precede capitalized words

           The .FLAGS CAPITALIZE command indicates that the  single  character
           appearing  as its argument can be used in the following source text
           at the start of words in which the alphabetic  letters  are  to  be
           converted to upper case.  The case mode which is in effect when the
           specified capitalization flag character is found in  the  following
           source  text,  regardless  of whether this case mode is the default
           retention  of  cases  which  can  also  be  specified   by   double
           circumflexes  or  by the .UPPER CASE command, or is the translation
           of upper case into lower case which is  specified  by  double  back
           slashes  or  by the .LOWER CASE command, will be restored following
           the next space, the next end of line or the next appearance of  the
           specified  capitalization  flag  character.   The .FLAGS CAPITALIZE
           command does not imply a .BREAK command.

           The  capitalization  flag  character  specified   by   the   .FLAGS
           CAPITALIZE  command  should  not  currently be active as some other
           flag indication, and should not be one of the alphabetic letters  A
           through  Z.  The capitalization flag character is recognized in all
           of the following source text, including the text being  represented
           in  the  FORMAT  statements,  the text within the range of .PROGRAM
           commands, and within commands  and  their  arguments.   Within  the
           range  of  the  .FLAGS CAPITALIZE command, underscores must precede
           all appearances of the capitalization flag character which  are  to
           be  treated  like  other  characters.   If  no  capitalization flag
           character is specified by the .FLAGS CAPITALIZE command,  then  the
           last character so specified by a previous .FLAGS CAPITALIZE command
           will be used, or the less than sign will be used  if  no  character
           has previously been specified by any .FLAGS CAPITALIZE command.

           No capitalization flag character is active  when  this  program  is
           started.  The capitalization flag character specified by the .FLAGS
           CAPITALIZE  command  can  temporarily  be  treated  as  a   nonflag
           character  if  a  .NO  FLAGS CAPITALIZE command is issued, but will
           again become active when a .FLAGS  CAPITALIZE  command  is  issued.
           The  capitalization  flag character, like all other flag characters
           in the source text, can also temporarily be treated  as  a  nonflag
           character  if  a  .NO FLAGS or .NO FLAGS ALL command is issued, but
           will again become active when a .FLAGS or  .FLAGS  ALL  command  is
           issued,  providing that a .FLAGS CAPITALIZE command has been issued
           more recently than a .NO FLAGS CAPITALIZE command.  Words which are
           marked  by  the  capitalization  flag  character  in a preface line
           defined by the .PREFACE command or in a field specification defined
           by the .INSERT command are converted to upper case when the preface
           line or the field specification is defined, regardless of what  the
           capitalization  flag  character happens to be when the preface line
           or the field specification is used.
38                                           FORMAT Program User's Guide


     For example, the source text

     .nofill.offset 0.out width 55.preface       WRITE(1,$)
     .flag capitalize
     ^^UPPER lower <Le^S^s\T\han<UPPERlower UPPER lower
     UPPER lower <Le^S^s\T\han UPPER lower
     UPPER lower <Le^S^s\T\han
     UPPER lower
     .fcap %
     \\UPPER lower %Le^S^s\T\han%UPPER*lower UPPER lower
     UPPER lower %Le^S^s\T\han UPPER lower
     UPPER lower %Le^S^s\T\han
     UPPER lower
     .no flag
     ^^UPPER lower %Le^S^s\T\han%UPPERlower UPPER lower
     \\UPPER lower %Le^S^s\T\han%UPPER*lower UPPER lower
     .flag
     ^^UPPER lower %Le^S^s\T\han%UPPERlower UPPER lower
     \\UPPER lower %Le^S^s\T\han%UPPER*lower UPPER lower
     .no flag capitalize
     ^^UPPER lower %Le^S^s\T\han%UPPERlower UPPER lower
     \\UPPER lower %Le^S^s\T\han%UPPER*lower UPPER lower
     .program;      END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(38HUPPER lower LESSthANUPPERlower UPPER l,
          14Hower/32HUPPER lower LESSthAN UPPER lower/3HUPP,
          217HER lower LESSthAN/11HUPPER lower/9Hupper low,
          334Her LESSthANupper*lower upper lower/8Hupper lo,
          424Hwer LESSthAN upper lower/17Hupper lower LESSt,
          53HhAN/11Hupper lower/24H^^upper lower %le^s^s\t\,
          626Hhan%upperlower upper lower/15H\\upper lower %,
          736Hle^s^s\t\han%upper*lower upper lower/6HUPPER ,
          836Hlower LESSthANUPPERlower UPPER lower/6Hupper ,
          937Hlower LESSthANupper*lower upper lower/5HUPPER,
          139H lower %LeSSthan%UPPERlower UPPER lower/3Hupp,
          242Her lower %leSSthan%upper*lower upper lower)
           end
      Complete Descriptions of the Commands                                 39


           which would, in turn, generate the following text when run.

           UPPER lower LESSthANUPPERlower UPPER lower
           UPPER lower LESSthAN UPPER lower
           UPPER lower LESSthAN
           UPPER lower
           upper lower LESSthANupper*lower upper lower
           upper lower LESSthAN upper lower
           upper lower LESSthAN
           upper lower
           ^^upper lower %le^s^s\t\han%upperlower upper lower
           \\upper lower %le^s^s\t\han%upper*lower upper lower
           UPPER lower LESSthANUPPERlower UPPER lower
           upper lower LESSthANupper*lower upper lower
           UPPER lower %LeSSthan%UPPERlower UPPER lower
           upper lower %leSSthan%upper*lower upper lower


      .FLAGS CONTROL character to precede commands

           The .FLAGS CONTROL command  indicates  that  the  single  character
           appearing  as its argument can be used in the following source text
           at the start of lines which  are  to  be  interpreted  as  commands
           rather  than  as  text  which  is  to  be represented in the FORMAT
           statements.  If no character is specified  by  the  .FLAGS  CONTROL
           command,  then the last character so specified by a previous .FLAGS
           CONTROL command will be used, or the period  will  be  used  if  no
           character  has  previously  been  specified  by  any .FLAGS CONTROL
           command.  The .FLAGS  CONTROL  command  does  not  imply  a  .BREAK
           command.

           The control flag character specified by the .FLAGS CONTROL  command
           should  not  currently be active as some other flag indication, and
           should not be one of the alphabetic letters A through  Z.   If  the
           .FLAGS  CONTROL  command  is  followed  on the same line by another
           command, then these commands should be  separated  by  a  semicolon
           rather  than  by the appearance of either the original control flag
           character or of the new  control  flag  character,  since  the  new
           control flag character is not active until after the .FLAGS CONTROL
           command is interpreted, and the  original  control  flag  character
           will not be active when the next command is interpreted.

           If the control flag character appears at the start of a line  which
           is  not  a  command  line  or if the control flag character appears
           within a command line but does not indicate the  start  of  another
           command,  then  the  control  flag character must be preceded by an
           underscore.  The control flag character  specified  by  the  .FLAGS
           CONTROL command can also be treated as a nonflag character if a .NO
           FLAGS COMMAND is issued.  Of  course,  if  the  .NO  FLAGS  CONTROL
           command  is  issued,  then  no  further  commands can appear in the
           source text.

           For example, the source text

           .flag control *.this is the first line
           *output width 55;and this is the second line.
           *flag control =;=preface       WRITE(1,$)
40                                           FORMAT Program User's Guide


     would be transformed into the following FORTRAN text when processed
     by this program.

           WRITE(1,1)
         1 FORMAT(38H .this is the first line and this is t,
          115Hhe second line.)


.FLAGS FENCE character to terminate and separate commands

     The .FLAGS  FENCE  command  indicates  that  the  single  character
     appearing  as  its  argument  can  be  used in command lines in the
     following source text to terminate any command except  those  which
     take  the  rest  of  the line of text as their arguments.  The text
     which follows the use of the separation flag character can  be  any
     text  which  could appear on the next line if nothing else appeared
     to the right of the command.   The  separation  flag  character  is
     required  between  two  commands on the same line only if the first
     command is followed by an exclamation point and then by a  comment.
     If  no character is specified by the .FLAGS FENCE command, then the
     last character so specified by a previous .FLAGS FENCE command will
     be  used,  or  the  semicolon  will  be  used  if  no character has
     previously been specified by any .FLAGS FENCE command.  The  .FLAGS
     FENCE command does not imply a .BREAK command.

     The separation flag character specified by the .FLAGS FENCE command
     should  not  currently be active as some other flag indication, and
     should not be one of the alphabetic letters A through  Z.   If  the
     .FLAGS  FENCE  command  is  followed  on  the  same line by another
     command, then either the .FLAGS FENCE command should not itself  be
     terminated  by a separation flag character or else the .FLAGS FENCE
     command should  be  terminated  by  the  original  separation  flag
     character  rather than by the appearance of the new separation flag
     character since the new separation flag  character  is  not  active
     until after the .FLAGS FENCE command is interpreted.

     If the separation flag character appears in a comment in a  command
     line but is not to terminate the comment, or appears as a character
     argument of a command, then the separation flag character  must  be
     preceded  by  an  underscore.   The  separation  flag character can
     temporarily be treated as a nonflag character if a .NO FLAGS  FENCE
     command is issued, but will again become active when a .FLAGS FENCE
     command is issued.

     For example, the source text

     .flag fence @!a comment;.indent 5@This text is to be
     .output width 55@represented in the FORMAT statement.

     would be transformed into the following FORTRAN text when processed
     by this program.

         1 FORMAT(6X,35HThis text is to be represented in t,
          120Hhe FORMAT statement.)
      Complete Descriptions of the Commands                                 41


      .FLAGS INSERT character to indicate location of insertions

           The .FLAGS INSERT  command  indicates  that  the  single  character
           appearing  as  its  argument  can be used in the source text on the
           lines following a .PROGRAM command and in the text to the right  of
           a  .PREFACE  command  to  indicate locations at which the statement
           number of the next FORMAT statement is to  be  inserted.   If  more
           contiguous  appearances  of  the insertion flag character are found
           than there are digits in  the  statement  number,  then  additional
           spaces are inserted to the left of the statement number so that the
           total number of characters which are inserted equals the number  of
           insertion flag characters in the group.  The character specified by
           the .FLAGS INSERT command can also be used within the  source  text
           which  is  being  represented in the resulting FORMAT statements to
           indicate locations at which the output field descriptions specified
           by  the  .INSERT  command  are  to  be  inserted.   The  number  of
           contiguous appearances of the insertion flag character in the  text
           being  represented in the FORMAT statements indicates the number of
           characters which will be  generated  when  a  FORTRAN  variable  is
           written   out   using  the  field  specification.   The  number  of
           contiguous appearances of  the  insertion  flag  character  is  the
           number  of  character  positions  which  must  be  reserved for the
           appearance of this variable when the words in the source  text  are
           wrapped  around  and  justified by this program.  The .FLAGS INSERT
           command does not imply a .BREAK command.

           The insertion flag character specified by the .FLAGS INSERT command
           should  not  currently be active as some other flag indication, and
           should not be one of the alphabetic letters A  through  Z.   Within
           the  range  of  the .FLAGS INSERT command, underscores must precede
           all appearances of the insertion flag character  which  are  to  be
           treated  like  any other character.  If no insertion flag character
           is specified by the .FLAGS INSERT command, then the last  character
           so  specified  by a previous .FLAGS INSERT command will be used, or
           the dollar sign will be used if no character  has  previously  been
           specified by any .FLAGS INSERT command.

           The insertion flag character specified by the .FLAGS INSERT command
           can  temporarily  be  treated as a nonflag character if a .NO FLAGS
           INSERT command is issued, but  will  again  become  active  when  a
           .FLAGS  INSERT  command  is  issued.  The insertion flag character,
           like all other  flag  characters  in  the  source  text,  can  also
           temporarily be treated as a nonflag character if a .NO FLAGS or .NO
           FLAGS ALL command is issued, but will again become  active  when  a
           .FLAGS  or .FLAGS ALL command is issued, providing that a .NO FLAGS
           INSERT command has not been issued  more  recently  than  a  .FLAGS
           INSERT  command.   The  character  which  is  to be replaced by the
           statement number in a preface line defined by the .PREFACE  command
           is  the  insertion  flag character which is active when the preface
           line is defined, regardless of what the  insertion  flag  character
           happens to be when the preface line is used.
42                                           FORMAT Program User's Guide


     For example, the source text

     .flags insert @.output width 55.program 100,10
     .insert 1I8
     .insert 1A8
     .preface       WRITE(1$2,@)
     ^^C     NEXT FORMAT STATEMENT IS @.
     .continue;\\^MAXIMUM AMOUNT OF LOAN IS $@@@@@@@@.
     .flags insert $.program
     ^^C     NEXT FORMAT STATEMENT IS $.
     .continue;\\^MAXIMUM AMOUNT OF LOAN IS _$$$$$$$$$.
     .no flags.program
     ^^C     NEXT FORMAT STATEMENT IS $.
     .continue;\\^MAXIMUM AMOUNT OF LOAN IS _$$$$$$$$$.

     would be transformed into the following FORTRAN text when processed
     by this program.

     C     NEXT FORMAT STATEMENT IS 100.
           WRITE(1$2,100)
       100 FORMAT(28H Maximum amount of loan is $,1I8,1H.)
     C     NEXT FORMAT STATEMENT IS 110.
           WRITE(1$2,110)
       110 FORMAT(28H Maximum amount of loan is $,1A8,1H.)
     ^^c     next format statement is $.
           WRITE(1$2,120)
       120 FORMAT(38H \\^maximum amount of loan is _$$$$$$$,
          13H$$.)


.FLAGS LOWER CASE character to precede lower case letters

     The .FLAGS LOWER CASE command indicates that the  single  character
     appearing as its argument can be used in the source text before any
     alphabetic letter in the range A through Z which is to be converted
     to  its  lower case form.  Two adjacent lower case shift characters
     indicate that all subsequent alphabetic letters are to be converted
     to  lower  case,  except  for the next letter immediately following
     either an underscore or a circumflex and except for all letters  in
     the word immediately following a less than sign if within the range
     of a .FLAGS CAPITALIZE command.  The range of the lower case  shift
     lock indicated either by the 2 adjacent lower case shift characters
     or by the equivalent .LOWER CASE command can be  terminated  either
     by  2  adjacent  circumflexes  or  by  the  equivalent  .UPPER CASE
     command.  The .FLAGS LOWER CASE command does  not  imply  a  .BREAK
     command.

     The lower case shift character specified by the .FLAGS  LOWER  CASE
     command   should  not  currently  be  active  as  some  other  flag
     indication, and should not be  one  of  the  alphabetic  letters  A
     through  Z.   Within  the  range  of the .FLAGS LOWER CASE command,
     underscores must precede all appearances of the  lower  case  shift
     character  which are to be treated like any other character.  If no
     lower case shift character is specified by the  .FLAGS  LOWER  CASE
     command,  then the last character so specified by a previous .FLAGS
     LOWER CASE command will be used, or the back slash will be used  if
     no character has previously been specified by any .FLAGS LOWER CASE
      Complete Descriptions of the Commands                                 43


           command.

           The lower case shift character specified by the .FLAGS  LOWER  CASE
           command  can temporarily be treated as a nonflag character if a .NO
           FLAGS LOWER CASE command is issued, but will  again  become  active
           when  a  .FLAGS LOWER CASE command is issued.  The lower case shift
           character, like all other flag characters in the source  text,  can
           also  temporarily  be treated as a nonflag character if a .NO FLAGS
           or .NO FLAGS ALL command is issued, but will  again  become  active
           when a .FLAGS or .FLAGS ALL command is issued, providing that a .NO
           FLAGS LOWER CASE command has not been issued more recently  than  a
           .FLAGS LOWER CASE command.  Letters which are preceded by the lower
           case shift character or which are within the range of a lower  case
           shift  lock in a preface line defined by the .PREFACE command or in
           a field specification defined by the .INSERT command are  converted
           to  lower  case when the preface line or the field specification is
           defined, regardless of what the case shift characters happen to  be
           when the preface line or the field specification is used.

           For example, the source text

           .flag capitalize.nofill.output width 55
           \\\T\H\I\S \l\i\n\e WILL be ^^\A\L\L \l\o\w\e\r case
           ^^^t^h^i^s ^L^I^N^E WILL <be \\^A^L^L ^u^p^p^e^r <CASE
           .flag lower case -.flag upper case +.flag capitalize @
           ---T-H-I-S -l-i-n-e WILL be ++-A-L-L -l-o-w-e-r case
           +++t+h+i+s +L+I+N+E WILL @be --+A+L+L +u+p+p+e+r @CASE

           would be transformed into the following FORTRAN text when processed
           by this program.

               1 FORMAT(33H this line will be all lower case/2H T,
                131HHIS LINE WILL BE ALL UPPER CASE/10H this line,
                223H will be all lower case/18H THIS LINE WILL BE,
                315H ALL UPPER CASE)


      .FLAGS QUOTE character to precede character to be used as is

           The .FLAGS  QUOTE  command  indicates  that  the  single  character
           appearing as its argument can be used in the source text before any
           character which is to  be  treated  as  an  ordinary  nonalphabetic
           nonflag  printing  character.   The  .FLAGS  QUOTE command does not
           imply a .BREAK command.

           The quotation flag character specified by the .FLAGS QUOTE  command
           should  not  currently be active as some other flag indication, and
           should not be one of the alphabetic letters A  through  Z.   Within
           the range of the .FLAGS QUOTE command, the quotation flag character
           must precede all appearances of the quotation flag character  which
           are  to  be treated like any other character.  If no quotation flag
           character is specified by the .FLAGS QUOTE command, then  the  last
           character  so  specified by a previous .FLAGS QUOTE command will be
           used, or the underscore will be used if no character has previously
           been specified by any .FLAGS QUOTE command.
44                                           FORMAT Program User's Guide


     The quotation flag character specified by the .FLAGS QUOTE  command
     can  temporarily  be  treated as a nonflag character if a .NO FLAGS
     QUOTE command is issued, but will again become active when a .FLAGS
     QUOTE  command  is  issued.  The quotation flag character, like all
     other flag characters in the source text, can also  temporarily  be
     treated  as  a  nonflag  character  if a .NO FLAGS or .NO FLAGS ALL
     command is issued, but will again become active when  a  .FLAGS  or
     .FLAGS  ALL  command  is  issued,  providing that a .NO FLAGS QUOTE
     command has not been issued  more  recently  than  a  .FLAGS  QUOTE
     command.   If characters within the definition of a preface line by
     the .PREFACE command or of a field  specification  by  the  .INSERT
     command  are  to be treated as nonflag printing characters in spite
     of their usual interpretations, then  these  characters  should  be
     preceded  by  the quotation flag character which is active when the
     preface line or the field specification is defined,  regardless  of
     what quotation flag character happens to be active when the preface
     line or the field specification is used.

     For example, the source text

     .flags quote *.left margin 3.output width 55
     Some typical flag characters are
     .indent -3
     *###the number sign
     .indent -3
     *^##the circumflex
     .indent -3
     *\##the back slash
     .indent -3
     *$##the dollar sign
     .indent -3
     _##the underscore

     would be transformed into the following FORTRAN text when processed
     by this program.

         1 FORMAT(4X,32HSome typical flag characters are/
          119H #  the number sign/18H ^  the circumflex/1H ,
          217H\  the back slash/19H $  the dollar sign/2H _,
          316H  the underscore)


.FLAGS REMARK character to separate commands from comments

     The .FLAGS REMARK  command  indicates  that  the  single  character
     appearing  as  its  argument  can  be  used in command lines in the
     following source text to indicate that the following  text  through
     the  end  of the line or through the next appearance of a semicolon
     on the same line is to be  treated  as  a  comment  and  is  to  be
     ignored.  Less than signs in the comment do not apply after the end
     of the comment, but all case shift locks indicated in  the  comment
     by double back slashes or by double circumflexes are applied to the
     text following the comment.  The remark flag character is  inactive
     following those commands which take the rest of the line of text as
     their arguments.  If no character is specified by the .FLAGS REMARK
     command,  then the last character so specified by a previous .FLAGS
     REMARK command will be used, or the exclamation point will be  used
      Complete Descriptions of the Commands                                 45


           if  no character has previously been specified by any .FLAGS REMARK
           command.  The  .FLAGS  REMARK  command  does  not  imply  a  .BREAK
           command.

           The remark flag character specified by the  .FLAGS  REMARK  command
           should  not  currently be active as some other flag indication, and
           should not be one of the alphabetic letters A through  Z.   If  the
           .FLAGS  REMARK  command  is followed on the same line by a comment,
           then the comment should be indicated by the  original  remark  flag
           character  since  the  new remark flag character will not be active
           until the .FLAGS REMARK command is interpreted.

           If the remark flag character appears within a command line  but  is
           not  to  indicate  the  start  of  a  comment, then the remark flag
           character must be preceded  by  an  underscore.   The  remark  flag
           character  specified  by  the  .FLAGS  REMARK  command  can also be
           treated as a nonflag character if a .NO  FLAGS  REMARK  command  is
           issued,  but  will again become active when a .FLAGS REMARK command
           is issued.

           For example, the source text

           .!.indent 5!command which has been commented out
           .flags capitalize!comment separating commands;.offset 0
           .preface one<two!three four
           FIRST LINE
           .continue! 2\\back slashes;.preface five<six;seven eight
           .!capitalization stops at end of <comment;SECOND LINE
           .flag remark @!at sign inactive;.text@ 2^^circumflexes
           .preface nine<ten.eleven twelve
           THIRD LINE

           would be transformed into the following FORTRAN text when processed
           by this program.

           oneTWO!THREE four
               1 FORMAT(10HFIRST LINE)
           fiveSIX;SEVEN eight
               2 FORMAT(11Hsecond line)
           nineTEN.ELEVEN twelve
               3 FORMAT(10HTHIRD LINE)


      .FLAGS SPACE character to indicate a nonadjustable space

           The .FLAGS  SPACE  command  indicates  that  the  single  character
           appearing  as its argument can be used in the following source text
           to indicate the location of a space  which  is  to  be  treated  as
           though  it were a printing character.  The use of the space holding
           character is completely equivalent to the use of a  space  preceded
           by an underscore.  The .FLAGS SPACE command does not imply a .BREAK
           command.

           The space holding character specified by the .FLAGS  SPACE  command
           should  not  currently be active as some other flag indication, and
           should not be one of the alphabetic letters A through Z.  The space
           holding  character  is  recognized  in  all of the following source
46                                           FORMAT Program User's Guide


     text,  including  the  text  being  represented   in   the   FORMAT
     statements,  the  text  within  the range of .PROGRAM commands, and
     within the arguments of commands.  Within the range of  the  .FLAGS
     SPACE  command,  underscores  must  precede  all appearances of the
     space holding character which are to be left unchanged rather  than
     be converted to spaces.  If no space holding character is specified
     by the .FLAGS SPACE command, then the last character  so  specified
     by a previous .FLAGS SPACE command will be used, or the number sign
     will be used if no character has previously been specified  by  any
     .FLAGS SPACE command.

     The space holding character specified by the .FLAGS  SPACE  command
     can  temporarily  be  treated as a nonflag character if a .NO FLAGS
     SPACE command is issued, but will again become active when a .FLAGS
     SPACE  command  is  issued.   The space holding character, like all
     other flag characters in the source text, can also  temporarily  be
     treated  as  a  nonflag  character  if a .NO FLAGS or .NO FLAGS ALL
     command is issued, but will again become active when  a  .FLAGS  or
     .FLAGS  ALL  command  is  issued,  providing that a .NO FLAGS SPACE
     command has not been issued  more  recently  than  a  .FLAGS  SPACE
     command.   Nonadjustable  spaces  in  a preface line defined by the
     .PREFACE command or in a field specification defined by the .INSERT
     command  should  be  indicated  by  the  space holding character in
     effect when the preface line or the field specification is defined,
     regardless  of  what the space holding character happens to be when
     the preface line or the field specification is used.

     For example, the source text

     .output width 55
     .insert 10Hthe   _####
     .insert 10Hthe   *###
     .preface ######write(1_#2,$)
     This   demonstrates   $space###holding   character.
     .flags space *.break
     This   demonstrates   $space***holding   character.

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text.

           write(1#2,1)
         1 FORMAT(19H This demonstrates ,10Hthe   #   ,2Hsp,
          124Hace   holding character./17H This demonstrate,
          22Hs ,10Hthe   *   ,26Hspace   holding character.)


.FLAGS UPPER CASE character to precede upper case letters

     The .FLAGS UPPER CASE command indicates that the  single  character
     appearing as its argument can be used in the source text before any
     alphabetic letter in the range A through Z which is to be converted
     to  its  upper case form.  Two adjacent upper case shift characters
     indicate that the cases of all subsequent alphabetic letters are to
     be left unchanged, except for the next letter immediately following
     either a back slash or a  single  circumflex  and  except  for  all
     letters  in  the  word  immediately  following  a less than sign if
     within the range of a .FLAGS CAPITALIZE command.  The range of  the
      Complete Descriptions of the Commands                                 47


           retained  case  shift lock indicated either by the 2 adjacent upper
           case shift characters or by the equivalent .UPPER CASE command  can
           be  terminated  either  by  2  adjacent  back  slashes  or  by  the
           equivalent .LOWER CASE command.  The .FLAGS UPPER CASE command does
           not imply a .BREAK command.

           The upper case shift character specified by the .FLAGS  UPPER  CASE
           command   should  not  currently  be  active  as  some  other  flag
           indication, and should not be  one  of  the  alphabetic  letters  A
           through  Z.   Within  the  range  of the .FLAGS UPPER CASE command,
           underscores must precede all appearances of the  upper  case  shift
           character  which are to be treated like any other character.  If no
           upper case shift character is specified by the  .FLAGS  UPPER  CASE
           command,  then the last character so specified by a previous .FLAGS
           UPPER CASE command will be used, or the circumflex will be used  if
           no character has previously been specified by any .FLAGS UPPER CASE
           command.

           The upper case shift character specified by the .FLAGS  UPPER  CASE
           command  can temporarily be treated as a nonflag character if a .NO
           FLAGS UPPER CASE command is issued, but will  again  become  active
           when  a  .FLAGS UPPER CASE command is issued.  The upper case shift
           character, like all other flag characters in the source  text,  can
           also  temporarily  be treated as a nonflag character if a .NO FLAGS
           or .NO FLAGS ALL command is issued, but will  again  become  active
           when a .FLAGS or .FLAGS ALL command is issued, providing that a .NO
           FLAGS UPPER CASE command has not been issued more recently  than  a
           .FLAGS UPPER CASE command.  Letters which are preceded by the upper
           case shift character in a preface  line  defined  by  the  .PREFACE
           command  or in a field specification defined by the .INSERT command
           are converted to upper case when the  preface  line  or  the  field
           specification  is  defined,  regardless  of  what  the  case  shift
           characters happen  to  be  when  the  preface  line  or  the  field
           specification is used.

           For example, the source text

           .flag capitalize.nofill.output width 55
           .upper case
           ^this \F\O\L\L\O\W\S \a\n .UPPER <case command.
           .lower case
           ^THIS \F\O\L\L\O\W\S a .^L^O^W^E^R <case command.
           ^^^this \F\O\L\L\O\W\S \t\w\o CIRCUM<flex characters.
           \\^THIS \F\O\L\L\O\W\S two ^B^A^C^K <slash characters.
           .flag lower case -.flag upper case+.flag capitalize @
           +++this -F-O-L-L-O-W-S -t-w-o PLUS @sign characters.
           --+THIS -F-O-L-L-O-W-S two +M+I+N+U+S @sign characters.

           would be transformed into the following FORTRAN text when processed
           by this program.

               1 FORMAT(37H This follows an .UPPER CASE command./
                136H This follows a .LOWER CASE command./6H This ,
                234Hfollows two CIRCUMFLEX characters./8H This fo,
                332Hllows two BACK SLASH characters./9H This fol,
                430Hlows two PLUS SIGN characters./11H This follo,
                529Hws two MINUS SIGN characters.)
48                                           FORMAT Program User's Guide


.GROUP line of text to precede groups of FORMAT statements

     The characters which appear to the right of the .GROUP  command  on
     the  same  line are to be copied into the output file on a separate
     line before each FORMAT statement which either is the first  FORMAT
     statement  ever  generated during this use of this program or which
     is the first FORMAT statement generated after a .TEXT command.  The
     character  to  the  immediate right of the .GROUP command must be a
     space.  The line of text which is to be copied into the output file
     before  each  new group of FORMAT statements starts with the second
     character to the right of the .GROUP command, whether or  not  this
     is a printing character, and extends through the rightmost printing
     character on the line.  The line specified by the .GROUP command is
     not  inserted  before  a FORMAT statement which is generated merely
     because the previous FORMAT statement has filled or merely  because
     a  .CONTINUE command has been issued to break the text into another
     FORMAT statement.

     If more than a single line must be inserted before each  new  group
     of  FORMAT statements, then a .DEFINE GROUP command followed by the
     lines of text and then by an .END DEFINITION command should be used
     to  specify  the lines instead.  Regardless of which method is used
     to specify the line or lines, the insertions of the line  or  lines
     are performed similarly.

     The .GROUP command allows the insertion of a line of  FORTRAN  text
     before   each  group  of  FORMAT  statements  which  are  logically
     connected.  For example, this line might cause a transfer  back  to
     the calling program after the completion of the use of the previous
     group  of  FORMAT  statements.   The   rules   which   govern   the
     construction  of  the line which is specified by the .GROUP command
     are identical  to  those  which  are  described  for  the  .PREFACE
     command.   If  both  types  of  lines  are  being inserted before a
     particular FORMAT statement, then the lines defined by  the  .GROUP
     or .DEFINE GROUP command are inserted before those specified by the
     .PREFACE or .DEFINE PREFACE command.

     For example, the source text

     .output width 55.output length 2
     .group       GO TO 1000
     .preface $$$$$ WRITE(ITTY,$=$)
     This is the first text in the example.
     It should be preceded by both a group
     and a preface line.
     .continue
     This text follows a .CONTINUE command.
     .text 100
     This text follows a .TEXT command.
      Complete Descriptions of the Commands                                 49


           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text.

                 GO TO 1000
               1 WRITE(ITTY,2)
               2 FORMAT(38H This is the  first  text  in  the  ex,
                123Hample.   It  should  be)
               3 WRITE(ITTY,4)
               4 FORMAT(38H preceded by both a group and a prefac,
                17He line.)
               5 WRITE(ITTY,6)
               6 FORMAT(38H This text follows a .CONTINUE command,
                11H.)
                 GO TO 1000
             100 WRITE(ITTY,101)
             101 FORMAT(35H This text follows a .TEXT command.)


      .INDENT number of extra spaces to insert beyond left margin

           The .INDENT command indicates that the left end of the next line of
           text which is represented in the FORMAT statement is to be indented
           the indicated number of spaces from the left  margin  which  is  in
           effect  when the first word in the line is found.  The number which
           follows the .INDENT command can be either positive  indicating  the
           insertion  of  extra  initial  spaces,  or  negative indicating the
           deletion of spaces from the left margin.  If the number is missing,
           then   a   positive  indentation  of  5  spaces  is  assumed.   The
           indentation is applied regardless  of  whether  the  next  line  is
           copied  in  no  fill  mode  or is constructed in fill mode.  If the
           .INDENT command was preceded by a .CENTER command, then the .CENTER
           command  is  ignored.  The .INDENT command implies a .BREAK command
           before the following line of source text.

           For example, the source text

           .offset 0.left margin 0.right margin 55.output width 55
           .indent 5.preface       WRITE(1,$)
           The flag characters which are listed below are
           deactivated by the .NO FLAGS command.
           .left margin 5
           .indent -3
           _$##(dollar sign) or whatever character has been
           selected by a .FLAGS INSERT command.
           .indent -3
           _###(number sign) or whatever character has been
           selected by a .FLAGS SPACE command.
           .PROGRAM;      END
50                                           FORMAT Program User's Guide


     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(5X,35HThe flag characters which  are  lis,
          115Hted  below  are/26Hdeactivated by the .NO FLA,
          211HGS command./30H  $  (dollar  sign)  or  whate,
          325Hver  character  has  been/5X,13Hselected by a,
          423H .FLAGS INSERT command./18H  #  (number  sign,
          537H)  or  whatever  character  has  been/5X,2Hse,
          633Hlected by a .FLAGS SPACE command.)
           END

     which would, in turn, generate the following text when run.

          The flag characters which  are  listed  below  are
     deactivated by the .NO FLAGS command.
       $  (dollar  sign)  or  whatever  character  has  been
          selected by a .FLAGS INSERT command.
       #  (number  sign)  or  whatever  character  has  been
          selected by a .FLAGS SPACE command.


.INPUT WIDTH maximum number of characters in any input line

     The .INPUT WIDTH command specifies the maximum number of characters
     which  are  to  be read from in each line in the input file.  If an
     input line contains more than the specified number  of  characters,
     then  the  characters  which  appear  to the right of the specified
     number of characters are ignored.  The input line  width  specified
     by the .INPUT WIDTH command applies to all following lines, but not
     to the line in which it is specified.   The  .INPUT  WIDTH  command
     does not imply a .BREAK command.

     If the number which follows the .INPUT WIDTH command  is  unsigned,
     then  this  number will be used as the line width for the following
     input lines.  If the number which follows the .INPUT WIDTH  command
     is  signed,  then  the previous input line width is adjusted by the
     indicated amount.  The input line width is 132 when this program is
     started.  The input line width cannot exceed 300 characters.

     For example, the source text

     .input width 5.text 10
     12345This is not read
     .iw+5This is not read
     1234567890This is not read

     would be transformed into the following FORTRAN text when processed
     by this program.

        10 FORMAT(17H 12345 1234567890)
      Complete Descriptions of the Commands                                 51


      .INSERT output field specification to replace next $ signs

           The .INSERT command specifies the group of characters which  is  to
           replace  the  next  group  of contiguous dollar signs which are not
           preceded by underscores in the text being represented in the FORMAT
           statements.   The  character  to the immediate right of the .INSERT
           command must be a space.  The group of characters which  is  to  be
           inserted  starts  with  the  second  character  to the right of the
           .INSERT command, whether or not this is a printing  character,  and
           extends  through  the rightmost printing character on the line.  If
           an .INSERT command has not been issued, or if no printing character
           appears to the right of the .INSERT command, then the next group of
           contiguous dollar signs is removed, but the group of characters  to
           be  inserted  is  of  zero  length so no characters are inserted in
           place of the group of dollar signs.  If 2 or more .INSERT  commands
           have specified groups of characters which have not yet been used to
           replace groups of contiguous dollar signs,  then  these  groups  of
           characters  are  applied  in  the order in which they were defined.
           Unless the lengths of 3 arrays in this program  are  increased,  no
           more  than 50 groups of characters having an aggregate length of no
           more than 500 characters can have been specified but remain  unused
           at  any  time.   All  unused  groups of characters are discarded if
           either a .NO INSERT command or  a  .TEXT  command  is  encountered.
           Neither  the  .INSERT  command nor the .NO INSERT command implies a
           .BREAK command.

           The text on either side of the group  of  contiguous  dollar  signs
           being   replaced  is  represented  in  H  or  apostrophe  notation,
           whichever has been selected by the .USE  command.   The  characters
           which  are  being  inserted  will be interpreted as an output field
           specification when the FORMAT statements  are  used.   If  in  fill
           mode,  the  number  of  dollar signs in the group being replaced is
           used in determining the length of the line  being  accumulated,  so
           the number of dollar signs in the group being replaced should equal
           the number of characters which will  be  generated  by  the  output
           field  specification  when  the  FORMAT  statements  are used.  For
           example, 9 dollar signs would be used to mark the location  in  the
           text  at  which a 9 character date representation such as 12-Jan-80
           is  to  be  generated  using  a  1I2,1H-,1A3,1H-,1I2  output  field
           specification.   Commas are inserted on either side of the original
           location of the group of dollar signs so the .INSERT command should
           not  specify  commas  at the start and at the end of the text being
           inserted.  The text being inserted  can  be  split  onto  the  next
           continuation  line  of  the FORMAT statement following any comma in
           the text being inserted.

           Within the text being inserted, an underscore character, which will
           not  be  copied  into  the  FORMAT statement, can appear before any
           character, such as a comma, space, number  sign,  circumflex,  back
           slash,  less  than  sign  (if  in  flag capitalize mode) or another
           underscore, which is to be treated as a nonflag  character.   If  a
           comma  in the text being inserted is not at a location at which the
           text being inserted can be split onto the next continuation line of
           the  FORMAT  statement,  then  the  comma  should be preceded by an
           underscore.  If the text being inserted is to  end  with  a  space,
           then  this  space should be preceded by an underscore.  The .INSERT
           command cannot be followed on the same line either by a comment  or
52                                           FORMAT Program User's Guide


     by  another  command,  so  semicolons and exclamation points in the
     text to be inserted do not need to be preceded by underscores.

     For example, the source text

     .program 10
           DATA KOUNT,IDAY,IYEAR/12345,12,80/
           DATA IMONTH/3HJan/
           WRITE(1,$)KOUNT,IDAY,IMONTH,IYEAR
     .insert 1I5
     .insert 1I2,1H-,1A3,1H-,1I2
     .continue.output width 55
     $$$$$ items were produced on $$$$$$$$$.
     .program
           END

     would, when processed by this  program,  be  transformed  into  the
     following proof file

     .program 10
           DATA KOUNT,IDAY,IYEAR/12345,12,80/
           DATA IMONTH/3HJan/
           WRITE(1,10)KOUNT,IDAY,IMONTH,IYEAR
     .insert 1I5
     .insert 1I2,1H-,1A3,1H-,1I2
     .continue
     .output width 55
        10 FORMAT(
     1I5
     1I2,1H-,1A3,1H-,1I2
      $$$$$ items were produced on $$$$$$$$$.
     .program
           END

     and would also be transformed into the following FORTRAN text

           DATA KOUNT,IDAY,IYEAR/12345,12,80/
           DATA IMONTH/3HJan/
           WRITE(1,10)KOUNT,IDAY,IMONTH,IYEAR
        10 FORMAT(1H ,1I5,24H items were produced on ,1I2,
          11H-,1A3,1H-,1I2,1H.)
           END

     which would, in turn, generate the following text when run.

      12345 items were produced on 12-Jan-80.


.JUSTIFY

     The .JUSTIFY command indicates that the lines  of  text  which  are
     constructed  in fill mode are to be extended to the right margin by
     the addition of extra spaces between the words.  The  extra  spaces
     are added between the words starting at the right end in the first,
     third and every other line following a .BREAK command or  following
     any  command which implies a .BREAK command, and are added starting
     at the left in the alternate lines.   Extra  spaces  are,  however,
      Complete Descriptions of the Commands                                 53


           never  inserted in the final line before a .BREAK command or before
           any command which implies a .BREAK command.  The  .JUSTIFY  command
           implies a .BREAK command

           A .JUSTIFY command is assumed to be in effect when this program  is
           started.   A  .NO JUSTIFY command should be issued instead if lines
           which are constructed in fill mode are not required to have exactly
           the  same  lengths,  but  the lines are still to be filled with the
           most words which do not extend beyond the right margin.  If  a  .NO
           JUSTIFY  command  is  in effect, then words are separated by single
           spaces and sentences by two spaces.  A .JUSTIFY or  a  .NO  JUSTIFY
           command  issued  within  the range of a .PROGRAM command applies to
           the lines of text constructed in fill mode following the next .TEXT
           or  .CONTINUE  command.  A .JUSTIFY or a .NO JUSTIFY command issued
           within the range of a .NO FILL command applies to the lines of text
           constructed following the next .FILL command.

           For example, the source text

           .output width 55.right margin 55.offset 0
           .no justify.preface       WRITE(1,$)
           The .JUSTIFY and the .NO JUSTIFY commands do not
           apply to text which is within the range of .NO FILL
           commands  and does not apply to the text which is
           within the range of the .PROGRAM command.
           .justify.skip
           The .JUSTIFY and the .NO JUSTIFY commands do not
           apply to text which is within the range of .NO FILL
           commands  and does not apply to the text which is
           within the range of the .PROGRAM command.
           .nofill.skip
           The .JUSTIFY and the .NO JUSTIFY commands do not
           apply to text which is within the range of .NO FILL
           commands  and does not apply to the text which is
           within the range of the .PROGRAM command.
           .program;      END

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(1,1)
               1 FORMAT(38HThe .JUSTIFY and the .NO JUSTIFY comma,
                116Hnds do not apply/25Hto text which is within t,
                229Hhe range of .NO FILL commands/12Hand does not,
                338H apply to the text which is within the/4Hrang,
                426He of the .PROGRAM command.//14HThe .JUSTIFY a,
                541Hnd the .NO JUSTIFY commands do not  apply/1Ht,
                645Ho  text which is within the range of .NO FILL,
                79H commands/33Hand does not apply to the  text  ,
                822Hwhich  is  within  the/19Hrange of the .PROGR,
                911HAM command.//29HThe .JUSTIFY and the .NO JUST,
                119HIFY commands do not/22Happly to text which is,
                229H within the range of .NO FILL/12Hcommands  an,
                337Hd does not apply to the text which is/5Hwithi,
                436Hn the range of the .PROGRAM command.)
                 END
54                                           FORMAT Program User's Guide


     which would, in turn, generate the following text when run.

     The .JUSTIFY and the .NO JUSTIFY commands do not apply
     to text which is within the range of .NO FILL commands
     and does not apply to the text which is within the
     range of the .PROGRAM command.

     The .JUSTIFY and the .NO JUSTIFY commands do not  apply
     to  text which is within the range of .NO FILL commands
     and does not apply to the  text  which  is  within  the
     range of the .PROGRAM command.

     The .JUSTIFY and the .NO JUSTIFY commands do not
     apply to text which is within the range of .NO FILL
     commands  and does not apply to the text which is
     within the range of the .PROGRAM command.


.LEADING

     The .LEADING command indicates that blank lines which are requested
     prior  to  the  specification of any text which is to appear in the
     FORMAT statements, either when this program  is  first  started  or
     following a .TEXT command, are to be represented in the next FORMAT
     statement if an .EJECT command is issued or if some text  which  is
     to  be  represented  in the FORMAT statement is actually specified.
     Such leading blank lines can be requested by a .BLANK  or  a  .SKIP
     command.   Leading  blank  lines  are  discarded  if  a .NO LEADING
     command is in effect or if a .LEADING command has not been  issued.
     Neither  the .LEADING command nor the .NO LEADING command implies a
     .BREAK command.

     For example, the source text

     .spacing 2.output width 55.skip
     The quick red fox jumps over the lazy brown dog, then
     runs into the forest
     .text.leading.skip
     The quick red fox jumps over the lazy brown dog, then
     runs into the forest
     .text.trailing.skip
     The quick red fox jumps over the lazy brown dog, then
     runs into the forest
     .text.no leading.skip
     The quick red fox jumps over the lazy brown dog, then
     runs into the forest
      Complete Descriptions of the Commands                                 55


           would be transformed into the following FORTRAN text when processed
           by this program.

               1 FORMAT(38H The quick red fox jumps over the lazy,
                123H brown dog,  then  runs//16H into the forest)
               2 FORMAT(//36H The quick red fox jumps over the la,
                125Hzy brown dog,  then  runs//15H into the fores,
                21Ht)
               3 FORMAT(//36H The quick red fox jumps over the la,
                125Hzy brown dog,  then  runs//15H into the fores,
                21Ht/)
               4 FORMAT(38H The quick red fox jumps over the lazy,
                123H brown dog,  then  runs//16H into the forest/)


      .LEFT MARGIN number of spaces to left of text

           The .LEFT MARGIN command specifies the number of spaces  which  are
           to  be  inserted to the left of each of the lines of text which are
           being represented in the FORMAT statements in  either  fill  or  no
           fill  modes.  The left margin specified by the .LEFT MARGIN command
           is in addition to the leftmost  spaces  specified  by  the  .OFFSET
           command  or  in addition to the single left space which is obtained
           if neither the .OFFSET command nor the .NO OFFSET command has  been
           issued.   An .INDENT or .PARAGRAPH command can be issued prior to a
           particular paragraph to temporarily change the left margin for  the
           leading  line  in  that paragraph.  If the number which follows the
           .LEFT MARGIN command is unsigned, then this number will be used  as
           the  left  margin.   If  the  number which follows the .LEFT MARGIN
           command is signed, then the previous left margin is adjusted by the
           indicated  amount.   If  no number follows the .LEFT MARGIN command
           then the left margin is reset to zero.  The  .LEFT  MARGIN  command
           implies a .BREAK command.

           If the lines of text are being constructed in fill mode,  then  the
           left  margin specified by the .LEFT MARGIN command should be to the
           left of the right margin specified by the .RIGHT MARGIN command  or
           to  the  left  of column 60 if a .RIGHT MARGIN command has not been
           issued.  The right margin is ignored if the lines of text are being
           copied  in  no  fill  mode.  The only spaces which are inserted are
           those which are specified by the .OFFSET command if a signed number
           following  the  .LEFT  MARGIN  command causes the left margin to be
           negative.
56                                           FORMAT Program User's Guide


     For example, the source text

     .preface       WRITE(1,$)
     .output width 55;Default left margin and default offset
     .left margin 10 ;Left margin 10 obtained as .lm 10
     .left margin -5 ;Left margin 5 obtained as .lm-5
     .left margin -5 ;Left margin 0 obtained as .lm-5
     .left margin -5 ;Left margin -5 which is treated as 0
     .left margin +5 ;Left margin 0 obtained as .lm+5
     .left margin +5 ;Left margin 5 obtained as .lm+5
     .offset 6       ;Unchanged left margin and offset 6
     .left margin 10 ;Left margin 10 obtained as .lm 10
     .left margin -5 ;Left margin 5 obtained as .lm-5
     .left margin -5 ;Left margin 0 obtained as .lm-5
     .left margin -5 ;Left margin -5 which is treated as 0
     .left margin +5 ;Left margin 0 obtained as .lm+5
     .left margin +5 ;Left margin 5 obtained as .lm+5
     .program ;      END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(38H Default left margin and default offse,
          11Ht/11X,33HLeft margin 10 obtained as .lm 10/6X,
          231HLeft margin 5 obtained as .lm-5/10H Left marg,
          322Hin 0 obtained as .lm-5/19H Left margin -5 whi,
          418Hch is treated as 0/23H Left margin 0 obtained,
          59H as .lm+5/6X,30HLeft margin 5 obtained as .lm+,
          61H5/11X,34HUnchanged left margin and offset 6/9X,
          77X,33HLeft margin 10 obtained as .lm 10/11X,2HLe,
          829Hft margin 5 obtained as .lm-5/6X,9HLeft marg,
          922Hin 0 obtained as .lm-5/6X,16HLeft margin -5 w,
          120Hhich is treated as 0/6X,18HLeft margin 0 obta,
          213Hined as .lm+5/11X,24HLeft margin 5 obtained a,
          37Hs .lm+5)
           END

     which would, in turn, generate the following text when run.

      Default left margin and default offset
                Left margin 10 obtained as .lm 10
           Left margin 5 obtained as .lm-5
      Left margin 0 obtained as .lm-5
      Left margin -5 which is treated as 0
      Left margin 0 obtained as .lm+5
           Left margin 5 obtained as .lm+5
                Unchanged left margin and offset 6
                     Left margin 10 obtained as .lm 10
                Left margin 5 obtained as .lm-5
           Left margin 0 obtained as .lm-5
           Left margin -5 which is treated as 0
           Left margin 0 obtained as .lm+5
                Left margin 5 obtained as .lm+5
      Complete Descriptions of the Commands                                 57


      .LOWER CASE

           The .LOWER CASE command indicates that all  upper  case  alphabetic
           letters which are not specially marked are to be converted to their
           lower case forms in the source text which follows the  end  of  the
           command or, if the .LOWER CASE command is followed by a comment, in
           the  source  text  which  follows  the  comment.   The  lower  case
           conversion  selected  by  the .LOWER CASE command is not applied to
           any  letter  which  is  immediately  preceded  by   an   underscore
           indicating  that  its case is to be retained, is not applied to any
           letter which is immediately preceded  by  a  circumflex  indicating
           that  it  is  to  be converted to upper case, and is not applied to
           letters which are both within the  range  of  a  .FLAGS  CAPITALIZE
           command  and  within  a  word which is preceded by a less than sign
           indicating that these letters are to be converted  to  upper  case.
           The  .LOWER  CASE  command  is  equivalent  to  the appearance of 2
           consecutive back slashes except that the 2 back slashes can  appear
           anywhere and that the lower case conversion indicated by the 2 back
           slashes is applied immediately to all of the following  text.   The
           cases  of  alphabetic  letters  are retained unless the .LOWER CASE
           command has been issued or unless 2 consecutive back  slashes  have
           been  found.   The retention of cases can also be reselected either
           by the .UPPER CASE command or by the appearance  of  2  consecutive
           circumflexes.   Neither the .LOWER CASE command nor the .UPPER CASE
           command implies a .BREAK command.

           For example, the source text

           .nofill.output width 55.preface       WRITE(1,$)
           .noflags.flags capitalize;noflags
             UPPER lower U^P\P_ER l^o\w_er
             U<PPER l<ower U<PPE<R l<owe<r <U^P\P_ER <l^o\w_er
           .lower case.flags;lower case
             UPPER lower U^P\P_ER l^o\w_er
             U<PPER l<ower U<PPE<R l<owe<r <U^P\P_ER <l^o\w_er
           .upper case;upper case
             UPPER lower U^P\P_ER l^o\w_er
             U<PPER l<ower U<PPE<R l<owe<r <U^P\P_ER <l^o\w_er
           .program;      END

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(1,1)
               1 FORMAT(8H noflags/3X,24HUPPER lower U^P\P_ER l^o,
                15H\w_er/3X,34HU<PPER l<ower U<PPE<R l<owe<r <U^P,
                215H\P_ER <l^o\w_er/11H lower case/3X,9Hupper low,
                314Her uPpEr lOwer/3X,24HuPPER lOWER uPPEr lOWEr ,
                411HUPpER LOweR/11H upper case/3X,12HUPPER lower ,
                511HUPpER lOwer/3X,27HUPPER lOWER UPPER lOWEr UPp,
                68HER LOweR)
                 END
58                                           FORMAT Program User's Guide


     which would, in turn, generate the following text when run.

      noflags
        UPPER lower U^P\P_ER l^o\w_er
        U<PPER l<ower U<PPE<R l<owe<r <U^P\P_ER <l^o\w_er
      lower case
        upper lower uPpEr lOwer
        uPPER lOWER uPPEr lOWEr UPpER LOweR
      upper case
        UPPER lower UPpER lOwer
        UPPER lOWER UPPER lOWEr UPpER LOweR


.MASK text to be superimposed onto each output line

     The printing characters which follow the .MASK command on the  same
     line  replace  the  nonquoted  spaces  to  the right of the initial
     offset in each line of text which is copied  in  no  fill  mode  or
     which  is  constructed  in fill mode.  All printing characters, all
     spaces which were preceded by underscores or which were represented
     by  number  signs,  and  all initial spaces requested by an .OFFSET
     command or by the default .OFFSET 1, are  left  unchanged  in  each
     line  of  text  which is represented in the FORMAT statements.  The
     character to the immediate right of the .MASK  command  must  be  a
     space.   The  group  of characters which is to be superimposed onto
     each output line starts with the second character to the  right  of
     the .MASK command, whether or not this is a printing character, and
     extends through the rightmost printing character on the  line.   No
     characters  are  superimposed  onto  the  output lines if the .MASK
     command is issued without any following characters, or if no  .MASK
     command  has  yet  been  issued,  or if a .NO MASK command has been
     issued more recently than a .MASK command.  A .MASK command  issued
     within  the  range of a .PROGRAM command applies to the source text
     following the next .TEXT or .CONTINUE command.  Neither  the  .MASK
     command  nor  the  .NO  MASK  command  implies a .BREAK command.  A
     .BREAK or .EJECT command should be issued before the .MASK  or  .NO
     MASK  command  unless  it  is really desired to change the template
     line which is to be applied to the line which  is  currently  being
     accumulated  in  fill mode or to the blank lines which have not yet
     been written out to the FORMAT statements.

     Within the text specified  by  the  .MASK  command,  an  underscore
     character,  which will not be copied into the FORMAT statement, can
     appear before any character, such as  a  number  sign,  circumflex,
     back  slash, less than sign (if in flag capitalize mode) or another
     underscore, which is to be treated as  a  nonflag  character.   The
     .MASK  command  cannot  be  followed  on  the same line either by a
     comment or by another command, so semicolons and exclamation points
     in  the  text  to  be  superimposed  do  not need to be preceded by
     underscores.
      Complete Descriptions of the Commands                                 59


           For example, the source text

           .left margin 2.right margin 13.preface       WRITE(1,$)
           .carriage 1.offset 5.copy 17,2.mask *             *
           .indent -1.output width 55;=============
           .insert 3Hhow
           .insert 5H.MASK
           .insert 3Hand
           .insert 5H.COPY
           .skip;This shows $$$ $$$$$ $$$ $$$$$ commands work.
           .skip.indent -1;=============
           .break.no mask.no copy.skip;Not in range of either.
           .program;      END

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(1,1)
               1 FORMAT(38H1    *=============*  *=============* ,
                116H *=============*/5X,1H*,13X,4H*  *,13X,4H*  *,
                213X,1H*/5X,34H* This  shows *  * This  shows *  ,
                315H* This  shows */5X,2H* ,3Hhow,3X,5H.MASK,2H *,
                44H  * ,3Hhow,3X,5H.MASK,6H *  * ,3Hhow,3X,
                55H.MASK,2H */5X,2H* ,3Hand,3X,5H.COPY,6H *  * ,
                63Hand,3X,5H.COPY,6H *  * ,3Hand,3X,5H.COPY,2H */
                75X,42H* commands    *  * commands    *  * comman,
                87Hds    */5X,7H* work.,7X,10H*  * work.,7X,3H*  ,
                97H* work.,7X,1H*/5X,1H*,13X,4H*  *,13X,4H*  *,9X,
                14X,1H*/5X,35H*=============*  *=============*  *,
                214H=============*//7X,3HNot,6X,2Hin/7X,7Hrange  ,
                34H  of/7X,7Heither.)
                 END

           which would, in turn, generate the following text when run.

           1    *=============*  *=============*  *=============*
                *             *  *             *  *             *
                * This  shows *  * This  shows *  * This  shows *
                * how   .MASK *  * how   .MASK *  * how   .MASK *
                * and   .COPY *  * and   .COPY *  * and   .COPY *
                * commands    *  * commands    *  * commands    *
                * work.       *  * work.       *  * work.       *
                *             *  *             *  *             *
                *=============*  *=============*  *=============*

                  Not      in
                  range    of
                  either.


      .NO CARRIAGE

           The first character in each line of text which  is  generated  when
           the  resulting FORMAT statements are used can be interpreted by the
           FORTRAN operating system to  select  the  carriage  motion  on  the
           output  device  to  which  the  text  is written.  The .NO CARRIAGE
           command indicates that the leftmost character in the line  of  text
60                                           FORMAT Program User's Guide


     which  is  currently  being  constructed  for representation in the
     FORMAT statements, and in each of the  subsequent  lines  of  text,
     will  be  a  space  if  a  positive offset has been selected by the
     combination of .OFFSET, .LEFT  MARGIN  and  .INDENT  or  .PARAGRAPH
     commands,  and  completely  blank  lines will be represented in the
     FORMAT statements by consecutive slashes.  The .NO CARRIAGE command
     terminates the insertion of the carriage control character, if any,
     selected by the previous .CARRIAGE command.   No  carriage  control
     character is in effect when this program is first started.  Neither
     the .NO CARRIAGE command nor the .CARRIAGE command implies a .BREAK
     command.   A  .BREAK command, or some other command which implies a
     .BREAK command, should usually be issued before  the  .NO  CARRIAGE
     command  since,  if the lines of text are being constructed in fill
     mode, the carriage control character is applied to the current line
     of text only after this line of text has otherwise been completed.

     For example, the source text

     .carriage 1,*.right margin 54.output width 55
     .preface       WRITE(1,$)
     The .NO CARRIAGE command terminates the generation of
     the carriage control character specified by the
     previous .CARRIAGE command.
     .break.no carriage
     The .NO CARRIAGE command terminates the generation of
     the carriage control character specified by the
     previous .CARRIAGE command.
     .program;      END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(38H1The .NO CARRIAGE command terminates t,
          117Hhe generation  of/24H*the   carriage  control,
          231H  character  specified  by  the/10H*previous ,
          318H.CARRIAGE command./23H The .NO CARRIAGE comma,
          432Hnd terminates the generation  of/9H the   ca,
          545Hrriage  control  character  specified  by  th,
          61He/28H previous .CARRIAGE command.)
           END

     which would, in turn, generate the following text when run.

     1The .NO CARRIAGE command terminates the generation  of
     *the   carriage  control  character  specified  by  the
     *previous .CARRIAGE command.
      The .NO CARRIAGE command terminates the generation  of
      the   carriage  control  character  specified  by  the
      previous .CARRIAGE command.
      Complete Descriptions of the Commands                                 61


      .NO COPY

           The .NO COPY command indicates  that  the  text  specified  by  the
           source  file is to be represented only once in the resulting FORMAT
           statements instead of being duplicated to form 2 or  more  parallel
           columns containing the same text.  A .NO COPY command issued within
           the range of a .COPY  command  terminates  the  production  of  the
           parallel columns selected by the .COPY command.  A .NO COPY command
           issued within the range of a .PROGRAM command applies to the source
           text following the next .TEXT or .CONTINUE command.  Both the .COPY
           command and the .NO COPY command imply a .BREAK command.

           For example, the source text

           .right margin 20.copy 25,1.carriage 1,*.offset 3
           .output width 55.preface       WRITE(1,$)
           The .NO COPY command terminates the range of the
           previous .COPY command.
           .no copy
           Both the .COPY command and the .NO COPY command imply
           a .BREAK command
           .program;      END

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(1,1)
               1 FORMAT(38H1  The .NO COPY command     The .NO CO,
                110HPY command/31H*  terminates the range     ter,
                217Hminates the range/24H*  of   the    previous ,
                34X,20Hof   the    previous/17H*  .COPY command.,
                411X,14H.COPY command./23H*  Both    the    .COPY/
                523H*  command  and the .NO/18H*  COPY command im,
                65Hply a/17H*  .BREAK command)
                 END

           which would, in turn, generate the following text when run.

           1  The .NO COPY command     The .NO COPY command
           *  terminates the range     terminates the range
           *  of   the    previous     of   the    previous
           *  .COPY command.           .COPY command.
           *  Both    the    .COPY
           *  command  and the .NO
           *  COPY command imply a
           *  .BREAK command


      .NO FILL

           The .NO FILL command indicates that each line of source text  which
           is  not  within  the range of a .PROGRAM command and which does not
           begin with a period is to be shifted to the right by the number  of
           spaces which has been selected by the combination of .OFFSET, .LEFT
           MARGIN and .INDENT or  .PARAGRAPH  commands,  and  is  then  to  be
           represented  in the FORMAT statements with the same number of words
           per line and with the same number of spaces, in addition  to  those
62                                           FORMAT Program User's Guide


     inserted  at  the left, as in the source text.  The right margin is
     ignored.  The .NO FILL command terminates the range of the previous
     .FILL  command  which  would  have  caused  each line of text to be
     filled with as many words as will fit on the line when separated by
     at least single spaces.  A .FILL command is assumed to be in effect
     when this program is started.  A .NO FILL command issued within the
     range  of  a  .PROGRAM command applies to the source text following
     the next .TEXT or .CONTINUE statement.  A .JUSTIFY, .NO JUSTIFY  or
     .RIGHT MARGIN command issued within the range of a .NO FILL command
     applies to the source text following the next .FILL command.   Both
     the .NO FILL command and the .FILL command imply a .BREAK command.

     For example, the source text

     .output width 55.right margin 55.offset 0
     .nofill.preface       WRITE(1,$)
       The .NO FILL        command is       not   equivalent
       to  the combination of      a        .FILL command
       and a   .NO         JUSTIFY command.
     .fill
       The .NO FILL        command is       not   equivalent
       to  the combination of      a        .FILL command
       and a   .NO         JUSTIFY command.
     .no   justify
       The .NO FILL        command is       not   equivalent
       to  the combination of      a        .FILL command
       and a   .NO         JUSTIFY command.
     .program;      END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(14H  The .NO FILL,8X,10Hcommand is,7X,1Hn,
          115Hot   equivalent/24H  to  the combination of,
          26X,1Ha,8X,13H.FILL command/13H  and a   .NO,9X,
          316HJUSTIFY command./25HThe  .NO  FILL  command  ,
          430His  not  equivalent   to   the/11Hcombination,
          544H  of  a  .FILL  command  and  a  .NO JUSTIFY/
          68Hcommand./34HThe .NO FILL command is not equiva,
          711Hlent to the/30Hcombination of a .FILL command,
          818H and a .NO JUSTIFY/8Hcommand.)
           END
      Complete Descriptions of the Commands                                 63


           which would, in turn, generate the following text when run.

             The .NO FILL        command is       not   equivalent
             to  the combination of      a        .FILL command
             and a   .NO         JUSTIFY command.
           The  .NO  FILL  command  is  not  equivalent   to   the
           combination  of  a  .FILL  command  and  a  .NO JUSTIFY
           command.
           The .NO FILL command is not equivalent to the
           combination of a .FILL command and a .NO JUSTIFY
           command.
           command.
           The .NO FILL command is not equivalent to the
           combination of a .FILL command and a .NO JUSTIFY
           command.


      .NO FLAGS
           or
      .NO FLAGS ALL

           The .NO FLAGS ALL command indicates that the flag characters  which
           are  listed  below  are  to  be inactive in the source test.  Every
           appearance of these flag characters is to be left unchanged and  is
           to  be  treated  like  the appearance of any other nonflag printing
           character.

             $  (dollar sign) or whatever character  has  been  most  recently
                selected by a .FLAGS INSERT command.
             \  (back slash) or whatever  character  has  been  most  recently
                selected by a .FLAGS LOWER CASE command.
             _  (underscore) or whatever  character  has  been  most  recently
                selected by a .FLAGS QUOTE command.
             #  (number sign) or whatever character  has  been  most  recently
                selected by a .FLAGS SPACE command.
             ^  (circumflex) or whatever  character  has  been  most  recently
                selected by a .FLAGS UPPER CASE command.
             <  (less than sign) or whatever character has been most  recently
                selected  by a .FLAGS CAPITALIZE command.  This flag character
                is initially inactive and will remain inactive unless a .FLAGS
                CAPITALIZE command is issued.

           All flag characters which were initially active, or which have been
           individually  activated  by  the corresponding .FLAGS commands, and
           which have not been individually deactivated by  the  corresponding
           .NO  FLAGS commands, will be reactivated if a subsequent .FLAGS ALL
           command is issued.  The .FLAGS ALL command and the  .NO  FLAGS  ALL
           command  do  not  change  the interpretation of the flag characters
           which identify and terminate commands.  The flag  characters  which
           are  to  be interpreted and acted upon in a preface line defined by
           the .PREFACE command or in a field  specification  defined  by  the
           .INSERT  command  must  be  those which are active when the preface
           line or the field specification is defined, regardless of what flag
           characters  happen  to be active when the preface line or the field
           specification is used.  Neither the .FLAGS ALL command nor the  .NO
           FLAGS ALL command implies a .BREAK command.
64                                           FORMAT Program User's Guide


.NO FLAGS CAPITALIZE

     Every appearance of the less than sign, or  of  whatever  character
     has  been most recently selected by a .FLAGS CAPITALIZE command, is
     to be left unchanged and is to be treated like  the  appearance  of
     any  other character.  No flag character is to be available to mark
     words  in  which  every  letter  is   to   be   capitalized.    The
     capitalization  flag  character  can be reactivated by a subsequent
     .FLAGS CAPITALIZE command.  No  capitalization  flag  character  is
     active when this program is started.


.NO FLAGS CONTROL

     The source text contains no additional commands.  Lines which start
     with  periods,  or  with  whatever character has been most recently
     selected by a .FLAGS CONTROL command, are not to be interpreted  as
     commands.  This command probably should not be issued.


.NO FLAGS FENCE

     Every appearance in a command line of the semicolon, or of whatever
     character  has  been  most  recently  selected  by  a  .FLAGS FENCE
     command, is to be treated as a part of the argument list or comment
     in  which  it  appears.  No flag character is available which, when
     used in a command line, causes the text to the right  of  the  flag
     character  to  be treated as though this text were on the following
     line.  The separation  flag  character  can  be  reactivated  by  a
     subsequent .FLAGS FENCE command.


.NO FLAGS INSERT

     Every appearance of the dollar sign, or of whatever  character  has
     been  most  recently  selected by a .FLAGS INSERT command, is to be
     left unchanged and is to be treated  like  the  appearance  of  any
     other  character.  No flag character is available to mark locations
     in preface lines and in program text at which the statement numbers
     of  the  next  FORMAT  statements  are  to  be  inserted.   No flag
     character  is  available  to  mark  locations  in  the  text  being
     represented   in   the   FORMAT   statements  at  which  the  field
     specifications defined by the .INSERT command are to  be  inserted.
     The  insertion  flag  character  can be reactivated by a subsequent
     .FLAGS INSERT command.


.NO FLAGS LOWER CASE

     Every appearance of the back slash, or of  whatever  character  has
     been  most  recently selected by a .FLAGS LOWER CASE command, is to
     be left unchanged and is to be treated like the appearance  of  any
     other character.  No flag character is available to mark individual
     alphabetic letters which are to be converted to  their  lower  case
     forms.   The  lower  case  shift  character can be reactivated by a
     subsequent .FLAGS LOWER CASE command.
      Complete Descriptions of the Commands                                 65


      .NO FLAGS QUOTE

           Every appearance of the underscore, or of  whatever  character  has
           been  most  recently  selected  by a .FLAGS QUOTE command, is to be
           left unchanged and is to be treated  like  the  appearance  of  any
           other  character.  No flag character is available which can precede
           other characters which  are  to  be  treated  as  nonflag  printing
           characters.   The  quotation flag character can be reactivated by a
           subsequent .FLAGS QUOTE command.


      .NO FLAGS REMARK

           Every appearance in a command line of the exclamation point, or  of
           whatever  character  has  been  most  recently selected by a .FLAGS
           REMARK command, is to be treated as a part of the argument list  in
           which it appears.  No flag character is available which can be used
           in command lines to indicate that the following text,  through  the
           end  of  the  line or through the next appearance of a semicolon on
           the same line, is to be treated as a comment and is to be  ignored.
           The remark flag character can be reactivated by a subsequent .FLAGS
           REMARK command.


      .NO FLAGS SPACE

           Every appearance of the number sign, or of whatever  character  has
           been  most  recently  selected  by a .FLAGS SPACE command, is to be
           left unchanged and is to be treated  like  the  appearance  of  any
           other  character.  No flag character is available which can be used
           to indicate the location of a space  which  is  to  be  treated  as
           though  it were a printing character.  However, a space preceded by
           an underscore can still  be  used  for  this  purpose.   The  space
           holding  character  can be reactivated by a subsequent .FLAGS SPACE
           command.


      .NO FLAGS UPPER CASE

           Every appearance of the circumflex, or of  whatever  character  has
           been  most  recently selected by a .FLAGS UPPER case command, is to
           be left unchanged and is to be treated like the appearance  of  any
           other character.  No flag character is available to mark individual
           alphabetic letters which are to be converted to  their  upper  case
           forms.   The  upper  case  shift  character can be reactivated by a
           subsequent .FLAGS UPPER CASE command.


      .NO GROUP
           The .NO GROUP command indicates that the  FORTRAN  text  which  was
           specified  by  a previous .GROUP or .DEFINE GROUP command is not to
           be generated before the first FORMAT statement produced after  each
           .TEXT  command.   A  .RESUME  GROUP command can, however, be issued
           later to resume the insertion of the same FORTRAN text before  each
           new  group of FORMAT statements.  Neither the .NO GROUP command nor
           the .GROUP command nor the .DEFINE GROUP command implies  either  a
           .BREAK or a .CONTINUE command.
66                                           FORMAT Program User's Guide


     The .NO GROUP command is not equivalent to a .GROUP command  issued
     without  any  text to its right, since the latter would discard the
     FORTRAN text which previously was inserted before each new group of
     FORMAT  statements.   After the .NO GROUP command been issued, this
     FORTRAN text still occupies the  storage  reserved  for  the  lines
     which  can also be defined by the .PREFACE or .DEFINE PREFACE, .TOP
     or .DEFINE TOP, and .BOTTOM  or  .DEFINE  BOTTOM  commands.   These
     commands  can  define  a  total of no more than 30 lines containing
     together no more than 500 characters.

     The FORTRAN text specified by the .GROUP  command  or  the  .DEFINE
     GROUP command is not generated until enough lines of text have been
     constructed to fill the first line of the first  FORMAT  statement.
     If  a  .NO GROUP command is issued before enough lines of text have
     been constructed to completely fill the first  line  of  the  first
     FORMAT  statement, then the FORTRAN text will not be generated even
     if this FORTRAN text was active  during  the  construction  of  the
     first  line  of  text which is represented in the FORMAT statement.
     Consequently, it is better to issue a .GROUP,  .DEFINE  GROUP,  .NO
     GROUP,  or  .RESUME  GROUP  command  after  the .TEXT, .CONTINUE or
     .PROGRAM command which terminates the  previous  FORMAT  statement,
     rather than before.

     For example, the source text

     .group       GO TO 1000
     .preface $$$$$ WRITE(1,$=$)
     This is the first line
     .text
     This is the second line
     .text.no group
     This is the third line

     would be transformed into the following FORTRAN text when processed
     by this program.

           GO TO 1000
         1 WRITE(1,2)
         2 FORMAT(23H This is the first line)
           GO TO 1000
         3 WRITE(1,4)
         4 FORMAT(24H This is the second line)
         5 WRITE(1,6)
         6 FORMAT(23H This is the third line)


.NO INSERT

     The .NO INSERT command indicates  that  all  groups  of  characters
     which have been specified by the .INSERT command since this program
     was started, or since the last .NO  INSERT  or  .TEXT  command  was
     issued,  and which have not yet been used, are to be discarded.  If
     a group of contiguous dollar signs is encountered in the text which
     is  being  represented in the FORMAT statements before a subsequent
     .INSERT command is issued, then the group of dollar signs  will  be
     removed  but  nothing  will  be  inserted  into its place.  The .NO
     INSERT command  is  usually  not  necessary  since  the  groups  of
      Complete Descriptions of the Commands                                 67


           characters  which  are  defined  by  the .INSERT command are always
           discarded after use anyway.

           Neither the .NO INSERT command nor the .INSERT  command  implies  a
           .BREAK  command.   Insertions  into  lines  of text which are being
           constructed in fill mode are made after the line has otherwise been
           completed,  either when a command which implies a .BREAK command is
           encountered or when the first word which would overflow the line is
           encountered.   If  the .NO INSERT command is issued before the line
           has been completed, then  any  groups  of  characters  which  would
           otherwise  have  been available for insertion into the line will be
           discarded instead.

           For example, the source text

           .output width 55
           .insert 7Hcommand
           .insert 6Hgroups
           .insert 3Hthe
           The .NO INSERT $$$$$$$ discards $$$$$$ of characters
           which were defined by $$$ .INSERT command, but which
           .no insert
           remain unused.

           would be transformed into the following FORTRAN text when processed
           by this program.

               1 FORMAT(16H The .NO INSERT ,7Hcommand,9H discards,
                11H ,6Hgroups,22H of  characters  which/7H were  ,
                213Hdefined  by  ,28H  .INSERT  command,  but  wh,
                310Hich remain/8H unused.)

           In the FORMAT statement shown above, merely a comma  appears  where
           the  word  3Hthe would have been inserted if the .NO INSERT command
           had not been issued.


      .NO JUSTIFY

           The .NO JUSTIFY command indicates that  lines  of  text  which  are
           constructed  in fill mode are to have only one space between a pair
           of words and two spaces between any of the punctuation marks colon,
           semicolon,  exclamation  point,  question  mark  and period and the
           following word.  If merely a single space is required  between  one
           of  these  punctuation  marks  and  the  following  word,  then the
           punctuation mark must be preceded by an underscore.  The  lines  of
           text  are not extended to the right margin by the addition of extra
           spaces between the words.  The .NO JUSTIFY command  terminates  the
           range  of the previous .JUSTIFY command.  A .JUSTIFY command, which
           causes the lines of text which are constructed in fill mode  to  be
           extended  to the right margin, is assumed to be in effect when this
           program is started.  A .NO JUSTIFY or  a  .JUSTIFY  command  issued
           within  the  range  of  a  .PROGRAM  command  applies  to  the text
           following the next .TEXT or .CONTINUE command.  A .NO JUSTIFY or  a
           .JUSTIFY  command  issued  within  the  range of a .NO FILL command
           applies to the lines of text constructed following the  next  .FILL
           command.   Both  the  .NO  JUSTIFY command and the .JUSTIFY command
68                                           FORMAT Program User's Guide


     imply a .BREAK command.

     For example, the source text

     .no justify.output width 55.right margin 55
     .offset 0.preface       WRITE(1,$)
     Lines    of    text   which     are    constructed
        in  fill   mode,     but without justification,
      have   the   words wrapped  around          until
       the  next    word   would  extend         beyond
       the right margin,     but     the          lines
       are   not      of uniform length.
     .program;      END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(38HLines of text which are constructed in,
          115H fill mode, but/26Hwithout justification, hav,
          226He the words wrapped around/15Huntil the next ,
          334Hword would extend beyond the right/8Hmargin, ,
          440Hbut the lines are not of uniform length.)
           END

     which would, in turn, generate the following text when run.

     Lines of text which are constructed in fill mode, but
     without justification, have the words wrapped around
     until the next word would extend beyond the right
     margin, but the lines are not of uniform length.


.NO LEADING

     The .NO LEADING command indicates that blank lines requested  by  a
     .BLANK  or a .SKIP command are to be discarded if no other text has
     been represented in the FORMAT statements since  this  program  was
     started or since a .TEXT command was issued.  A .NO LEADING command
     is assumed to be in effect when this program is  started.   Initial
     blank  lines  are  represented only if a .LEADING command is issued
     before the blank lines are  requested.   Neither  the  .NO  LEADING
     command nor the .LEADING command implies a .BREAK command.

     For example, the source text

     .leading.skip.output width 55
     Leading blank lines requested by .SKIP commands are
     generated within the range of a .LEADING command
     .text.skip
     Leading blank lines requested by .SKIP commands are
     generated within the range of a .LEADING command
     .text.no leading.skip
     Leading blank lines requested by .SKIP commands are
     discarded within the range of a .NO LEADING command
      Complete Descriptions of the Commands                                 69


           would be transformed into the following FORTRAN text when processed
           by this program.

               1 FORMAT(/37H Leading  blank  lines  requested  by,
                124H  .SKIP   commands   are/17H generated within,
                232H the range of a .LEADING command)
               2 FORMAT(/37H Leading  blank  lines  requested  by,
                124H  .SKIP   commands   are/17H generated within,
                232H the range of a .LEADING command)
               3 FORMAT(38H Leading  blank  lines  requested  by ,
                123H .SKIP   commands   are/18H discarded within ,
                234Hthe range of a .NO LEADING command)


      .NO MASK

           The .NO MASK command indicates that the template line specified  by
           a  previous .MASK command is no longer to be superimposed onto each
           line  of  text  which  is  represented  in  the  resulting   FORMAT
           statements.   The .NO MASK command is equivalent to a .MASK command
           issued without any text to  its  right.   A  .NO  MASK  command  is
           assumed  to be in effect when this program is started.  Neither the
           .NO MASK command nor the .MASK command implies a .BREAK command.  A
           .BREAK  or  .EJECT  command should be issued before the .NO MASK or
           .MASK command unless it is really desired to  change  the  template
           line  which  is  to be applied to the line which is currently being
           accumulated in fill mode or to the blank lines which have  not  yet
           been written out to the FORMAT statements.

           For example, the source text

           .output width 55.preface       WRITE(1,$)
           .left margin 5.right margin 45.carriage 1,*
           .mask  @                                              @
           The .NO MASK command terminates the range of the
           previous .MASK command.
           .mask  %                                              %
           The .NO MASK command has no effect if a .MASK command
           has not been issued.
           .nomask.program;      END

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(1,1)
               1 FORMAT(38H1 @   The  .NO  MASK  command  termina,
                112Htes  the   @/29H* %   range  of  the  previou,
                221Hs  .MASK command.   %/20H* %   The .NO MASK c,
                330Hommand has no effect if  a   %/11H*     .MASK,
                429H command has not been issued.)
                 END
70                                           FORMAT Program User's Guide


     which would, in turn, generate the following text when run.

     1 @   The  .NO  MASK  command  terminates  the   @
     * %   range  of  the  previous  .MASK command.   %
     * %   The .NO MASK command has no effect if  a   %
     *     .MASK command has not been issued.


.NO OFFSET

     The .NO OFFSET command indicates that each line of  text  which  is
     represented  in  the FORMAT statements is not to be shifted further
     to the right than is indicated by  the  combination  of  the  .LEFT
     MARGIN  and .INDENT or .PARAGRAPH commands.  The .NO OFFSET command
     is equivalent to an .OFFSET 0 command.  An  .OFFSET  1  command  is
     assumed to be in effect when this program is started.  Both the .NO
     OFFSET and .OFFSET commands imply a .BREAK command.

     For example, the source text

     .offset 1.indent 5.right margin 50.output width 55
     .preface       WRITE(1,$)
     The default .OFFSET 1 command provides an empty column
     for the carriage control character.
     .no offset.indent 5;The .NO OFFSET command prevents the
     generation of this empty column.
     .program;      END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(6X,35HThe default .OFFSET  1  command  pr,
          110Hovides  an/31H empty column for the carriage ,
          218Hcontrol character./5X,20HThe   .NO   OFFSET  ,
          325H command   prevents   the/16Hgeneration of th,
          416His empty column.)
           END

     which would, in turn, generate the following text when run.

           The default .OFFSET  1  command  provides  an
      empty column for the carriage control character.
          The   .NO   OFFSET   command   prevents   the
     generation of this empty column.


.NO PREFACE

     The .NO PREFACE command indicates that the FORTRAN  text  specified
     by a previous .PREFACE command or .DEFINE PREFACE command is not to
     be generated before each of the next FORMAT statements.  A  .RESUME
     PREFACE  command  can,  however  be  issued  later  to  resume  the
     insertion  of  the  same  FORTRAN  text  before  each  new   FORMAT
     statement.   Neither  the  .NO  PREFACE  command  nor  the .PREFACE
     command nor the .DEFINE PREFACE command implies either a .BREAK  or
     a .CONTINUE command.
      Complete Descriptions of the Commands                                 71


           The .NO PREFACE command is not equivalent  to  a  .PREFACE  command
           issued  without  any  text  to  its  right,  since the latter would
           discard the FORTRAN text which previously was inserted before  each
           FORMAT  statement.  After the .NO PREFACE command been issued, this
           FORTRAN text still occupies the  storage  reserved  for  the  lines
           which  can  also be defined by the .GROUP or .DEFINE GROUP, .TOP or
           .DEFINE  TOP,  and  .BOTTOM  or  .DEFINE  BOTTOM  commands.   These
           commands  can  define  a  total of no more than 30 lines containing
           together no more than 500 characters.

           The FORTRAN text specified by the .PREFACE command or  the  .DEFINE
           PREFACE  command  is  not generated until enough lines of text have
           been constructed  to  fill  the  first  line  of  the  next  FORMAT
           statement.   If a .NO PREFACE command is issued before enough lines
           of text have been constructed to completely fill the first line  of
           the  next  FORMAT  statement,  then  the  FORTRAN  text will not be
           generated  even  if  this  FORTRAN  text  was  active  during   the
           construction  of the first line of text which is represented in the
           FORMAT statement.  Consequently, it is better to issue a  .PREFACE,
           .DEFINE  PREFACE, .NO PREFACE, or .RESUME PREFACE command after the
           .TEXT, .CONTINUE or .PROGRAM command which terminates the  previous
           FORMAT statement, rather than before.

           For example, the source text

           .preface       WRITE(1,$)
           This is the first line
           .continue
           This is the second line
           .continue.no preface
           This is the third line

           would be transformed into the following FORTRAN text when processed
           by this program.

                 WRITE(1,1)
               1 FORMAT(23H This is the first line)
                 WRITE(1,2)
               2 FORMAT(24H This is the second line)
               3 FORMAT(23H This is the third line)


      .NO TRAILING

           The .NO TRAILING command indicates that the FORMAT  statements  are
           not  to include trailing blank lines resulting from .SKIP or .BLANK
           commands issued after all other text has been  represented  in  the
           FORMAT statements and are not to include the blank lines implied by
           multiple spacing after the final line of text  represented  in  the
           FORMAT  statements.   A  .NO  TRAILING  command is assumed to be in
           effect  when  this  program  is  first  started.   If,  instead,  a
           .TRAILING command has been issued more recently than a .NO TRAILING
           command, then each .TEXT command and the reading of the end of  the
           file  (or  the issuing of an .END OF FILE command) generates all of
           the blank lines which have been requested or  which  are  necessary
           for  multiple  line  spacing  following  the  final  line  of  text
           represented in the FORMAT statements.   Neither  the  .NO  TRAILING
72                                           FORMAT Program User's Guide


     command nor the .TRAILING command implies a .BREAK command.

     For example, the source text

     .no trailing.spacing 1
     This is the first line
     .skip.text.spacing 2
     This is the second line
     .text.trailing.spacing 1
     This is the third line
     .skip.text.spacing 2
     This is the fourth line

     would be transformed into the following FORTRAN text when processed
     by this program.

         1 FORMAT(23H This is the first line)
         2 FORMAT(24H This is the second line)
         3 FORMAT(23H This is the third line/)
         4 FORMAT(24H This is the fourth line/)


.OFFSET number of spaces to be inserted at left edge of text

     The .OFFSET command indicates that  each  line  of  text  which  is
     represented  in the FORMAT statements is to be shifted to the right
     by the insertion of the indicated number of  extra  spaces  at  the
     left.  If the number which follows the .OFFSET command is unsigned,
     then this number will be used as the number of extra  spaces  which
     are  to be inserted at the left end of each line in addition to the
     spaces specified by the combination of .LEFT MARGIN and .INDENT  or
     .PARAGRAPH  commands.   If  the  number  which  follows the .OFFSET
     command is signed, then the previous  offset  is  adjusted  by  the
     indicated   amount.    The  carriage  control  character,  if  any,
     specified by the .CARRIAGE command will be  superimposed  upon  the
     leftmost  of  the  spaces  in  the  offset specified by the .OFFSET
     command.  A template line specified by a  .MASK  command  would  be
     applied  to  the  text to the right of the offset.  A .COPY command
     would duplicate the characters to the right  of  the  offset  after
     application  of  the  template line, if any.  An offset of 1 column
     which provides a space as the carriage control  character  on  each
     line  is  assumed to be in effect when this program is started.  No
     initial spaces other than those specified  by  the  combination  of
     .LEFT  MARGIN and .INDENT or .PARAGRAPH commands are inserted if an
     .OFFSET 0 command or the equivalent .NO OFFSET command  is  issued.
     The .OFFSET and .NO OFFSET commands both imply a .BREAK command.
      Complete Descriptions of the Commands                                 73


           For example, the source text

           .left margin 5.right margin 44.output width 55
           .preface       WRITE(1,$)
           .mask @                                               @
           .offset 1.indent 5.carriage 1,*
           The offset specified by the .OFFSET command is in
           addition to that specified by the .LEFT MARGIN
           and .INDENT or .PARAGRAPH commands.
           .offset 6.indent 5.carriage 1,*
           The offset specified by the .OFFSET command is in
           addition to that specified by the .LEFT MARGIN
           and .INDENT or .PARAGRAPH commands.
           .program;      END

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(1,1)
               1 FORMAT(2H1@,9X,30HThe  offset   specified   by  ,
                19H the    @/33H*@    .OFFSET  command is in addi,
                217Htion to that    @/24H*@    specified  by  the,
                326H  .LEFT  MARGIN   and    @/15H*@    .INDENT o,
                422Hr .PARAGRAPH commands.,12X,1H@/7H1     @,9X,
                539HThe  offset   specified   by   the    @/3H*  ,
                63X,42H@    .OFFSET  command is in addition to th,
                77Hat    @/35H*     @    specified  by  the  .LEF,
                820HT  MARGIN   and    @/21H*     @    .INDENT or,
                921H .PARAGRAPH commands.,12X,1H@)
                 END

           which would, in turn, generate the following text when run.

           1@         The  offset   specified   by   the    @
           *@    .OFFSET  command is in addition to that    @
           *@    specified  by  the  .LEFT  MARGIN   and    @
           *@    .INDENT or .PARAGRAPH commands.            @
           1     @         The  offset   specified   by   the    @
           *     @    .OFFSET  command is in addition to that    @
           *     @    specified  by  the  .LEFT  MARGIN   and    @
           *     @    .INDENT or .PARAGRAPH commands.            @


      .OUTPUT LENGTH maximum number of lines in a FORMAT statement

           The .OUTPUT LENGTH command specifies the maximum number of  FORTRAN
           language lines from which each FORMAT statement can be constructed.
           The number of lines set by the .OUTPUT LENGTH command should not be
           greater  than  the maximum number of lines accepted by the compiler
           which will be used to  process  the  resulting  FORMAT  statements.
           .OUTPUT  LENGTH 20 is the default, but this program does not impose
           any upper limit upon this maximum.  The combination of the  .OUTPUT
           LENGTH command and the .OUTPUT WIDTH command set the maximum number
           of characters in a single FORMAT statement, but  do  not  otherwise
           restrict  the  maximum  number  of  lines  of  text  which  can  be
           represented in each FORMAT statement.  The .OUTPUT LENGTH  command,
           like  most other commands which merely describe the manner in which
74                                           FORMAT Program User's Guide


     the text is represented in the FORMAT statements, does not imply  a
     .BREAK command.

     For example, the source text

     .offset 0.output width 55.output length 3
     .preface       WRITE(1,$)
     The FORMAT command indicates that no additional text
     is to be represented by the FORMAT statement currently
     being constructed and that the text appearing in
     subsequent lines in the source file is to be
     .output length 10
     represented in a new FORMAT statement. The preface
     line, if any, indicated by a previous PREFACE command
     will be written into the output before this next FORMAT
     .output length 3
     statement. All unused output field descriptions
     previously specified by INSERT commands will still be
     available.

     would be transformed into the following FORTRAN text when processed
     by this program.

           WRITE(1,1)
         1 FORMAT(38HThe FORMAT command indicates that no a,
          122Hdditional text  is  to/19Hbe  represented  by,
          241H  the  FORMAT  statement  currently being)
           WRITE(1,2)
         2 FORMAT(38Hconstructed and that the text appearin,
          122Hg in subsequent  lines/19Hin  the  source  fi,
          241Hle  is  to be represented in a new FORMAT/1Hs,
          345Htatement.   The  preface  line,  if  any,  in,
          414Hdicated  by  a/27Hprevious  PREFACE  command ,
          533H will  be written into the output)
           WRITE(1,3)
         3 FORMAT(38Hbefore this next FORMAT statement.  Al,
          122Hl unused output  field/19Hdescriptions  previ,
          241Hously  specified  by INSERT commands will)
           WRITE(1,4)
         4 FORMAT(19Hstill be available.)


.OUTPUT WIDTH most characters in each FORMAT statement line

     The  .OUTPUT  WIDTH  command  specifies  the  maximum   number   of
     characters  in  each  FORTRAN  language  line from which the FORMAT
     statements are constructed,  including  the  5  characters  in  the
     statement number field and the single character in the continuation
     field.  .OUTPUT WIDTH  72  is  the  greatest  width  which  can  be
     specified  and  is  the  default.   The  combination of the .OUTPUT
     LENGTH command and the .OUTPUT WIDTH command set the maximum number
     of  characters  in  a single FORMAT statement, but do not otherwise
     restrict  the  maximum  number  of  lines  of  text  which  can  be
     represented  in  each FORMAT statement.  The .OUTPUT WIDTH command,
     like most other commands which merely describe the manner in  which
     the  text is represented in the FORMAT statements, does not imply a
     .BREAK command.
      Complete Descriptions of the Commands                                 75


           For example, the source text

           .output width 35
           The quick red fox jumps over the lazy brown dog,
           then runs into the forest.
           .output width 45
           The quick red fox jumps over the lazy brown dog,
           then runs into the forest.
           .output width 55

           would be transformed into the following FORTRAN text when processed
           by this program.

               1 FORMAT(18H The quick red fox,
                125H jumps over the lazy brow,
                218Hn dog,  then  runs/13H into  the  f,
                335Horest.   The  quick  red fox jumps ,
                413Hover the lazy/28H brown dog, then runs into t,
                510Hhe forest.)


      .PARAGRAPH columns to indent, multiple of line spacing
           or
      .PARAGRAPH columns to indent, -1 times number of blank lines

           The .PARAGRAPH command indicates that the next line of  text  which
           is  represented  in  the FORMAT statements is to be indented by the
           indicated number of spaces from the left  margin  which  is  effect
           when  the first word in the line is found.  The indicated number of
           initial spaces are added to the left margin  if  the  first  number
           following  the .PARAGRAPH command is greater than or equal to zero.
           The indicated number of spaces are deleted from the left margin  if
           the  first number which follows the .PARAGRAPH command is less than
           zero.  If the first number  following  the  .PARAGRAPH  command  is
           missing,  then the indentation specified by the previous .PARAGRAPH
           command will be applied or a positive indentation of 5  columns  is
           assumed  if  no  previous  .PARAGRAPH command has specified a first
           argument.

           If the second argument following the .PARAGRAPH command is  greater
           than  or  equal  to zero, then a number of blank lines equal to the
           specified multiple of the number which appeared to the right of the
           previous  .SPACING  command, or the specified number of blank lines
           directly if a .SPACING command has not yet been issued, are  to  be
           represented  in  the  FORMAT statement between the previous line of
           text and the next line of text, in  addition  to  any  blank  lines
           specified  by previous .BLANK or .SKIP commands, and, if a .SPACING
           command has been issued, in addition to a  number  of  blank  lines
           equal  to  one  less than the number which appeared to the right of
           the previous .SPACING command.  If the  second  argument  following
           the  .PARAGRAPH command is less than zero, then the number of extra
           blank lines is equal to the negative of the value specified by  the
           argument  rather  than  to  the  multiple  of  the number which was
           specified  by  the  .SPACING  command.   If  the  second   argument
           following  the  .PARAGRAPH  command  is  missing,  then  the second
           argument specified by  the  previous  .PARAGRAPH  command  will  be
           applied,  or  a second argument of -1 indicating 1 extra blank line
76                                           FORMAT Program User's Guide


     in addition to the blank lines needed for the normal  line  spacing
     is assumed if no previous .PARAGRAPH command has specified a second
     argument.  If no text has been represented in the FORMAT statements
     either  since  the  start  of the source was read or since the last
     .TEXT command was issued, then the extra blank lines  specified  by
     the .PARAGRAPH command are not generated even if a .LEADING command
     is in effect.

     If the second argument following the .PARAGRAPH command is  greater
     than  zero,  then  the  .PARAGRAPH  command  is  equivalent  to the
     combination of an .INDENT command and  a  .SKIP  command.   If  the
     second  argument following the .PARAGRAPH command is equal to zero,
     then the .PARAGRAPH command is equivalent to  an  .INDENT  command.
     If  the  second  argument  following the .PARAGRAPH command is less
     than zero,  then  the  .PARAGRAPH  command  is  equivalent  to  the
     combination  of  an  .INDENT command and a .BLANK command having as
     its argument the second argument of the .PARAGRAPH command  without
     its  sign.  If a .SPACING 2 command is in effect, then a .PARAGRAPH
     5,3 command would result in  (2-1)+(3*2)  =  7  blank  lines  being
     generated before the next line which would be indented 5 columns to
     the right.  A  .PARAGRAPH  5,-6  command  would  produce  the  same
     results.  The .PARAGRAPH command implies a .BREAK command.

     For example, the source text

     .output width 55.left margin 5.right margin 54
     .carriage 1,*.paragraph.preface       WRITE(1,$)
     This line is at the start of the source and will only
     be indented.
     .spacing 2.paragraph 10
     (spacing-1)-(negative argument) = (1-1)-(-1) = 1 blank
     line since the default .SPACING 1 command was in effect
     at the end of the previous line.
     .paragraph
     (2-1)-(-1) = 2 blank lines precede this paragraph since
     the .SPACING 2 command was in effect at the end of the
     previous line.
     .paragraph -5,2
     (spacing-1)+(spacing*(positive argument)) = (2-1)+(2*2)
     = 5 lines precede this paragraph.
     .program;      END
      Complete Descriptions of the Commands                                 77


           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(1,1)
               1 FORMAT(1H1,10X,30HThis line is at the start of t,
                114Hhe source  and/27H*     will only be indented,
                21H./1H*/1H*,15X,29H(spacing-1)-(negative    argu,
                310Hment)    =/1H*/27H*     (1-1)-(-1)  =  1  bla,
                428Hnk  line  since  the default/1H*/9H*     .SP,
                545HACING 1 command was in effect at  the  end  o,
                61Hf/1H*/24H*     the previous line./1H*/1H*/1H*,
                715X,39H(2-1)-(-1) = 2 blank lines precede this/
                81H*/41H*     paragraph  since  the  .SPACING  2 ,
                914Hcommand was in/1H*/23H*     effect at the end,
                122H of the previous line./1H*/1H*/1H*/1H*/1H*/
                231H*(spacing-1)+(spacing*(positive,6X,8Hargument,
                32H)),7X,1H=/1H*/29H*     (2-1)+(2*2) = 5 lines p,
                422Hrecede this paragraph.)
                 END

           which would, in turn, generate the following text when run.

           1          This line is at the start of the source  and
           *     will only be indented.
           *
           *               (spacing-1)-(negative    argument)    =
           *
           *     (1-1)-(-1)  =  1  blank  line  since  the default
           *
           *     .SPACING 1 command was in effect at  the  end  of
           *
           *     the previous line.
           *
           *
           *               (2-1)-(-1) = 2 blank lines precede this
           *
           *     paragraph  since  the  .SPACING  2 command was in
           *
           *     effect at the end of the previous line.
           *
           *
           *
           *
           *
           *(spacing-1)+(spacing*(positive      argument))       =
           *
           *     (2-1)+(2*2) = 5 lines precede this paragraph.


      .PREFACE line of text to precede each new FORMAT statement

           The characters which appear to the right of the .PREFACE command on
           the  same  line are to be copied into the output file on a separate
           line before each new FORMAT  statement  which  is  generated.   The
           character  to the immediate right of the .PREFACE command must be a
           space.  The line of text which is to be copied into the output file
           before  each  new FORMAT statement starts with the second character
78                                           FORMAT Program User's Guide


     to the right of the .PREFACE command, whether  or  not  this  is  a
     printing  character,  and  extends  through  the rightmost printing
     character on the line.  A .PREFACE command issued within the  range
     of a .PROGRAM command applies to the source text following the next
     .TEXT or .CONTINUE command.  If more than a  single  line  must  be
     inserted  before  each new FORMAT statement, then a .DEFINE PREFACE
     command followed  by  the  lines  of  text  and  then  by  an  .END
     DEFINITION  command  should  be  used  to  define the preface lines
     instead.  Regardless of which method is used to define the  preface
     line  or  lines,  the  insertions  of the preface line or lines are
     performed similarly.

     The insertion of the preface line before each new FORMAT  statement
     can  be  terminated  either  by  issuing  a  subsequent .NO PREFACE
     command, or by establishing  a  null  preface  by  issuing  another
     .PREFACE command without anything to its right.  These 2 methods of
     cancelling the preface line are not identical.  If  a  .NO  PREFACE
     command is used to cancel the insertion of the preface line, then a
     .RESUME PREFACE command can be issued later to resume the insertion
     of   the  same  preface  line  before  the  subsequent  new  FORMAT
     statements.  If a .PREFACE command is issued  without  anything  to
     its right, however, then the .RESUME PREFACE command cannot be used
     to resume the insertion of the previous preface line.  Neither  the
     .PREFACE  command,  nor  the  .NO  PREFACE  command nor the .RESUME
     PREFACE command implies a .BREAK command.

     The Line of text which is defined by the .PREFACE command is stored
     in  the same area as are those which are specified by the .GROUP or
     .DEFINE GROUP, .TOP or .DEFINE TOP and .BOTTOM  or  .DEFINE  BOTTOM
     commands.   There  can  be  at most 30 lines containing together no
     more than 500 characters in all  of  these  collections  of  lines.
     These  lines  include those which have been temporarily disabled by
     the .NO GROUP, .NO PREFACE, .NO TOP or .NO BOTTOM commands.

     The .PREFACE command would typically be used to insert single  line
     FORTRAN  language  WRITE  statements  before  each  of  the  FORMAT
     statements which represents portions of a long section of text.  In
     the  line  of text specified by the .PREFACE command, all groups of
     contiguous dollar signs which are not preceded by underscores  will
     be  replaced  each  time the line of text is copied into the output
     file by the statement number of the following FORMAT statement.  If
     the group of dollar signs contains more dollar signs than there are
     digits in the number, then additional spaces are  inserted  to  the
     left of the statement number so that the total number of characters
     which are inserted equals the number of dollar signs in the  group.
     If  the  group  of  dollar signs does not contain more dollar signs
     than there are digits in the number, then all  of  the  digits  are
     represented, but no extra spaces are inserted.

     The group of dollar signs can be followed immediately by  either  a
     plus  or a minus sign and then by a number to cause the value which
     is inserted in place of the group of dollar signs to be  larger  or
     smaller than the statement number of the following FORMAT statement
     by the indicated amount.  The value of the  next  statement  number
     can  itself be modified if an equal sign appears between the dollar
     sign and the plus or minus sign, or between the dollar sign and the
     actual  value  which  the  next statement number is to have.  If an
      Complete Descriptions of the Commands                                 79


           equal sign appears to the  immediate  right  of  the  dollar  sign,
           however,  then  neither  this expression nor the resulting value is
           copied into the resulting preface line at this point.

           For example,

           $      would be replaced by the value of the next statement number.
                  No extra spaces would be inserted.

           $$$$   would be replaced by the next statement number.  If this  is
                  less  than 1000, then enough spaces are inserted at the left
                  to produce at least 4 characters.

           $+     would be replaced by the sum of the  next  statement  number
                  and  the  statement number increment.  The value of the next
                  statement number would not  itself  be  changed.   $-  would
                  subtract the increment instead.

           $+10   would be replaced by 10 more than  the  value  of  the  next
                  statement  number.   The  value of the next statement number
                  would not itself be changed.

           $=     would set the value of the next statement number to the  sum
                  of  its  current  value  and the statement number increment.
                  Neither the $= nor the resulting value would appear at  this
                  point  in the preface line when it is copied into the output
                  file.  There could be several adjacent dollar signs, but the
                  extra  dollar  signs  would  be ignored.  $=+ would have the
                  same effect.  $=- would subtract the increment instead.

           $=100  would set the value of the next  statement  number  to  100.
                  Neither  the  $=100  nor the resulting value would appear at
                  this point in the preface line when it is  copied  into  the
                  output file.

           $=+10  would increase the value of the next statement number by 10.
                  Neither  the  $=+10  nor the resulting value would appear at
                  this point in the preface line when it is  copied  into  the
                  output file.

           Within the text specified by the .PREFACE  command,  an  underscore
           character,  which  will  not  be  copied  into the output file, can
           appear before any character, such as  a  number  sign,  circumflex,
           back  slash,  less than sign (if in flag capitalize mode), a dollar
           sign or another underscore, which is to be  treated  as  a  nonflag
           character.   The  .PREFACE  command  cannot be followed on the same
           line either by a comment or by another command, so  semicolons  and
           exclamation  points  in  the line of text specified by the .PREFACE
           command do not need to be preceded by underscores.

           For example, the source text

           .output length 2.output width 55.right margin 30.
           .preface       IF(KONTRL.EQ.1)WRITE(1,$$$)
           The .PREFACE command allows several FORMAT statements
           representing a single section of text to be used under
           the same conditions.
80                                           FORMAT Program User's Guide


     would be transformed into the following FORTRAN text when processed
     by this program.

           IF(KONTRL.EQ.1)WRITE(1,  1)
         1 FORMAT(31H The  .PREFACE  command  allows/4H sev,
          127Heral    FORMAT   statements)
           IF(KONTRL.EQ.1)WRITE(1,  2)
         2 FORMAT(31H representing a single  section/4H of ,
          127H text  to be used under the)
           IF(KONTRL.EQ.1)WRITE(1,  3)
         3 FORMAT(17H same conditions.)

     The following example demonstrates one manner in which manipulation
     of the statement numbers might be used to prevent duplication.  The
     $=$$$ which appears in  the  definition  of  the  preface  line  is
     treated  as  consisting of 2 parts.  The $= first changes the value
     of the next statement number by the current increment, then,  since
     a  dollar has no special meaning to the right of an equal sign, nor
     for that matter to the right of a plus or  minus  sign  or  to  the
     right of a number, the $$$ is replaced by this new number.

     .output length 2.output width 55.right margin 30.
     .preface $$$$$ IF(KONTRL.EQ.1)WRITE(1,$=$$$)
     The .PREFACE command allows several FORMAT statements
     representing a single section of text to be used under
     the same conditions.

     This  would  be  converted  to  the  following  FORTRAN  text  when
     processed by this program.

         1 IF(KONTRL.EQ.1)WRITE(1,  2)
         2 FORMAT(31H The  .PREFACE  command  allows/4H sev,
          127Heral    FORMAT   statements)
         3 IF(KONTRL.EQ.1)WRITE(1,  4)
         4 FORMAT(31H representing a single  section/4H of ,
          127H text  to be used under the)
         5 IF(KONTRL.EQ.1)WRITE(1,  6)
         6 FORMAT(17H same conditions.)


.PROGRAM next statement number, statement number increment

     The .PROGRAM command indicates that no additional  text  is  to  be
     represented by the FORMAT statement currently being constructed and
     that the source text appearing on the following lines of the  input
     file,  through  the  next .TEXT or .CONTINUE command or through the
     reading of the end of the file (or the issuing of an .END  OF  FILE
     command)  is to be copied into the output file directly rather than
     being represented in a  FORMAT  statement.   No  extra  spaces  are
     inserted at the start of the lines within the range of the .PROGRAM
     command regardless of whether an .OFFSET command has  been  issued,
     and no extra blank lines are inserted between these lines even if a
     .SPACING command has been issued.  Case conversions and removal  of
     underscores before characters to be copied literally continue to be
     performed within the range of  the  .PROGRAM  command,  and  dollar
     signs  are  replaced, as described below, by the number of the next
     FORMAT statement which can be generated.
      Complete Descriptions of the Commands                                 81


           In  the  lines  within  the  range  of  the  .PROGRAM  command,  an
           underscore  character,  which  will  not  be copied into the output
           file, can appear before any  character,  such  as  a  number  sign,
           circumflex,  back  slash,  less  than  sign  (if in flag capitalize
           mode),  dollar  sign,  another  underscore,  initial   period,   or
           rightmost  space,  which  is  to  be  treated  as though it were an
           ordinary printing character.  All lines beginning with a period  in
           the  left  column  will  be  interpreted  as commands.  In order to
           output a line starting with a period, this period must be  preceded
           by an underscore character.

           In the noncommand lines following the .PROGRAM command, all  groups
           of  contiguous  dollar  signs  which are not preceded by underscore
           characters will be replaced by the statement number of  the  FORMAT
           statement  which  would  be  generated  when  either  a  .TEXT or a
           .CONTINUE command is next encountered.   If  the  group  of  dollar
           signs  contains  more  dollar  signs  than  there are digits in the
           number, then additional spaces are inserted  to  the  left  of  the
           statement  number  so that the total number of characters which are
           inserted equals the number of dollar signs in the  group.   If  the
           group of dollar signs does not contain more dollar signs than there
           are digits in the number, then all of the digits  are  represented,
           but no extra spaces are inserted.

           The numbers which can follow the .PROGRAM command are identical  to
           those which can follow the .TEXT and .CONTINUE commands.  The first
           number  which  can  follow  any  of  these  commands  modifies  the
           statement  number  of the next FORMAT statement.  The second number
           which can follow any of these commands becomes the statement number
           increment  after  the generation of the next FORMAT statement.  The
           description of the .CONTINUE command describes  the  interpretation
           of  these numbers in detail.  If the statement number of the FORMAT
           statement following a section  of  program  text  indicated  by  an
           initial  .PROGRAM  command  is to be modified, but the program text
           includes dollar signs which are to be replaced  by  this  statement
           number,  then  this  statement  number  should  be  modified by the
           .PROGRAM command rather than by the following  .TEXT  or  .CONTINUE
           command,  since,  if  the  modification  is  done  by  the .TEXT or
           .CONTINUE command, then incorrect statement numbers will have  been
           inserted into the program text.

           For example, the source text

           .spacing 2.output width 55.offset 0
           .text 10,10    ;Statement ten
           .program       ;Next statement will be number $$$.
           .continue      ;Statement twenty
           .program+5,100 ;Next statement will be number $$.
           .trail         !blank lines will now end statements
           _.Underscore before initial period and dollar sign _$.
           .continue      ;Statement twenty-five
           .program       ;Next statement will be number $.
           .continue      ;Statement one hundred and twenty-five
82                                           FORMAT Program User's Guide


     would be transformed into the following FORTRAN text when processed
     by this program.

        10 FORMAT(13HStatement ten)
     Next statement will be number  20.
        20 FORMAT(/16HStatement twenty)
     Next statement will be number 25.
     .Underscore before initial period and dollar sign $.
        25 FORMAT(/21HStatement twenty-five/)
     Next statement will be number 125.
       125 FORMAT(37HStatement one hundred and twenty-five/)


.RESET

     The .RESET command returns all conditions which can be  changed  by
     commands  and  by  case  shift  locks  in  the source text to their
     original settings.  If additional text appears on the same line  to
     the  right  of  the  .RESET  command  then the original set of flag
     characters will be recognized in  this  additional  text,  and  the
     cases  of  alphabetic letters will be retained at the start of this
     additional text.  The width of the line in which the .RESET command
     is found is set by the input line width in effect when the line was
     read, but the next line read from the source file will  be  of  the
     original width.

     The following commands are implied by the .RESET command.

          .FILL
          .FLAGS ALL
          .FLAGS CONTROL _.
          .FLAGS FENCE _;
          .FLAGS INSERT $
          .FLAGS LOWER CASE _\
          .FLAGS QUOTE __
          .FLAGS REMARK _!
          .FLAGS SPACE _#
          .FLAGS UPPER CASE _^
          .INPUT WIDTH 132 (applies to next line read)
          .JUSTIFY
          .LEFT MARGIN 0
          .NO BOTTOM
          .NO CARRIAGE
          .NO COPY
          .NO FLAGS CAPITALIZE
          .NO GROUP
          .NO INSERT
          .NO LEADING
          .NO MASK
          .NO PAGE CARRIAGE
          .NO PAGING
          .NO PREFACE
          .NO TOP
          .NO TRAILING
          .OFFSET 1
          .OUTPUT LENGTH 20
          .OUTPUT WIDTH 72
      Complete Descriptions of the Commands                                 83


                .PAGE LENGTH 22
                .RIGHT MARGIN 60
                .SPACING 1
                .TEXT 1,1
                .UPPER CASE
                .USE H

           The .NO BOTTOM, .NO PAGE CARRIAGE, .NO PAGING, .NO  TOP  and  .PAGE
           LENGTH  commands  which are listed in the above table are used when
           the text in lengthy  messages  is  being  divided  into  pages  for
           display  on  a video terminal.  These commands are described in the
           next chapter of this manual.

           After the .RESET command has  been  issued,  a  .PARAGRAPH  command
           without  arguments  would be assumed to be equivalent to .PARAGRAPH
           5,-1,3.  The third number after the .PARAGRAPH command is used only
           when the text is being divided into pages.


      .RESUME GROUP

           If a .NO GROUP command has been issued  to  prevent  the  insertion
           into  the output file of the FORTRAN text specified by the previous
           .GROUP or .DEFINE GROUP command, then  the  .RESUME  GROUP  command
           resumes  the insertion of this FORTRAN text before the first FORMAT
           statement produced after  each  .TEXT  command.   A  .RESUME  GROUP
           command is implied by each new .GROUP or .DEFINE GROUP command.  If
           a .NO GROUP command has not been issued,  then  the  .RESUME  GROUP
           command is unnecessary and has no effect.

           The FORTRAN text specified by a .GROUP or .DEFINE GROUP command  is
           not generated until enough lines of output text have been specified
           to fill the first line of the first FORMAT statement.  Whether this
           FORTRAN  text  is  generated  or not depends, at the time the first
           line of the FORMAT statement has been completed, upon whether  this
           FORTRAN  text  has  been  specified  by  a  .GROUP or .DEFINE GROUP
           command, and upon whether this FORTRAN text has been deactivated by
           a  subsequent  .NO  GROUP  command  or  reactivated by a subsequent
           .RESUME GROUP command.  Consequently,  it  is  better  to  issue  a
           .GROUP,  .DEFINE  GROUP,  .NO GROUP, or .RESUME GROUP command after
           the .TEXT, .CONTINUE  or  .PROGRAM  command  which  terminates  the
           previous FORMAT statement, rather than before.

           For example, the source text

           .output width 55
           .group       WRITE(ITTY,$)
           This text comes after the definition of a group
           line by the .GROUP command.
           .text.no group
           This text comes after the .NO GROUP command.
           There will not be a group line before this FORMAT.
           .text.resume group
           This text comes after the .RESUME GROUP command.
           The group line will again appear before this FORMAT.
84                                           FORMAT Program User's Guide


     would be transformed into the following FORTRAN text when processed
     by this program.

           WRITE(ITTY,1)
         1 FORMAT(38H This text comes after the definition ,
          123Hof a group line by  the/16H .GROUP command.)
         2 FORMAT(38H This text comes after the .NO GROUP c,
          123Hommand.  There will not/18H be a group line b,
          218Hefore this FORMAT.)
           WRITE(ITTY,3)
         3 FORMAT(38H This text comes after the .RESUME GRO,
          123HUP command.  The  group/18H line will again a,
          225Hppear before this FORMAT.)


.RESUME PREFACE

     If a .NO PREFACE command has been issued to prevent  the  insertion
     into  the output file of the FORTRAN text specified by the previous
     .PREFACE or .DEFINE  PREFACE  command,  then  the  .RESUME  PREFACE
     command  resumes the insertion of this FORTRAN text before each new
     FORMAT statement.  A .RESUME PREFACE command is implied by each new
     .PREFACE  or .DEFINE PREFACE command.  If a .NO PREFACE command has
     not been issued, then the .RESUME PREFACE  command  is  unnecessary
     and has no effect.

     The FORTRAN text specified by a .PREFACE or .DEFINE PREFACE command
     is  not  generated  until  enough  lines  of  output text have been
     specified to fill the first line  of  the  next  FORMAT  statement.
     Whether  this FORTRAN text is generated or not depends, at the time
     the first line of the FORMAT statement  has  been  completed,  upon
     whether  this  FORTRAN  text  has  been  specified by a .PREFACE or
     .DEFINE PREFACE command, and upon whether  this  FORTRAN  text  has
     been deactivated by a subsequent .NO PREFACE command or reactivated
     by a subsequent  .RESUME  PREFACE  command.   Consequently,  it  is
     better  to  issue  a  .PREFACE,  .DEFINE  PREFACE,  .NO PREFACE, or
     .RESUME PREFACE command after  the  .TEXT,  .CONTINUE  or  .PROGRAM
     command which terminates the previous FORMAT statement, rather than
     before.

     For example, the source text

     .output width 55
     .preface       WRITE(ITTY,$)
     This text comes after the definition of a preface
     line by the .PREFACE command.
     .continue.no preface
     This text comes after the .NO PREFACE command.
     There will not be a preface line before this FORMAT.
     .continue.resume preface
     This text comes after the .RESUME PREFACE command.
     The preface line will again appear before this FORMAT.
      Complete Descriptions of the Commands                                 85


           would be transformed into the following FORTRAN text when processed
           by this program.

                 WRITE(ITTY,1)
               1 FORMAT(38H This text comes after the definition ,
                123Hof a  preface  line  by/18H the .PREFACE comm,
                24Hand.)
               2 FORMAT(38H This text comes after the .NO PREFACE,
                123H command.   There  will/18H not be a preface ,
                224Hline before this FORMAT.)
                 WRITE(ITTY,3)
               3 FORMAT(38H This text comes after  the  .RESUME  ,
                123HPREFACE  command.   The/18H preface line will,
                233H again appear before this FORMAT.)


      .RIGHT MARGIN rightmost column into which text is wrapped

           The  .RIGHT  MARGIN  command  specifies  the  maximum   number   of
           characters  in each line of text which is constructed in fill mode,
           including the left margin specified by the  .LEFT  MARGIN  command,
           the  indentation  which  is  specified  either  by  an .INDENT or a
           .PARAGRAPH command, and the words of text and the spacings  between
           words  which  are  accumulated on the current line either until the
           next word would cause the total number of characters in the line to
           exceed  the  right margin specified by the .RIGHT MARGIN command or
           until a command which implies a .BREAK command is encountered.   If
           the  number  which  follows  the .RIGHT MARGIN command is unsigned,
           then this number will be used  as  the  right  margin.   The  right
           margin  is  assumed to be 60 if a .RIGHT MARGIN command has not yet
           been encountered.  If the number which follows  the  .RIGHT  MARGIN
           command  is  signed,  then the previous right margin is adjusted by
           the indicated amount.  If  no  number  follows  the  .RIGHT  MARGIN
           command then the right margin is reset to the farthest right margin
           which it has yet been set.  The .RIGHT  MARGIN  command  implies  a
           .BREAK command.

           The right margin is the maximum length of the line of  text  before
           the  application  of the template line specified by a .MASK command
           and before the line is duplicated by a .COPY  command.   The  right
           margin  does  not  include  the  leftmost  spaces  specified by the
           .OFFSET command or the single  left  space  which  is  obtained  if
           neither  the  .OFFSET  command  nor the .NO OFFSET command has been
           issued.  The combination of the right margin and the initial offset
           specified  by  the  .OFFSET  command  cannot exceed 300.  The right
           margin is always assumed to be large enough for the current line to
           include  at least 1 word.  The right margin is ignored if the lines
           of text are being represented in no fill mode.
86                                           FORMAT Program User's Guide


     For example, the source text

     .output width 55.carriage 1,*.preface       WRITE(1,$)
     .left margin 5.right margin 30.indent 5
     The .RIGHT MARGIN command implies a .BREAK command.
     .right margin 40.indent -5
     The .RIGHT MARGIN command applies only to text which is
     constructed in fill mode.
     .nofill;The right margin is ignored in no fill mode.
     .program;      END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(1H1,10X,20HThe  .RIGHT   MARGIN/7H*     c,
          124Hommand  implies a .BREAK/14H*     command./
          241H*The .RIGHT MARGIN command  applies  only/1H*,
          35X,35Hto  text  which  is  constructed in/4H*   ,
          412H  fill mode./29H*     The right margin is ign,
          521Hored in no fill mode.)
           END

     which would, in turn, generate the following text when run.

     1          The  .RIGHT   MARGIN
     *     command  implies a .BREAK
     *     command.
     *The .RIGHT MARGIN command  applies  only
     *     to  text  which  is  constructed in
     *     fill mode.
     *     The right margin is ignored in no fill mode.


.SKIP multiple of extra line spacings to be generated

     The .SKIP command indicates that, after the representation  in  the
     FORMAT  statement  of  the  previous  text, a number of blank lines
     equal to the specified multiple of the number which appeared to the
     right  of the previous .SPACING command, or the specified number of
     blank lines directly if a .SPACING command has not yet been issued,
     are  to  be represented in the FORMAT statement, in addition to any
     blank lines specified by other .BLANK or .SKIP commands, and, if  a
     .SPACING  command has been issued, in addition to a number of blank
     lines equal to one less than the number which appeared to the right
     of  the  previous  .SPACING  command.   If no number appears to the
     right of the .SKIP command, then the number 1 is assumed to  appear
     to the right of the .SKIP command instead.  If a .SPACING 2 command
     is in effect, then a .SKIP 3 command would result in (3*2)+(2-1) or
     7 blank lines being generated.  The .SKIP command is similar to the
     .BLANK command, except that the .BLANK command always specifies the
     number  of extra blank lines directly.  The .SKIP command implies a
     .BREAK command.

     If no text has been represented in  the  FORMAT  statements  either
     since  this program was started or since the last .TEXT command was
     issued, then the .SKIP command, like the  .BLANK  command  and  the
      Complete Descriptions of the Commands                                 87


           .SKIP  or  .BLANK  command  implied  by  the .PARAGRAPH command, is
           ignored unless a .LEADING command is in effect.  Blank lines  which
           have  not been generated when the end of the source file is read or
           when the  next  .TEXT  command  is  issued,  but  which  have  been
           requested  by  .SKIP  or .BLANK commands or which are necessary for
           the normal line spacing, will be appended to the  FORMAT  statement
           being  constructed  if  a  .TRAIL command is then in effect.  Blank
           lines will be discarded when the end of the source file is read  or
           the  next .TEXT command is issued if a .NO TRAIL command is then in
           effect or if a .TRAIL command has not by then been issued.

           For example, the source text

           .spacing 2.output width 55
           .skip
           The quick red fox jumps over the lazy brown dog,
           then runs into the forest.
           .skip
           The quick red fox jumps over the lazy brown dog,
           then runs into the forest.
           .skip 2
           The quick red fox jumps over the lazy brown dog,
           then runs into the forest.
           .skip 3
           The quick red fox jumps over the lazy brown dog,
           then runs into the forest.

           would be transformed into the following FORTRAN text when processed
           by this program.

               1 FORMAT(38H The quick red fox jumps over the lazy,
                123H brown dog,  then  runs//17H into the forest./
                2///42H The quick red fox jumps over the lazy bro,
                319Hwn dog,  then  runs//17H into the forest./////
                4/44H The quick red fox jumps over the lazy brown,
                517H dog,  then  runs//17H into the forest.///////
                6/44H The quick red fox jumps over the lazy brown,
                717H dog,  then  runs//17H into the forest.)


      .SPACING separation from top of one line to top of next line

           The .SPACING command specifies the separation from the top  of  one
           line of text to the top of the next line of text when the resulting
           FORMAT statements are used.  The number specified by  the  .SPACING
           command  is one greater than the number of blank lines which are to
           separate lines of text which are constructed in fill mode or  which
           are  copied in no fill mode.  The intervening blank lines which are
           required when the .SPACING command has specified  a  value  greater
           than 1 are generated after each line of text, not before.  No blank
           lines follow the final line of text unless a .TRAILING  command  is
           in  effect.   The  .SPACING  command  implies  a .BREAK command.  A
           .SPACING 1 command which gives single spacing with  no  intervening
           blank  lines  is  assumed  to  be  in  effect  when this program is
           started.  If a line of text is being constructed when the  .SPACING
           command is encountered, then the number of blank lines which follow
           that line of text is determined by the line spacing  which  was  in
88                                           FORMAT Program User's Guide


     effect  during  the  construction  of that line of text, not by the
     newly specified spacing.

     For example, the source text

     .output width 55.right margin 54
     .carriage 1,*.preface       WRITE(1,$)
     A .SPACING 1 command is assumed to be in effect when
     this program is started.
     .spacing 2
     No blank lines precede this since the .SPACING 2
     command forced out previous line before taking effect.
     .blank 2;Normal spacing and 2 blank lines
     .skip 2;Normal spacing and 2 multiples of 2 blank lines
     .paragraph 5,2;Paragraph similar to .skip 2.indent 5
     .program;      END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(38H1A .SPACING 1 command is assumed to be,
          117H in  effect  when/24H*this program is started,
          21H./41H*No blank lines  precede  this  since  th,
          314He  .SPACING  2/1H*/23H*command forced out pre,
          432Hvious line before taking effect./1H*/1H*/1H*/
          533H*Normal spacing and 2 blank lines/1H*/1H*/1H*/
          61H*/1H*/37H*Normal spacing and 2 multiples of 2 ,
          711Hblank lines/1H*/1H*/1H*/1H*/1H*/10H*     Para,
          833Hgraph similar to .skip 2.indent 5)
           END

     which would, in turn, generate the following text when run.

     1A .SPACING 1 command is assumed to be in  effect  when
     *this program is started.
     *No blank lines  precede  this  since  the  .SPACING  2
     *
     *command forced out previous line before taking effect.
     *
     *
     *
     *Normal spacing and 2 blank lines
     *
     *
     *
     *
     *
     *Normal spacing and 2 multiples of 2 blank lines
     *
     *
     *
     *
     *
     *     Paragraph similar to .skip 2.indent 5
      Complete Descriptions of the Commands                                 89


      .TEXT next statement number, statement number increment

           The .TEXT command indicates  that  no  additional  text  is  to  be
           represented by the FORMAT statement currently being constructed and
           that the text appearing in subsequent lines in the source  file  is
           to  be represented in a new FORMAT statement.  The preface line, if
           any, indicated by a previous .PREFACE command will be written  into
           the  output  before  this next FORMAT statement.  All unused output
           field descriptions previously specified by .INSERT commands will be
           discarded.   If  the  .TEXT command is issued within the range of a
           .PROGRAM command,  then  the  range  of  the  .PROGRAM  command  is
           terminated.   Blank  lines  which  have not yet been generated, but
           which have been requested by .SKIP or .BLANK commands or which  are
           necessary for multiple line spacing, will be appended to the FORMAT
           statement currently being constructed if a .TRAILING command is  in
           effect.  Such trailing blank lines will be discarded before the new
           FORMAT statement is begun if a .NO TRAILING command is in effect or
           if  a  .TRAILING command has not been issued.  If the .TEXT command
           is followed by .SKIP or .BLANK commands before the next text  which
           is  to  be represented in the FORMAT statements, then these leading
           blank lines will be represented only if a .LEADING  command  is  in
           effect.   Such  leading  blank lines are discarded if a .NO LEADING
           command is in effect or if a .LEADING command has not been  issued.
           The  .TEXT  command  is  identical to the .CONTINUE command, except
           that a .CONTINUE command would retain all previously specified  but
           unused  field descriptions, and, providing that there is additional
           text to be represented, a .CONTINUE  command  would  represent  all
           blank lines which have not yet been generated.

           The numbers which can follow the .TEXT  command  are  identical  to
           those  which  can  follow the .CONTINUE and .PROGRAM commands.  The
           first number which can follow any of these  commands  modifies  the
           statement  number  of the next FORMAT statement.  The second number
           which can follow any of these commands becomes the statement number
           increment  after  the generation of the next FORMAT statement.  The
           description of the .CONTINUE command describes  the  interpretation
           of  these numbers in detail.  If the statement number of the FORMAT
           statement following a section  of  program  text  indicated  by  an
           initial  .PROGRAM  command  is to be modified, but the program text
           includes dollar signs which are to be replaced  by  this  statement
           number,  then  this  statement  number  should  be  modified by the
           .PROGRAM command rather than by the following  .TEXT  or  .CONTINUE
           command,  since,  if  the  modification  is  done  by  the .TEXT or
           .CONTINUE command, then incorrect statement numbers will have  been
           inserted into the program text.
90                                           FORMAT Program User's Guide


     For example, the source text

     .spacing 2.output width 55
     .text 10,10;.preface       WRITE(1,$)
     .insert I2
     .insert F2
     The quick red fox jumps $$ feet over the lazy brown dog
     .text
     The quick red fox jumps $$ feet over the lazy brown dog
     .skip;.text +100
     .insert I2
     .insert F2
     .insert A2
     The quick red fox jumps $$ feet over the lazy brown dog
     .continue,5
     The quick red fox jumps $$ feet over the lazy brown dog
     .skip;.continue
     The quick red fox jumps $$ feet over the lazy brown dog

     would be transformed into the following FORTRAN text when processed
     by this program.

           WRITE(1,10)
        10 FORMAT(25H The quick red fox jumps ,I2,7H feet o,
          122Hver the lazy brown dog)
           WRITE(1,20)
        20 FORMAT(25H The quick red fox jumps ,9H feet ove,
          120Hr the lazy brown dog)
           WRITE(1,120)
       120 FORMAT(25H The quick red fox jumps ,I2,7H feet o,
          122Hver the lazy brown dog)
           WRITE(1,130)
       130 FORMAT(/25H The quick red fox jumps ,F2,6H feet ,
          123Hover the lazy brown dog)
           WRITE(1,135)
       135 FORMAT(///25H The quick red fox jumps ,A2,4H fee,
          125Ht over the lazy brown dog)


.TRAILING

     The .TRAILING command indicates that the FORMAT statements  are  to
     include  blank lines resulting from .SKIP or .BLANK commands issued
     after all text has been represented in the  FORMAT  statements  and
     are  to include the blank lines necessary for multiple line spacing
     following  the  final  line  of  text  represented  in  the  FORMAT
     statements.   If  a  .TRAILING command has not been issued, or if a
     .NO TRAILING command has been issued more recently than a .TRAILING
     command,  then each .TEXT command and the reading of the end of the
     file (or the issuing of an .END OF FILE command)  instead  discards
     all  blank  lines  which  did  not  precede  text  which  has  been
     represented  in  the  FORMAT  statements.   Neither  the  .TRAILING
     command nor the .NO TRAILING command implies a .BREAK command.
      Complete Descriptions of the Commands                                 91


           For example, the source text

           .spacing 2.output width 55.use'.offset 0.text 10
           The quick red fox jumps over the lazy brown dog,
           then runs into the forest.
           .text 20
           The quick red fox jumps over the lazy brown dog,
           then runs into the forest.
           .skip.text 30.trail
           The quick red fox jumps over the lazy brown dog,
           then runs into the forest.
           .text 40
           The quick red fox jumps over the lazy brown dog,
           then runs into the forest.
           .skip

           would be transformed into the following FORTRAN text when processed
           by this program.

              10 FORMAT('The quick red fox jumps over the lazy b',
                1'rown dog,  then  runs'//'into the forest.')
              20 FORMAT('The quick red fox jumps over the lazy b',
                1'rown dog,  then  runs'//'into the forest.')
              30 FORMAT('The quick red fox jumps over the lazy b',
                1'rown dog,  then  runs'//'into the forest.'/)
              40 FORMAT('The quick red fox jumps over the lazy b',
                1'rown dog,  then  runs'//'into the forest.'///)


      .UPPER CASE

           The .UPPER CASE command indicates that the cases of all  alphabetic
           letters  which  are  not specially marked are to be retained in the
           source text which follows the end of the command or, if the  .UPPER
           CASE  command  is  followed  by a comment, in the source text which
           follows the comment.  Regardless of the issuing of the .UPPER  CASE
           command,  any  letter  which  is  preceded by a back slash is still
           converted to its lower case form, any letter which is preceded by a
           circumflex  is  still  converted  to  its  upper  case  form,  and,
           providing that a .FLAGS CAPITALIZE command  has  been  issued,  any
           letter  which is in a word which is preceded by a less than sign is
           also converted to its upper case form.  The .UPPER CASE command  is
           equivalent  to  the appearance of 2 consecutive circumflexes except
           that the 2 circumflexes can appear anywhere and that the  retention
           of  cases indicated by the 2 circumflexes is applied immediately to
           all of the following text.  An .UPPER CASE command is assumed to be
           in  effect  when  this program is started.  Upper case letters will
           instead be converted to their lower case forms if the  .LOWER  CASE
           command  or  the  equivalent 2 consecutive back slashes are issued.
           Neither the .UPPER CASE command nor the .LOWER CASE command implies
           a .BREAK command.
92                                           FORMAT Program User's Guide


     For example, the source text

     .offset 0.right margin 55.output width 55
     .flags capitalize.preface       WRITE(1,$)
     An <.upper ^c^a^s^e \C\O\M\M\A\N\D does not have to be
     issued when this program is first started.
     .lower case
     ^A <.LOWER ^C^A^S^E \C\O\M\M\A\N\D CAN BE ISSUED TO
     CAUSE CONVERSION TO LOWER CASE.
     .upper case
     The <.upper ^c^a^s^e \C\O\M\M\A\N\D can, of course, be
     reissued at any time.
     .program;      END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(38HAn .UPPER CASE command does not have t,
          117Ho be issued  when/24Hthis  program  is first ,
          231Hstarted.  A .LOWER CASE command/10Hcan be iss,
          345Hued to cause conversion to lower  case.   The/
          445H.UPPER  CASE command can, of course, be reiss,
          510Hued at any/5Htime.)
           END

     which would, in turn, generate the following text when run.

     An .UPPER CASE command does not have to be issued  when
     this  program  is first started.  A .LOWER CASE command
     can be issued to cause conversion to lower  case.   The
     .UPPER  CASE command can, of course, be reissued at any
     time.


.USE character implying text representation notation

     The .USE command specifies the notation which  is  to  be  used  to
     represent  the  text  in the FORMAT statements being generated.  If
     the next printing character following the .USE command is either an
     upper  or lower case letter H, then the text will be represented in
     Hollerith notation as the number  of  characters  followed  by  the
     letter  H  in  the case indicated and then by the characters of the
     text.  If the next printing character following the .USE command is
     not the letter H, then that character will be appended to both ends
     of the text and will be doubled  wherever  it  appears  within  the
     text.   .USE'  would  select  apostrophe  notation, and .USE* would
     select the asterisk notation used by some computers  which  do  not
     include  the apostrophe in their character sets.  The .USE command,
     like most other commands which merely describe the manner in  which
     the  text is represented in the FORMAT statements, does not imply a
     .BREAK command.

     One or more spaces can appear between  the  .USE  command  and  the
     following printing character, but are not required.  In order for a
     space, number sign, circumflex, back slash, less than sign  (if  in
     flag  capitalize  mode),  period,  semicolon,  exclamation point or
      Complete Descriptions of the Commands                                 93


           underscore to be specified by the .USE command  as  the  delimiting
           character,   this  character  would  have  to  be  preceded  by  an
           underscore.

           For example, the source text

           .out width 55;one * two ** three ' four '' five
           .break.use'  ;one * two ** three ' four '' five
           .break.use * ;one * two ** three ' four '' five
           .break.useH  ;one * two ** three ' four '' five
           .break.use h ;one * two ** three ' four '' five

           would be transformed into the following FORTRAN text when processed
           by this program.

               1 FORMAT(34H one * two ** three ' four '' five/' ',
                1'one * two ** three '' four '''' five'/* one ***,
                2* two **** three ' four '' five*/12H one * two *,
                322H* three ' four '' five/19h one * two ** three,
                415h ' four '' five)




                                     Chapter 4

                   COMMANDS NEEDED FOR PAGING ON VIDEO TERMINALS



                                    Introduction
                                    ------------

      On some computer systems, the lines which have been displayed on a video
      terminal  are  counted  and  the system pauses each time that enough new
      text has been generated to fill the screen.  When the text on the screen
      is erased, enough lines are displayed from the top down until the screen
      fills again, and then the typing of  text  pauses.   If  the  screen  is
      already full, then each new line is displayed first at the bottom of the
      screen.  The lines already on the screen are shifted upward as new lines
      are  added  and the top line disappears.  The typing of text pauses each
      time that the first line which was displayed after  the  previous  pause
      would be lost.

      After each pause, the user is expected to instruct the system to  resume
      the typing of the text.  This assures that the user has a chance to read
      all of the text which is  on  the  screen.   The  extra  interaction  is
      acceptable  to  the  user  if  most  of  the text which is displayed was
      generated by the program.  However, the user will already have read  the
      text  on  the  screen  anyway if the user is interacting every few lines
      with the program.  If the program usually types much less  than  a  full
      screen  after  each  interaction with the user, then it may be better to
      turn off the automatic pausing each time that the screen is filled,  and
      to  instead have the program, rather than the computer system upon which
      the program is being run, parcel out the lines in the longer messages.

      The commands described in  the  previous  portion  of  this  manual  are
      sufficient  for the construction of short messages, for the construction
      of  long  messages  which  will  be  typed  onto  paper,  and  for   the
      construction of long messages which will be displayed on video terminals
      which pause automatically each time the screen fills.  However,  if  the
      system  cannot  pause each time the screen fills on a video terminal, or
      if this function is turned off so that short sections of dialog are  not
      interrupted  unexpectedly, then the program will have to count the lines
      in long messages and pause at the proper points.  The  FORTRAN  code  to
      produce  these  pauses could be inserted by hand.  This could be done by
      finding the points in the message at which the  screen  fills,  breaking
      the lines in the source text at these points, and then inserting at each
      of these points a .PROGRAM command followed by the  FORTRAN  code  which
      waits for the user to do something such as press the RETURN key.  If the
      text is being justified, then number signs which produce spaces  in  the
      resulting  text  would  have to be inserted into the bottom line on each
      page to get the bottom line to be the same length as  the  rest  of  the
      lines on the page.  Of course, if the message is ever revised, or if the
      margins or the number of lines which can be displayed on a single screen
      are  ever  changed, then the .PROGRAM commands and the following FORTRAN
      code and the number signs which were used to  obtain  the  extra  spaces
      would  have  to be removed before determining the breaks between the new
      pages.
96                                           FORMAT Program User's Guide


The FORMAT program provides a set of commands which perform all  of  the
operations  necessary  for  dividing  the  messages into pages each just
large enough to fill the screen.  These commands are described  in  this
chapter.   The  resulting  FORTRAN  code  has  the general form which is
outlined below.  Where FORTRAN code is indicated as  being  inserted  at
the start of a message, at the start of a new page, or after a completed
page, each of these types of insertions can consist of several lines and
can  contain unique statement numbers both in the statement number field
and in the text of the statements.  The WRITE statements  represent  the
FORTRAN  code  which  is  specified by the .PREFACE command and which is
inserted before each individual FORMAT statement, but  this  code  could
also  consist  of several lines.  The multiple dots indicate lines which
are not shown in the outline but which would fill out  the  page  in  an
actual application.

      FORTRAN code to begin a new message

      FORTRAN code to clear screen before new page

      WRITE(ITTY,101)
  101 FORMAT(' Text at top of first page'/ ... )
         .
         .
      WRITE(ITTY,103)
  103 FORMAT( ... /' Text in middle of first page'/ ... )
         .
         .
      WRITE(ITTY,105)
  105 FORMAT( ... /' Text at bottom of first page')

      FORTRAN code to pause at bottom of page

      FORTRAN code to clear screen before new page

      WRITE(ITTY,106)
  106 FORMAT(' Text at top of second page'/ ... )
         .
         .
      WRITE(ITTY,103)
  108 FORMAT( ... /' Text in middle of second page'/ ... )
         .
         .
      WRITE(ITTY,110)
  110 FORMAT( ... /' Text at bottom of second page')

      FORTRAN code to pause at bottom of page

The parcelling out of lines into pages is activated by issuing a .PAGING
command.   The number of lines displayed on the page is set to zero when
this program is started and after each new  .TEXT  command.   The  lines
which are counted are, of course, the lines which result when the FORMAT
statements are used, not the lines in the source  text  which  is  being
processed.   If  a .PAGING command has not been issued, then page breaks
are not automatically inserted into the messages  but  the  counting  of
lines  is  still performed.  A new page can be forced at any point.  The
number of lines remaining unused at the bottom of the page can be tested
and  a  new  page  can  be  forced  if too few lines remain unused.  The
      Commands Needed for Paging on Video Terminals                         97


      bottoms of the pages can be filled out with extra blank lines, or enough
      blank  lines  can  be  inserted to cause the next line to be any desired
      distance from the bottom of  the  page.   The  character  inserted  into
      column  1 as a carriage control can also be made different for the first
      line on a page.

      Since the parcelling out of lines into pages depends upon the  insertion
      of  FORTRAN  code  before and after the text on each page, the number of
      lines which can be displayed on each page must be indicated in the  text
      which the FORMAT program processes.  Consequently, the resulting FORTRAN
      program can only be used on terminals which can display  at  least  this
      number  of lines on the screen.  The source text must be changed and the
      FORMAT program must be run again if the resulting FORTRAN code is to  be
      used  with  a  video  terminal which cannot display as many lines on the
      screen.  It is suggested that the  smallest  screen  size  be  made  the
      standard  if  the resulting FORTRAN program is to be used with terminals
      having different screen sizes.   However,  provided  that  the  type  of
      terminal  being used is known, the FORTRAN text which is inserted at the
      tops and at the bottoms of the pages can be written  in  such  a  manner
      that  the  same  resulting  FORTRAN  code  can  be  used  with  hardcopy
      terminals, with video terminals which can only scroll new text into  the
      bottom  of  the  screen,  and  with  video terminals which can clear the
      screen under program control.  It is only necessary  that  the  code  to
      clear  the screen and to pause at the bottom of the screen be skipped if
      a hardcopy terminal is used, and that the code which clears  the  screen
      be skipped if the terminal cannot clear the screen.
98                                           FORMAT Program User's Guide


          Example of FORTRAN Code Containing Several Messages
          ------- -- ------- ---- ---------- ------- --------

If the FORMAT program is used to process a group of messages,  then  the
resulting FORTRAN code should also include the logic necessary to select
among these messages.  The resulting FORTRAN code might  be  similar  to
the subroutine which is outlined below.  This subroutine can display any
1 of 3 messages.  Paging is activated only during the processing of  the
second  message, which is assumed to be longer than the others.  Even if
paging is activated for the longer messages, it should still  be  turned
off for messages which use much less than a full page.

      SUBROUTINE HELP(ITTY,KNDMSG)
C     ITTY   = UNIT NUMBER ON WHICH TO DISPLAY MESSAGE
C     KNDMSG = SELECTS WHICH MESSAGE IS DISPLAYED
      GO TO(100,200,300),KNDMSG
      GO TO 4
  100 CONTINUE
      WRITE(ITTY,101)
  101 FORMAT(' Short first message')
      GO TO 4
  200 CONTINUE
      WRITE(ITTY,1)
      WRITE(ITTY,201)
  201 FORMAT(' First lines on 1st page of 2nd message')
         .
      write and format statements for middle of page
         .
      WRITE(ITTY,205)
  205 FORMAT(' Final lines on 1st page of 2nd message')
      WRITE(ITTY,2)
      READ(ITTY,3)IPAUSE
      WRITE(ITTY,1)
      WRITE(ITTY,206)
  206 FORMAT(' First lines on 2nd page of 2nd message')
         .
      write and format statements for middle of page
         .
      WRITE(ITTY,210)
  210 FORMAT(' Final lines on 2st page of 2nd message')
      WRITE(ITTY,2)
      READ(ITTY,3)IPAUSE
      GO TO 4
  300 CONTINUE
      WRITE(ITTY,301)
  301 FORMAT(' Short third message')
    1 FORMAT('1Top line on page')
    2 FORMAT(' Press RETURN to continue')
    3 FORMAT(1A1)
    4 RETURN
      END

The original source  text  which  would  be  processed  to  produce  the
subroutine shown above is outlined below.  The FORTRAN statements at the
start and end of the subroutine  were  programmed  in  the  conventional
manner  and  are  merely  copied  into  the resulting file.  The FORTRAN
statements starting with the SUBROUTINE statement and extending  through
      Commands Needed for Paging on Video Terminals                         99


      the  computed  GO  TO  statement  appear after a .PROGRAM command in the
      original source text.  Likewise, the FORMAT, RETURN and  END  statements
      at  the end of the subroutine also appear after a .PROGRAM command.  The
      GO TO 4 statement which transfers back to the calling program after  the
      previous  message  and  the labeled CONTINUE statement which defines the
      start of the section to which the computed GO TO transfers  are  defined
      by  a  .DEFINE  GROUP  command and are inserted before the start of each
      message.  The WRITE(ITTY,1) statement which clears each page is  defined
      by  a  .DEFINE TOP command and is inserted at the top of each page.  The
      WRITE(ITTY,2) statement and READ(ITTY,3)IPAUSE statement which tell  the
      user that the program is pausing and then wait for the user to press the
      RETURN key are defined by a .DEFINE BOTTOM command and are  inserted  at
      the bottom of each page.

      .define group
            GO TO 4
      $$$$$ CONTINUE$=
      .define top
            WRITE(ITTY,1)
      .define bottom
            WRITE(ITTY,2)
            READ(ITTY,3)IPAUSE
      .define preface
            WRITE(ITTY,$)
      .program
            SUBROUTINE HELP(ITTY,KNDMSG)
      C     ITTY   = UNIT NUMBER ON WHICH TO DISPLAY MESSAGE
      C     KNDMSG = SELECTS WHICH MESSAGE IS DISPLAYED
            GO TO(100,200,300),KNDMSG
      .use '
      .text 100
               .
            text of short first message
               .
      .text 200
      .paging
               .
            text of long second message
               .
      .page
      .no paging
      .text 300
               .
            text of short third message
               .
      .program
          1 FORMAT('1Top line on page')
          2 FORMAT(' Press RETURN to continue')
          3 FORMAT(1A1)
          4 RETURN
            END

      If the resulting FORTRAN code is to be  used  with  different  types  of
      terminals,  then  the  FORTRAN  code  which  is inserted at the tops and
      bottoms of the pages must perform differently depending upon the type of
      terminal being used.  For example, if a variable named IVIDEO is defined
      so that
100                                          FORMAT Program User's Guide


IVIDEO = -1, if a hardcopy terminal is being used

       = 0, if a video terminal is being used which can scroll but which
         cannot clear the screen under program control

       = 1, if a video terminal is being used which can both scroll  and
         clear the screen under program control

then all of these types of terminals would be handled  properly  if  the
text  which  is  inserted at the tops and at the bottoms of the pages is
similar to

.DEFINE TOP
      IF(IVIDEO.LE.0)GO TO 5
         .
      code to clear the screen
         .
    5 CONTINUE
.END DEFINITION

and

.DEFINE BOTTOM
      IF(IVIDEO.LT.0)GO TO 6
         .
      code to pause when the screen fills
         .
    6 CONTINUE
.END DEFINITION
      Commands Needed for Paging on Video Terminals                        101


                     Short Descriptions of the Paging Commands
                     ----- ------------ -- --- ------ --------

      Most of the commands which are summarized in this section of the  manual
      and  which  are  described in detail later in this chapter are used only
      when the lines in long messages are being parcelled out into pages.   In
      addition,  the  .BLANK, .LEADING, .NO LEADING, .NO TRAILING, .PARAGRAPH,
      .SKIP and  .TRAILING  commands,  which  were  described  in  an  earlier
      chapter,  are  interpreted  slightly  differently  when  paging is being
      performed.  These differences are also described here.

      Above the description of each command  is  shown  the  command  name  in
      capital letters together with a one line summary in small letters of the
      numbers, characters or line of text which can appear to its  right.   To
      make  the  descriptions  easier  to  read,  the command names are always
      capitalized in the descriptions, but the commands would not have  to  be
      capitalized  in  the actual source text which is processed by the FORMAT
      program.

      .BLANK number of single spaced lines at page bottom times -1

           Enough blank lines are inserted so that there is just  enough  room
           left  at  the bottom of the page for the indicated number of single
           spaced lines.  See also the .SKIP command.

      .BOTTOM line of text to be inserted at bottom of each page

           The line of text which appears to the right of the .BOTTOM  command
           is  to  be  copied  into the output file after the FORMAT statement
           which contains the final line which is  to  be  displayed  on  each
           page.   The  .BOTTOM  command  can  be  cancelled  by  a .NO BOTTOM
           command.  .NO BOTTOM is the  default.   A  group  of  lines  to  be
           inserted  at  the bottom of each page can be defined by the .DEFINE
           BOTTOM command instead.

      .DEFINE BOTTOM

           The following lines  of  text  through  the  next  .END  DEFINITION
           command  or  the next of any of the various .DEFINE commands are to
           be copied into the output file after  the  FORMAT  statement  which
           contains  the  final line which is to be displayed on each page.  A
           single line to be inserted at  the  bottom  of  each  page  can  be
           defined by the .BOTTOM command instead.

      .DEFINE TOP

           The following lines  of  text  through  the  next  .END  DEFINITION
           command  or  the next of any of the various .DEFINE commands are to
           be copied into the output file before the  FORMAT  statement  which
           contains  the  first line which is to be displayed on each page.  A
           single line to be inserted at the top of each page can  be  defined
           by the .TOP command instead.
102                                          FORMAT Program User's Guide


.LEADING

     Blank lines are to be  retained  at  the  top  of  each  new  page.
     Opposite  of  .NO LEADING which is the default.  Blank lines at the
     bottom of the page are discarded unless  a  .TRAILING  command  has
     been issued.

.NO BOTTOM

     No line of text is to be inserted at the bottom of each  new  page.
     Opposite of .BOTTOM.  .NO BOTTOM is the default.

.NO LEADING

     Blank lines are discarded at the top of  each  page.   Opposite  of
     .LEADING.  .NO LEADING is the default.

.NO PAGE CARRIAGE

     No special character is to replace the space in the leftmost column
     of  the  lines  which  are  included  on  each.   Opposite of .PAGE
     CARRIAGE.  .NO PAGE CARRIAGE is the default.

.NO PAGING

     The current FORMAT statement is not terminated and a  new  page  is
     not  begun  each time that the page fills.  However, .PAGE commands
     can still be issued to begin a new page and .TEST  PAGE  and  .TEST
     SPACING  commands  can still be issued to begin a new page if there
     are less than the indicated number of lines remaining unused on the
     page.  Opposite of .PAGING.  .NO PAGING is the default.

.NO TOP

     No line of text is to be inserted at the  top  of  each  new  page.
     Opposite of .TOP.  .NO TOP is the default.

.NO TRAILING

     Blank lines are discarded at the bottom of each page.  The page  is
     not  filled out with blank lines to make the number of lines on the
     page equal the page size indicated by  the  .PAGE  LENGTH  command.
     Opposite of .TRAILING.  .NO TRAILING is the default.

.PAGE

     The following text is to be displayed on a new page.  If  there  is
     already  something  on  the  current  page, then the current FORMAT
     statement is terminated and the line defined by the .BOTTOM command
     is  copied  into  the output file.  If subsequent lines of text are
     represented in the FORMAT statements, then the line defined by  the
     .TOP  command is copied into the output file before the next FORMAT
     statement and the first character defined  by  the  .PAGE  CARRIAGE
     command replaces the space in the leftmost column of the first line
     represented in the next FORMAT statement.
      Commands Needed for Paging on Video Terminals                        103


      .PAGE CARRIAGE carriage control for top line, for next lines

           The first character which is specified is to replace the  space  in
           the  leftmost  column  of the first line on each page.  If a second
           character is specified, it is to replace the space in the  leftmost
           column  of  each  of the subsequent lines on the page.  Opposite of
           .NO PAGE CARRIAGE which is the default.

      .PAGE LENGTH maximum number of lines on single page

           If paging is enabled, then a new page is begun each time  that  the
           indicated  number  of  lines  have  been represented on the current
           page.

      .PAGE POSITION line count on page as unsigned number
           or
      .PAGE POSITION adjustment of line count as signed number

           If the number following the .PAGE POSITION is unsigned,  then  this
           number  is  taken  to be the number of lines already represented on
           the current page.  If the number is  signed,  then  the  number  of
           lines  already on the page is taken to be the number already on the
           page adjusted by the  indicated  number.   This  command  does  not
           insert or remove any lines from the page but merely places the page
           boundary after a different line.

      .PAGING

           The current FORMAT statement is terminated and a new page is  begun
           each  time  that the page fills.  This parcelling out of lines into
           pages continues through the rest of  the  file.   Opposite  of  .NO
           PAGING which is the default.

      .PARAGRAPH indent, skip lines, unused lines needed on page

           If a .PAGING command has been issued, then a new page is  begun  if
           there is not enough room left on the current page for the indicated
           number of additional lines of text at  the  current  line  spacing.
           The next line of text will be placed into a new paragraph.

      .RESUME BOTTOM

           The line or lines of text which were defined by  either  a  .BOTTOM
           command  or  a  .DEFINE BOTTOM command but which were disabled by a
           subsequent .NO BOTTOM command are  to  again  be  inserted  at  the
           bottom of each new page.

      .RESUME TOP

           The line or lines of text which  were  defined  by  either  a  .TOP
           command  or  a  .DEFINE  TOP  command  but which were disabled by a
           subsequent .NO TOP command are to again be inserted at the  top  of
           each new page.
104                                          FORMAT Program User's Guide


.SKIP number of normal spaced lines at page bottom times -1

     Enough blank lines are inserted so that there is just  enough  room
     left at the bottom of the page for the indicated number of lines at
     the current line spacing.  See also the .BLANK command.

.TEST PAGE number of single spaced lines needed on page

     A new page is begun if there is not enough room left  on  the  page
     for the indicated number of additional single spaced lines of text.

.TEST SPACING number of multiple spaced lines needed on page

     A new page is begun if there is not enough room left  on  the  page
     for the indicated number of additional lines of text at the current
     line spacing.

.TOP line of text to be inserted at top of each page

     The line of text which appears to the right of the .TOP command  is
     to be copied into the output file before the FORMAT statement which
     contains the first line which is to be displayed on each page.  The
     .TOP command can be cancelled by a .NO TOP command.  .NO TOP is the
     default.  A group of lines to be inserted at the top of  each  page
     can be defined by the .DEFINE TOP command instead.

.TRAILING

     The bottom of each page will be filled with enough blank  lines  to
     make  the number of lines on the page equal the page size specified
     by the .PAGE LENGTH command.  Opposite of .NO TRAILING which is the
     default.  Blank lines at the top of the page are discarded unless a
     .LEADING command has been  issued.   Blank  lines  before  a  .TEXT
     command  or  at  the  end  of  the  document are discarded unless a
     .TRAILING command has  been  issued  and  an  extra  .PAGE  command
     appears at these locations.
      Commands Needed for Paging on Video Terminals                        105


      Table of Command Argument Types and Whether BREAK is Implied
      ----- -- ------- -------- ----- --- ------- ----- -- -------

      Basic         Is .BREAK   Argument      Corresponding
      Command         Implied   Type          NO Command

      .BLANK              yes   negative number
      .BOTTOM             no    text          .NO BOTTOM
      .DEFINE BOTTOM      no    several lines .NO BOTTOM
      .DEFINE TOP         no    several lines .NO TOP
      .LEADING            no    none          .NO LEADING
      .PAGE               yes   none
      .PAGE CARRIAGE      no    2 characters  .NO PAGE CARRIAGE
      .PAGE LENGTH        no    1 number
      .PAGE POSITION      yes   1 number
      .PAGING             yes   none          .NO PAGING
      .PARAGRAPH          yes   3 numbers
      .RESUME BOTTOM      no    none
      .RESUME TOP         no    none
      .SKIP               yes   negative number
      .TEST PAGE          yes   1 number
      .TEST SPACING       yes   1 number
      .TOP                no    text          .NO TOP
      .TRAILING           no    none          .NO TRAILING
106                                          FORMAT Program User's Guide


              Complete Descriptions of the Paging Commands
              -------- ------------ -- --- ------ --------

Most of the commands which were summarized earlier in this  chapter  and
which  are  described  in  detail in this section of the manual are used
only when the lines in long messages are being parcelled out into pages.
In   addition,   the   .BLANK,  .LEADING,  .NO  LEADING,  .NO  TRAILING,
.PARAGRAPH, .SKIP and .TRAILING commands, which  were  described  in  an
earlier  chapter,  are  interpreted  slightly differently when paging is
being performed.  These differences are also described here.

Above the description of each command  is  shown  the  command  name  in
capital letters together with a one line summary in small letters of the
numbers, characters or line of text which can appear to its  right.   To
make  the  descriptions  easier  to  read,  the command names are always
capitalized in the descriptions, but the commands would not have  to  be
capitalized  in  the actual source text which is processed by the FORMAT
program.

.BLANK number of single spaced lines at page bottom times -1

     If the .BLANK command is followed by a negative number, then enough
     blank  lines are to be generated before the next line of text which
     is represented in the FORMAT statements to cause there to  be  room
     for  only the indicated number of single spaced lines to be printed
     at the bottom of the page.  The  .SKIP  command  can  similarly  be
     followed  by  a  negative  number to cause enough blank lines to be
     generated to allow room for only the indicated number of  lines  to
     be printed at the current line spacing at the bottom of the page.

     If a .SPACING 2 command has been issued  to  give  double  spacing,
     then  a  .SKIP-5 command would be equivalent to a .BLANK-9 command,
     not to a .BLANK-10 command, since the line spacing after the bottom
     double spaced line would not be included in the line count.  Except
     for the adjustment of the number appearing  to  the  right  of  the
     .SKIP command to allow for the current line spacing, the .BLANK and
     .SKIP commands perform identically.  The description of  the  .SKIP
     command  appearing  later  in  this section of the manual should be
     consulted for additional information.


.BOTTOM line of text to be inserted at bottom of each page

     The characters which appear to the right of the .BOTTOM command  on
     the  same  line are to be copied into the output file on a separate
     line after the FORMAT statements  which  represent  each  completed
     page.   The character to the immediate right of the .BOTTOM command
     must be a space.  The line of text which is to be copied  into  the
     output  file  after  each  completed  page  starts  with the second
     character to the right of the .BOTTOM command, whether or not  this
     is a printing character, and extends through the rightmost printing
     character on the line.  The line of text specified by  the  .BOTTOM
     command  is  copied  into  the  output  file  as a line of ordinary
     FORTRAN  text.   This  line  is  not  represented  in  the   FORMAT
     statements.  For example, the line of text specified by the .BOTTOM
     command might be used to cause the program to pause after a page of
     text  has  been  displayed  until  the  user types something on the
      Commands Needed for Paging on Video Terminals                        107


           terminal.  The rules which govern the  specification  of  the  line
           which  is  defined  by  the  .BOTTOM command are identical to those
           which are described earlier in the manual for the .PREFACE command.

           Provided that there is already something on the page, the  line  of
           text  specified  by  the  .BOTTOM command is copied into the output
           file whenever a .PAGE command is issued, or whenever a  .TEST  PAGE
           or  a  .TEST  SPACING  command  fails,  or, provided that a .PAGING
           command has been issued,  whenever  either  the  page  fills  or  a
           .PARAGRAPH  command  is  issued  near the bottom of the page.  If a
           .TRAILING command has been issued,  then  enough  blank  lines  are
           first  represented  in the FORMAT statement to fill the rest of the
           page before the line specified by the .BOTTOM is  copied  into  the
           output  file.  It is not necessary that a .PAGING command have been
           issued before the .PAGE or the .TEST  PAGE  or  the  .TEST  SPACING
           command.

           If more than a single  line  must  be  inserted  after  the  FORMAT
           statements  which  represent  each  completed  page, then a .DEFINE
           BOTTOM command followed by the lines of text and then  by  an  .END
           DEFINITION  command  should  be  used  to define the lines instead.
           Regardless of which method is used to define the line or lines, the
           insertions  of the line or lines are performed similarly.  The line
           of text specified by the .BOTTOM command or the lines specified  by
           the  .DEFINE  BOTTOM  command will continue to be inserted into the
           output file after the FORMAT statements representing each completed
           page  of text until a subsequent .NO BOTTOM command is issued.  The
           insertion of the line or lines will be resumed if a .RESUME  BOTTOM
           command is issued after the .NO BOTTOM command.

           If the current page is empty and a .PAGE POSITION command  has  not
           been  issued,  then  a .PAGE or .TEST PAGE or .TEST SPACING command
           will not fill the page with blank lines and will not cause the line
           of  text  specified  by the .BOTTOM command to be inserted into the
           output file.  If paging has been  enabled,  but  the  page  is  not
           completely full when a .TEXT command is encountered or when the end
           of the source file is reached, then the rest of  the  page  is  not
           filled  with  blank  lines  and  the  line of text specified by the
           .BOTTOM command is not inserted unless a  .TEST  PAGE  or  a  .TEST
           SPACING  command  which fails or a .PAGE command is inserted before
           the .TEXT command or before the end of the input  file.   Inserting
           an  extra  .PAGE command before the .TEXT command or before the end
           of the input file will not cause any problems  even  if  the  final
           page is completely full.

           For example, the source text

           .page length 5.right margin 14.output width 55
           .paging.page carriage 1.no justify.trailing
           .preface       WRITE(ITTY,$)
           .bottom       READ(ITTY,999)LTRDMY
           This is some text on the first page.
           It will be filled with relatively little text.
           .page
           This comes after the page command.
           .program
             999 FORMAT(1A1)
108                                          FORMAT Program User's Guide


     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(ITTY,1)
         1 FORMAT(13H1This is some/12H text on the/6H first,
          16H page./11H It will be/12H filled with)
           READ(ITTY,999)LTRDMY
           WRITE(ITTY,2)
         2 FORMAT(11H1relatively/13H little text.///)
           READ(ITTY,999)LTRDMY
           WRITE(ITTY,3)
         3 FORMAT(11H1This comes/15H after the page/5H comm,
          14Hand.)
       999 FORMAT(1A1)

     which would, in turn, generate the following  pages  of  text  when
     run.

     *****************  *****************  *****************
     *1This is some  *  *1relatively    *  *1This comes    *
     * text on the   *  * little text.  *  * after the page*
     * first page.   *  *               *  * command.      *
     * It will be    *  *               *  *****************
     * filled with   *  *               *
     *****************  *****************


.DEFINE BOTTOM

     The .DEFINE BOTTOM command indicates that the  following  lines  of
     source  text  which do not start with periods are to be copied into
     the output file after the FORMAT statements  which  represent  each
     completed page.  The lines which are to be inserted into the output
     file will include all of the lines which do not start with  periods
     in the source text up to the next .END DEFINITION, .PROGRAM, .TEXT,
     .CONTINUE, .GROUP, .PREFACE, .TOP or .BOTTOM command or up  to  any
     of  the  various  .DEFINE commands.  If just a single line is to be
     inserted, then it could also be defined by a .BOTTOM command.   The
     single line would appear to the right of the .BOTTOM command on the
     same line.  Unlike the .BOTTOM command, however, the first line  of
     text  cannot  appear  to the right of the .DEFINE BOTTOM command on
     the same line unless a semicolon appears between the .DEFINE BOTTOM
     command and the rest of the line.

     Regardless of whether a .BOTTOM command or a .DEFINE BOTTOM command
     is  used to define the line or lines, the insertions of the line or
     lines are performed similarly.  The line of text specified  by  the
     .BOTTOM  command  or  the  lines  specified  by  the .DEFINE BOTTOM
     command will continue to be inserted into the output file after the
     FORMAT  statements representing each completed page of text until a
     subsequent .NO BOTTOM command is issued.  The insertion of the line
     or  lines  will  be  resumed  if a .RESUME BOTTOM command is issued
     after the .NO BOTTOM command.

     The Lines of text which are specified by the .DEFINE BOTTOM command
     are stored in the same area as are those which are specified by the
     .GROUP or .DEFINE GROUP, .PREFACE or .DEFINE PREFACE  and  .TOP  or
      Commands Needed for Paging on Video Terminals                        109


           .DEFINE  TOP  commands.   There  can be at most 30 lines containing
           together no more than 500 characters in all of these collections of
           lines.   These  lines  include  those  which  have been temporarily
           disabled by the .NO GROUP, .NO  PREFACE,  .NO  TOP  or  .NO  BOTTOM
           commands.

           The description of the .BOTTOM command should be consulted for more
           information  concerning  the  text  which  can  be  inserted at the
           bottoms of the pages.


      .DEFINE TOP

           The .DEFINE TOP command  indicates  that  the  following  lines  of
           source  text  which do not start with periods are to be copied into
           the output file before the FORMAT statement  which  represents  the
           top line on each new page.  The lines which are to be inserted into
           the output file will include all of the lines which  do  not  start
           with  periods  in  the  source text up to the next .END DEFINITION,
           .PROGRAM, .TEXT,  .CONTINUE,  .GROUP,  .PREFACE,  .TOP  or  .BOTTOM
           command  or  up  to any of the various .DEFINE commands.  If just a
           single line is to be inserted, then it could also be defined  by  a
           .TOP  command.   The  single  line would appear to the right of the
           .TOP command on the same line.  Unlike the .TOP  command,  however,
           the  first  line  of text cannot appear to the right of the .DEFINE
           TOP command on the same line unless a semicolon appears between the
           .DEFINE TOP command and the rest of the line.

           Regardless of whether a .TOP command or a .DEFINE  TOP  command  is
           used  to  define  the  line or lines, the insertions of the line or
           lines are performed similarly.  The line of text specified  by  the
           .TOP command or the lines specified by the .DEFINE TOP command will
           continue to be inserted into the  output  file  before  the  FORMAT
           statement  which  represents  the top line on each new page until a
           subsequent .NO TOP command is issued.  The insertion of the line or
           lines  will be resumed if a .RESUME TOP command is issued after the
           .NO TOP command.

           The Lines of text which are specified by the  .DEFINE  TOP  command
           are stored in the same area as are those which are specified by the
           .GROUP or .DEFINE GROUP, .PREFACE or .DEFINE PREFACE and .BOTTOM or
           .DEFINE  BOTTOM commands.  There can be at most 30 lines containing
           together no more than 500 characters in all of these collections of
           lines.   These  lines  include  those  which  have been temporarily
           disabled by the .NO GROUP, .NO  PREFACE,  .NO  TOP  or  .NO  BOTTOM
           commands.

           The description of the .TOP command should be  consulted  for  more
           information  concerning  the text which can be inserted at the tops
           of the pages.
110                                          FORMAT Program User's Guide


.LEADING

     The .LEADING command causes blank lines which are requested at  the
     tops  of  pages  to  be  represented in the FORMAT statements.  The
     .TRAILING command causes blank lines which  are  requested  at  the
     bottoms of pages or which are requested just before a .TEXT command
     or at the end of the input file to be  represented  in  the  FORMAT
     statements.   If  both  a  .LEADING command and a .TRAILING command
     have been issued, then blank lines which  are  requested  near  the
     bottom  of  a page for which there is not enough room at the bottom
     of the page will be represented at the top of the next page.

     The .LEADING command is the opposite of the  .NO  LEADING  command.
     .NO  LEADING  is  the  default.  If a .LEADING command has not been
     issued, or if a .NO LEADING command has been issued more  recently,
     then  blank  lines requested at the top of a page or which overflow
     the bottom of the previous page will be discarded.

     For example, the source text

     .page length 5.right margin 14.no justify
     .paging.page carriage 1.output width 55
     .preface       WRITE(ITTY,$)
     .skip
     A LEADING command hasn't been issued.
     .skip 2.page.leading.skip 1
     A LEADING command is now active.
     .trailing.skip 2
     Both LEADING and TRAILING are active.

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(ITTY,1)
         1 FORMAT(10H1A LEADING/15H command hasn't/6H been ,
          17Hissued.)
           WRITE(ITTY,2)
         2 FORMAT(1H1/10H A LEADING/15H command is now/2H a,
          16Hctive./)
           WRITE(ITTY,3)
         3 FORMAT(1H1/13H Both LEADING/13H and TRAILING/1H ,
          111Hare active.)

     which would, in turn, generate the following  pages  of  text  when
     run.

     *****************  *****************  *****************
     *1A LEADING     *  *1              *  *1              *
     * command hasn't*  * A LEADING     *  * Both LEADING  *
     * been issued.  *  * command is now*  * and TRAILING  *
     *****************  * active.       *  * are active.   *
                        *               *  *****************
                        *****************
      Commands Needed for Paging on Video Terminals                        111


      .NO BOTTOM

           The line of text specified by a previous  .BOTTOM  command  or  the
           lines of text specified by a previous .DEFINE BOTTOM command are no
           longer to be inserted at the bottom  of  each  completed  page.   A
           .RESUME  BOTTOM  command can, however, be issued later to cause the
           line or lines defined earlier to again be inserted at the bottom of
           each completed page.

           The .NO BOTTOM command is  not  equivalent  to  issuing  a  .BOTTOM
           command  without  anything  to  its  right  or to issuing a .DEFINE
           BOTTOM command immediately followed by an .END DEFINITION  command.
           Neither  a  .BOTTOM  command  without  anything  to its right nor a
           .DEFINE BOTTOM command immediately followed by an  .END  DEFINITION
           command  would allow a .RESUME BOTTOM command to be issued later to
           cause the line or lines defined earlier to again be inserted at the
           bottom of each page.


      .NO LEADING

           The .NO LEADING command causes blank lines which are  requested  at
           the tops of pages to be discarded.  The .NO TRAILING command causes
           blank lines which are requested at the bottoms of  pages  or  which
           are  requested  just  before  a  .TEXT command or at the end of the
           input file to be discarded.  If  both  a  .LEADING  command  and  a
           .TRAILING  command have not been issued, or if either a .NO LEADING
           command or a .NO TRAILING command has been  issued  more  recently,
           then  blank lines which are requested near the bottom of a page for
           which there is not enough room at  the  bottom  of  the  page  will
           likewise be discarded.

           The .NO LEADING command is the opposite of  the  .LEADING  command.
           .NO  LEADING  is  the  default.  If a .LEADING command has not been
           issued, or if a .NO LEADING command has been issued more  recently,
           then  blank  lines requested at the top of a page or which overflow
           the bottom of the previous page will be discarded.


      .NO PAGE CARRIAGE

           No character is to be inserted in place of the space  at  the  left
           end  of  each  line  on the page.  The .NO PAGE CARRIAGE command is
           equivalent  to  the  .PAGE  CARRIAGE  command  issued  without  any
           following  characters.   The  .NO  PAGE  CARRIAGE  command  is  not
           equivalent to a .PAGE CARRIAGE _ ,_  command since the latter would
           cause  spaces  to  be used as the carriage control characters.  The
           .NO  PAGE  CARRIAGE  command  would  cause  skipped  lines  to   be
           represented  in  the  resulting FORMAT statements by merely slashes
           while the .PAGE CARRIAGE _ ,_  command would cause skipped lines to
           be represented by /1X.

           .NO PAGE CARRIAGE is the default.
112                                          FORMAT Program User's Guide


     For example, the source text

     .page length 5.right margin 14.output width 55
     .preface       WRITE(1,$)
     .paging.page carriage 1,+.spacing 2.no justify
     This is double spaced on the first page.
     .page.page carriage _ ,_
     This has space as carriage control.
     .page.no page carriage
     This does not have carriage control.

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(1,1)
         1 FORMAT(15H1This is double/1H+/14H+spaced on the/
          11H+/12H+first page.)
           WRITE(1,2)
         2 FORMAT(15H This has space/1X/12H as carriage/1X/
          19H control.)
           WRITE(1,3)
         3 FORMAT(14H This does not//14H have carriage//1H ,
          18Hcontrol.)

     which would, in turn, generate the following  pages  of  text  when
     run.

     *****************  *****************  *****************
     *1This is double*  * This has space*  * This does not *
     *+              *  *               *  *               *
     *+spaced on the *  * as carriage   *  * have carriage *
     *+              *  *               *  *               *
     *+first page.   *  * control.      *  * control.      *
     *****************  *****************  *****************


.NO PAGING

     The lines displayed on each page are still to be counted, but a new
     page  is not to be generated whenever the page fills.  The carriage
     control character, if any, which will be inserted into the left end
     of  each  line  will  be  that  specified by the .CARRIAGE command,
     rather than by the .PAGE CARRIAGE command.   Subsequent  .PARAGRAPH
     commands  will not test the number of lines remaining unused on the
     page.  The .NO PAGING command  terminates  the  parcelling  out  of
     lines  into  separate  pages  which  might have been initiated by a
     previous  .PAGING  command  and  terminates  the  construction   of
     explicitly  declared  pages  which  might  have been initiated by a
     .PAGE command or by a .TEST PAGE or  .TEST  SPACING  command  which
     failed.   The .NO PAGING command terminates the current output line
     but does not terminate the FORMAT statement and does not change the
     number of lines which are considered to be on the page.  .NO PAGING
     is the default.

     A .TEST PAGE or a .TEST SPACING command can still be used  after  a
     .NO  PAGING  command  has  been  issued  to  cause a new page to be
     started if enough room for a specified number  of  lines  does  not
      Commands Needed for Paging on Video Terminals                        113


           remain  unused  at the bottom of the page.  If a .TEST PAGE command
           or a .TEST SPACING command fails, i.e. there is not  enough  unused
           room on the page, or if a .PAGE command is issued, then the current
           FORMAT statement will be treated as containing the end  of  a  page
           and  a  new  page will be started.  The .TEST PAGE command or .TEST
           SPACING command which fails or the .PAGE  command  will  cause  the
           current  FORMAT  statement  to be finished, the text specified by a
           .BOTTOM or .DEFINE BOTTOM command to be inserted after  the  FORMAT
           statement,  the  text specified by a .TOP or .DEFINE TOP command to
           be inserted before the  next  FORMAT  statement  and  the  carriage
           control characters specified by a .PAGE CARRIAGE command to be used
           for the following lines.  A new page will not, however, be  started
           whenever  the  current  page  fills.   If a .TEST PAGE command or a
           .TEST SPACING command succeeds, i.e. there is enough unused room on
           the  page, then the .TEST PAGE command or the .TEST SPACING command
           merely terminates the current line and is equivalent  to  a  .BREAK
           command.


      .NO TOP

           The line of text specified by a previous .TOP command or the  lines
           of  text  specified by a previous .DEFINE TOP command are no longer
           to be inserted at the top of each page.  A .RESUME TOP command can,
           however, be issued later to cause the line or lines defined earlier
           to again be inserted at the top of each page.

           The .NO TOP command is not equivalent to  issuing  a  .TOP  command
           without  anything  to its right or to issuing a .DEFINE TOP command
           immediately followed by an .END DEFINITION command.  Neither a .TOP
           command  without  anything  to  its right nor a .DEFINE TOP command
           immediately followed by an .END DEFINITION command  would  allow  a
           .RESUME  TOP  command to be issued later to cause the line or lines
           defined earlier to again be inserted at the top of each page.


      .NO TRAILING

           The .NO TRAILING command causes blank lines which are requested  at
           the  bottoms  of  pages  or which are requested just before a .TEXT
           command or at the end of the input file to be discarded.   The  .NO
           LEADING  command causes blank lines which are requested at the tops
           of pages to be  discarded.   If  both  a  .LEADING  command  and  a
           .TRAILING  command have not been issued, or if either a .NO LEADING
           command or a .NO TRAILING command has been  issued  more  recently,
           then  blank lines which are requested near the bottom of a page for
           which there is not enough room at  the  bottom  of  the  page  will
           likewise be discarded.

           The .NO TRAILING command is the opposite of the .TRAILING  command.
           .NO  TRAILING  is the default.  If a .TRAILING command has not been
           issued, or if a .NO TRAILING command has been issued more recently,
           then  blank  lines  requested  at  the  bottom  of  a  page will be
           discarded.
114                                          FORMAT Program User's Guide


.PAGE

     The next lines which are represented in the FORMAT  statements  are
     to  be  placed  on  a new page.  It is not necessary that a .PAGING
     command have been issued.  If some text is on the current page, and
     if  a  .TRAILING  command  has been issued, then enough blank lines
     will be generated to fill the page.  The line of text specified  by
     the  .BOTTOM  command  is  then inserted into the output file.  The
     current page is terminated by generating the blank lines which fill
     the current page and by inserting the line of text specified by the
     .BOTTOM command even if paging is  not  being  performed  when  the
     .PAGE command is issued.

     If a .LEADING  command  has  not  been  issued,  then  blank  lines
     requested  by  a subsequent .BLANK or .SKIP command will be ignored
     until something else is placed into the new page.  The line of text
     specified by the .TOP command will be inserted into the output file
     before the next FORMAT statement.  If the leftmost character in the
     first  line  represented  in  the next FORMAT statement is a space,
     then this space will be replaced by the first  character  specified
     by  the  .PAGE CARRIAGE command.  If the leftmost character in each
     of the second and subsequent lines represented in the  next  FORMAT
     statements  is  a  space  then  this  space will be replaced by the
     second character specified by the .PAGE CARRIAGE command.

     If a .PAGING command has been issued, then the new  page  will  end
     when  the  number of additional lines specified by the .PAGE LENGTH
     command have been represented  in  the  FORMAT  statements.   If  a
     .LEADING command and a .TRAILING command have not both been issued,
     but a .BLANK or a .SKIP command requests a  group  of  blank  lines
     which  extend across the end of the new page, then the lines beyond
     the end of the new page will be lost.  If both a  .LEADING  command
     and  a  .TRAILING command have been issued, and a .BLANK or a .SKIP
     command requests a group of blank lines which extend across the end
     of  the  new page, then all of these lines will be represented even
     if it requires 1 or more fully blank pages to do so.

     If a new page of text is started by a .PAGE command, but a  .PAGING
     command  has  not  been  issued,  then  this  new  page will not be
     terminated when the page fills.  Consequently, a  .BLANK  or  .SKIP
     command  which extends beyond the end of the page will generate all
     of the lines which it specifies, rather than having the blank lines
     be  cut  off  when  the page becomes full, provided that at least 1
     printing line appears after the blank lines.  However,  the  number
     of  lines  on the page will still be counted and can be tested by a
     .TEST PAGE or .TEST SPACING command.  The page will extend  to  the
     next  .TEST  PAGE  or  .TEST SPACING command which fails, or to the
     next .PAGE or .TEXT command.   If  a  .TRAILING  command  has  been
     issued, then the .TEST PAGE or .TEST SPACING command which fails or
     the .PAGE command would fill the rest of the page with blank  lines
     if  it  is  not  already  full.  The .TEST PAGE or .TEST SPACING or
     .PAGE command would then cause the line specified  by  the  .BOTTOM
     command to be inserted.

     If a new page of text is started by a .PAGE command, but a  .PAGING
     command  has not been issued, then a subsequent .TEXT command would
     turn off paging entirely.  If a .TEXT command is encountered, but a
      Commands Needed for Paging on Video Terminals                        115


           .PAGING  command  has  not  been issued, then the carriage controls
           specified by a .PAGE CARRIAGE command would not  be  inserted  into
           the left column of the following lines which are represented in the
           FORMAT statements, and the line of text specified by a .TOP command
           would  not  be  inserted  before the next FORMAT statement which is
           generated.  If a .PAGING command has been issued,  then  the  .TEXT
           command  would  start  a new page instead.  Regardless of whether a
           .PAGING command has been issued or not, the line of text  specified
           by  a  .BOTTOM  command is not inserted into the output file at the
           end of the page if the page is terminated by a .TEXT command or  is
           at  the  end  of  the input file unless the page just happens to be
           full.  If the final page is to be filled with blank lines and is to
           be  followed  by the line of text specified by the .BOTTOM command,
           then an extra .PAGE command should precede the .TEXT command or the
           end of the input file.

           For example, the source text

           .page length 5.right margin 14.output width 55
           .no justify
           .preface       WRITE(1,$)
           .page carriage 1
           .paging.trailing
           This page will be terminated early.
           .page
           This sentence is long enough that it will
           have to be continued onto a second page.

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(1,1)
               1 FORMAT(15H1This page will/14H be terminated/2H e,
                15Harly.//)
                 WRITE(1,2)
               2 FORMAT(14H1This sentence/15H is long enough/2H t,
                111Hhat it will/11H have to be/15H continued onto)
                 WRITE(1,3)
               3 FORMAT(15H1a second page.)

           which would, in turn, produce the following pages of text when run.

           *****************  *****************  *****************
           *1This page will*  *1This sentence *  *1a second page.*
           * be terminated *  * is long enough*  *****************
           * early.        *  * that it will  *
           *               *  * have to be    *
           *               *  * continued onto*
           *****************  *****************


      .PAGE CARRIAGE carriage control for top line, for next lines

           The  .PAGE  CARRIAGE  command  can  be  followed  by   2   printing
           characters.   If  the  first  character  is  specified,  then  this
           character will replace the space at the left end of the top line on
           each  page.   If  both  characters  are  specified, then the second
116                                          FORMAT Program User's Guide


     character will replace the space at the left end of the second  and
     following  lines  on  each  page.   If  only the first character is
     specified, then the space  at  the  left  end  of  the  second  and
     following  lines  on each page is not replaced.  If only the second
     character is specified, then this character will replace the  space
     at the left end of each line on each page.  If no characters follow
     the .PAGE CARRIAGE command, then the space at the left end of  each
     line  on the page will not be replaced.  Depending upon the FORTRAN
     system with which the resulting FORMAT  statements  are  used,  the
     character  at  the  left end of each line may be used as a carriage
     control to set the line spacing when the text is displayed.

     The structure of the .PAGE CARRIAGE command is  identical  to  that
     described  earlier  in  this manual for the .CARRIAGE command.  Any
     number of spaces or a single comma can separate the  characters  if
     both  are  specified,  but  the  spaces or the single comma are not
     necessary.  If only the first character is given, then it does  not
     matter  if  this  is  followed  by  a  comma.   If  only the second
     character is specified, then this must  be  preceded  by  a  single
     comma.   In order to have any of the flag characters or punctuation
     marks be used as the carriage control  characters,  these  must  be
     preceded by an underscore character.

     The characters specified by the .PAGE CARRIAGE command are inserted
     only  while  paging  is  being  performed, either due to a .PAGE or
     .PAGING command having been issued, or due to a .TEST PAGE or .TEST
     SPACING  command  having failed.  The .PAGE CARRIAGE command can be
     issued before paging begins, but the characters  specified  by  the
     command  will  not  be  inserted  until  paging begins.  The second
     character originally specified by a .CARRIAGE command will again be
     inserted  in place of the leftmost space on each line if paging was
     enabled by a .PAGING command and is then terminated by a subsequent
     .NO  PAGING command, or if paging was implied by a .PAGE command or
     by a .TEST PAGE or .TEST SPACING command which failed and  is  then
     terminated  by  a subsequent .TEXT command.  If a .CARRIAGE command
     has not specified a second character, then the space  at  the  left
     end  of each line will be left unchanged when paging is terminated.
     The characters specified by the  .PAGE  CARRIAGE  command  will  be
     inserted again if paging is resumed later.

     The characters specified by the .PAGE CARRIAGE command are inserted
     only  if the character at the left end of the line is a space or if
     the line is completely blank.  It does not matter if the  space  at
     the  left  end  of  the line was requested by an .OFFSET command, a
     .LEFT MARGIN command, an .INDENT command or a  .PARAGRAPH  command.
     A  blank  line into which the character is inserted might have been
     requested by a .BLANK or .SKIP command or might be the line  before
     a  paragraph  or  might be a line required to fill out a page.  The
     characters specified by the .PAGE CARRIAGE command are not inserted
     if  any  printing  character  appears  at the left end of the line.
     Unless either a .NO OFFSET command or a .OFFSET 0 command has  been
     issued, each line will be offset to the right to allow room for the
     insertion of these characters.
      Commands Needed for Paging on Video Terminals                        117


           The commands shown below would produce the results described to the
           right.

           .PAGE CARRIAGE 1,* !insert 1 at start of first line
                              !and * at start of following lines
           .PAGE CARRIAGE *,* !insert * at start of each line

           .PAGE CARRIAGE ,*  !same as the above

           .PAGE CARRIAGE 1   !insert 1 at start of first line
                              !but nothing into following lines
           .PAGE CARRIAGE 1,  !same as the above

           For example, the source text

           .page length 5.right margin 14.output width 55
           .no justify.trailing.paging
           .preface       WRITE(1,$)
           .carriage,+
           .page carriage 1-
           This is on a fixed length page.
           .page.no paging
           Paging is not being performed at this point.
           .page
           A page command started this page
           which will not end after a fixed number of lines.

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(1,1)
               1 FORMAT(13H1This is on a/13H-fixed length/5H-page,
                11H./1H-/1H-)
                 WRITE(1,2)
               2 FORMAT(14H+Paging is not/6H+being/11H+performed ,
                12Hat/12H+this point./1H+)
                 WRITE(1,3)
               3 FORMAT(15H1A page command/13H-started this/3H-pa,
                18Hge which/13H-will not end/14H-after a fixed/
                210H-number of/7H-lines.)

           which would, in turn, generate the following  pages  of  text  when
           run.

           *****************  *****************  *****************
           *1This is on a  *  *+Paging is not *  *1A page command*
           *-fixed length  *  *+being         *  *-started this  *
           *-page.         *  *+performed at  *  *-page which    *
           *-              *  *+this point.   *  *-will not end  *
           *-              *  *+              *  *-after a fixed *
           *****************  *****************  *-number of     *
                                                 *-lines.        *
                                                 *****************
118                                          FORMAT Program User's Guide


.PAGE LENGTH maximum number of lines on single page

     The .PAGE LENGTH command specifies the number of  lines  which  are
     expected  to  appear  on a single page.  If the number appearing to
     the right of the .PAGE LENGTH command  is  not  signed,  then  this
     number  is  used directly as the number of lines which are expected
     on a page.  If the number is signed, then the number of lines which
     are  expected  on  a  page  is  adjusted by this amount.  The .PAGE
     LENGTH command does not itself cause the lines to be parcelled  out
     into pages of the indicated length.

     The number of lines displayed on the page is set to  zero  by  each
     .TEXT  or  .PAGE  command  or  by  each .TEST PAGE or .TEST SPACING
     command which fails.  If a .PAGING command has  been  issued,  then
     the  number of lines displayed on the page is also set to zero each
     time that the current page fills.  The number of  lines  which  are
     considered  to be on the page can be modified by the .PAGE POSITION
     command.  Each line which is represented in the  FORMAT  statements
     increases the number of lines on the page by 1.

     If a .PAGING command has been issued,  then  a  new  page  will  be
     started  each  time that the number of lines specified by the .PAGE
     LENGTH command have been represented on the current page,  as  well
     as  each time that a .PARAGRAPH command is issued closer to the end
     of the page than is specified by the third number which appears  to
     the  right  of  the  .PARAGRAPH  command.   Regardless of whether a
     .PAGING command has  been  issued,  a  new  page  will  be  started
     whenever   a  .TEST  PAGE  or  a  .TEST  SPACING  command  requests
     verification of the availability of more lines  than  would  remain
     unused  on  a  page  of  the  length  specified by the .PAGE LENGTH
     command.

     If a .TRAILING command has been issued, then  the  bottom  of  each
     page  will  be  filled  with  enough  blank lines to make the total
     number of lines on the page be at least  equal  to  the  number  of
     lines  specified  by  the  .PAGE LENGTH command.  The bottom of the
     page is not filled with blank lines and the  text  specified  by  a
     .BOTTOM  or  .DEFINE BOTTOM command is not inserted into the output
     file if the page is terminated by a .TEXT command of if the page is
     terminated by reaching the end of the input file.

     The page size is assumed to be 22 lines if a .PAGE  LENGTH  command
     has  not been issued.  If the video terminal can display a total of
     24 lines, then this reserves 2 extra lines at  the  bottom  of  the
     screen  which  can  be  used for instructions about how the user is
     expected to signal to the program that  the  next  page  should  be
     displayed.
      Commands Needed for Paging on Video Terminals                        119


           For example, the source text

           .right margin 14.output width 55.no justify
           .trailing.paging.page carriage 1
           .preface       WRITE(ITTY,$)
           .page length 5
           This page will end with a PARAGRAPH command.
           .paragraph
           This page will end with a TEST PAGE command.
           .test page 2
           This final page will end with a PAGE command.
           .page

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 WRITE(ITTY,1)
               1 FORMAT(15H1This page will/11H end with a/5H PARA,
                15HGRAPH/9H command./)
                 WRITE(ITTY,2)
               2 FORMAT(15H1     This page/14H will end with/2H a,
                110H TEST PAGE/9H command./)
                 WRITE(ITTY,3)
               3 FORMAT(11H1This final/14H page will end/6H with ,
                16Ha PAGE/9H command./)

           which would, in turn, generate the following  pages  of  text  when
           run.

           *****************  *****************  *****************
           *1This page will*  *1     This page*  *1This final    *
           * end with a    *  * will end with *  * page will end *
           * PARAGRAPH     *  * a TEST PAGE   *  * with a PAGE   *
           * command.      *  * command.      *  * command.      *
           *               *  *               *  *               *
           *****************  *****************  *****************


      .PAGE POSITION line count on page as unsigned number
           or
      .PAGE POSITION adjustment of line count as signed number

           The number of lines which are considered to be on the current  page
           is  set  to  or  adjusted  by  the indicated number.  If the number
           appearing to the right of the .PAGE POSITION command is not signed,
           then  the  number of lines is set to the indicated number directly.
           If the number is signed, then the number of lines is incremented by
           the  indicated  number.   The lines indicated by the .PAGE POSITION
           command are assumed to be single spaced so the number of  lines  is
           not  multiplied  by the current line spacing.  If a .PAGING command
           has been issued and  the  .PAGE  POSITION  command  would  fill  or
           overflow  the  page, then the current page is finished and the line
           count on the new page is set to zero.

           A new top of page is generated if the page is empty when the  .PAGE
           POSITION  command is issued and if the start of a new page has been
           requested previously either by a .PAGING  command  or  by  a  .PAGE
120                                          FORMAT Program User's Guide


     command or by a .TEST PAGE or a .TEST SPACING command which failed.
     The .PAGE POSITION command can be issued without a following number
     to  generate a new top of page if the current page is empty but not
     change the line count on the page.  If the PAGE POSITION command is
     issued without a number, then another .PAGE POSITION command with a
     number should appear before any other text is  represented  in  the
     FORMAT  statements.  A new bottom of page is generated if the lines
     indicated as being on the page would fill  or  overflow  the  page,
     provided  that  a .PAGING command has been issued so that the lines
     are being parcelled out into pages.  Both a new top of page  and  a
     new  bottom  of  page  will  be  generated  if  the lines are being
     parcelled out into pages and nothing is on the page  when  a  .PAGE
     POSITION command which fills or overflows the page is issued.

     The .PAGE POSITION command is used to adjust the number of lines on
     the  page  to  allow  the  program  which uses the resulting FORMAT
     statements to independently insert lines into the page.  Since  the
     current  page  should  be finished before the lines are inserted if
     these lines would extend across the page  boundary,  a  .TEST  PAGE
     command should be issued before the .PROGRAM command which precedes
     the FORTRAN source code which inserts the lines.  Since  the  .TEST
     PAGE  command  might  generate a bottom of a page, a .PAGE POSITION
     command without a following number should also  appear  before  the
     .PROGRAM  command to generate a new top of page before the inserted
     lines if and only if the page is then empty.  If the text is  being
     multiply  spaced,  or if a .BLANK or a .SKIP command is issued just
     before the .TEST PAGE command, then a .TRAILING command  should  be
     active  when the .PROGRAM command is issued so that the blank lines
     will be represented in the FORMAT  statements  before  the  FORTRAN
     source  code which inserts the lines.  If it is not desired to have
     the .TRAILING command be active elsewhere, then it  can  be  issued
     just  before  the .PROGRAM command and the .NO TRAILING command can
     be issued just after the .PROGRAM command.  The FORTRAN source code
     should  be  followed by a .CONTINUE command if the text which is to
     be represented in the following FORMAT statements is to  appear  on
     the  same page as the inserted lines.  The .CONTINUE command should
     be followed in turn by the .PAGE POSITION command and its following
     number.   The  .PAGE  POSITION  command  with  its following number
     should not be issued before the .PROGRAM command since  that  could
     cause  a  new  bottom  of  page  to be generated prematurely if the
     inserted lines would fill the page.
      Commands Needed for Paging on Video Terminals                        121


           A typical sequence for these  various  commands,  for  the  FORTRAN
           SOURCE  code,  and  for  the text which is to be represented in the
           FORMAT statements on either side of the  inserted  lines  is  shown
           below.

                 .
           Text to be on page before inserting 10 lines
                 .
           .blank.test page 10.page position
           .trailing.program.no trailing
                 GO TO 1000 !Transfer to code to insert 10 lines
            1001 CONTINUE   !Return here after inserting 10 lines
           .continue.page position +10.blank
                 .
           Text to be on page after inserting 10 lines
                 .

           For example, the source text

           .paging.page length 5.right margin 14.output width 55
           .no justify
           .top       WRITE(ITTY,1)
           .define bottom
                 WRITE(ITTY,2)
                 READ(ITTY,3)LTRRTN
           .preface       WRITE(ITTY,$)
           .program
                 DATA ITTY/5/
                 KOUNT=0
                 CALL HELP(ITTY,1)
                 DO 2 LINE=1,4
                 KOUNT=KOUNT+1
                 WRITE(ITTY,1)KOUNT
               1 FORMAT(' INSERT',1I3)
               2 CONTINUE
                 CALL HELP(ITTY,2)
                 DO 4 LINE=1,3
                 KOUNT=KOUNT+1
                 WRITE(ITTY,3)KOUNT
               3 FORMAT(' INSERT',1I3)
               4 CONTINUE
                 CALL HELP(ITTY,3)
                 DO 6 LINE=1,4
                 KOUNT=KOUNT+1
                 WRITE(ITTY,5)KOUNT
               5 FORMAT(' INSERT',1I3)
               6 CONTINUE
                 CALL HELP(ITTY,4)
                 STOP
                 END
                 SUBROUTINE HELP(ITTY,KIND)
                 GO TO(100,200,300,400),KIND
             100 CONTINUE
           .text 500
           .page position
           .program
                 GO TO 4
122                                          FORMAT Program User's Guide


     C
     C     AFTER FIRST INSERTION
       200 CONTINUE
     .continue
     .page position 4
     This is after 1st insertion.
     .test page 3
     .page position
     .program
           GO TO 4
     C
     C     AFTER SECOND INSERTION
       300 CONTINUE
     .continue
     .page position +3
     This is after 2nd insertion.
     .test page 4
     .page position
     .program
           GO TO 4
     C
     C     AFTER THIRD INSERTION
       400 CONTINUE
     .continue
     .page position +4
     .program
         1 FORMAT('1Read message')
         2 FORMAT(' Press RETURN',_$)
         3 FORMAT(1A1)
         4 RETURN
           END

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           DATA ITTY/5/
           KOUNT=0
           CALL HELP(ITTY,1)
           DO 2 LINE=1,4
           KOUNT=KOUNT+1
           WRITE(ITTY,1)KOUNT
         1 FORMAT(' INSERT',1I3)
         2 CONTINUE
           CALL HELP(ITTY,2)
           DO 4 LINE=1,3
           KOUNT=KOUNT+1
           WRITE(ITTY,3)KOUNT
         3 FORMAT(' INSERT',1I3)
         4 CONTINUE
           CALL HELP(ITTY,3)
           DO 6 LINE=1,4
           KOUNT=KOUNT+1
           WRITE(ITTY,5)KOUNT
         5 FORMAT(' INSERT',1I3)
         6 CONTINUE
           CALL HELP(ITTY,4)
           STOP
      Commands Needed for Paging on Video Terminals                        123


                 END
                 SUBROUTINE HELP(ITTY,KIND)
                 GO TO(100,200,300,400),KIND
             100 CONTINUE
                 WRITE(ITTY,1)
                 GO TO 4
           C
           C     AFTER FIRST INSERTION
             200 CONTINUE
                 WRITE(ITTY,501)
             501 FORMAT(14H This is after)
                 WRITE(ITTY,2)
                 READ(ITTY,3)LTRRTN
                 WRITE(ITTY,1)
                 WRITE(ITTY,502)
             502 FORMAT(15H 1st insertion.)
                 GO TO 4
           C
           C     AFTER SECOND INSERTION
             300 CONTINUE
                 WRITE(ITTY,503)
             503 FORMAT(14H This is after)
                 WRITE(ITTY,2)
                 READ(ITTY,3)LTRRTN
                 WRITE(ITTY,1)
                 WRITE(ITTY,504)
             504 FORMAT(15H 2nd insertion.)
                 GO TO 4
           C
           C     AFTER THIRD INSERTION
             400 CONTINUE
                 WRITE(ITTY,2)
                 READ(ITTY,3)LTRRTN
               1 FORMAT('1Read message')
               2 FORMAT(' Press RETURN',$)
               3 FORMAT(1A1)
               4 RETURN
                 END

           which would, in turn, generate the following text when run.

           *****************  *****************  *****************
           *1Read message  *  *1Read message  *  *1Read message  *
           * INSERT  1     *  * 1st insertion.*  * 2nd insertion.*
           * INSERT  2     *  * INSERT  5     *  * INSERT  8     *
           * INSERT  3     *  * INSERT  6     *  * INSERT  9     *
           * INSERT  4     *  * INSERT  7     *  * INSERT 10     *
           * This is after *  * This is after *  * INSERT 11     *
           * Press RETURN  *  * Press RETURN  *  * Press RETURN  *
           *****************  *****************  *****************

           The dollar sign at the right end of the FORMAT statement  which  is
           used  to  tell the user to press the RETURN key is a DECsystem10/20
           notation which prevents the production of a carriage  return  after
           the  text  which is specified by the FORMAT statement.  This causes
           the cursor or printhead to remain to the right of the final line on
           the  page  until the user presses the RETURN key.  This dollar sign
124                                          FORMAT Program User's Guide


     must be quoted with an underscore in the  original  text  which  is
     processed  by  the  FORMAT program to prevent its being replaced by
     the number of the next FORMAT statement.


.PAGING

     The .PAGING command indicates that each time the  number  of  lines
     specified  by  the  .PAGE  LENGTH command have been included on the
     current page, then the current FORMAT statement is to be terminated
     and  a  new page is to be started.  The text specified by a .BOTTOM
     command or by a .DEFINE BOTTOM command is inserted into the  output
     file  after the FORMAT statement which specifies the bottom line of
     the page just finished.  The text specified by a .TOP command or by
     a .DEFINE TOP command is inserted before the FORMAT statement which
     specifies the top line on the next page.

     The issuing of the .PAGING command does not immediately cause a new
     page to be started unless the current page is already full when the
     paging command is issued.  If something is already on  the  current
     page  when the .PAGING command is issued, but the page is not full,
     then the rest of the lines on the current page will have the second
     character specified by the .PAGE CARRIAGE command as their carriage
     control characters.  The top line on the next page  will  have  the
     first  character  specified  by  the  .PAGE CARRIAGE command as its
     carriage control character and the second and subsequent  lines  on
     the next page will have the second character specified by the .PAGE
     CARRIAGE command as their  carriage  control  characters.   If  the
     current  page  either  is  empty  or  is  already full when .PAGING
     command is issued, then the next line of text which is  represented
     in the FORMAT statements will be the top line on a new page.

     The number of lines on the page is set to zero  by  each  .TEXT  or
     .PAGE command, or by each .TEST PAGE or .TEST SPACING command which
     fails.  A .CONTINUE command would start a new line in  the  output,
     but  does  not  return  the  line  count to zero.  A .PAGE POSITION
     command can be used  to  modify  the  number  of  lines  which  are
     considered  to  already  be  on  the  page.  None of these commands
     terminate the parcelling out of the lines into pages once a .PAGING
     command  has  been issued.  The .PAGING command does not change the
     number of lines on the page when it is issued unless  the  page  is
     already full.

     The parcelling out of the lines into pages can be terminated  by  a
     subsequent  .NO  PAGING  command.  The counting of the lines on the
     page continues after the .NO PAGING command has  been  issued,  but
     the  carriage  control  characters for the subsequent lines will be
     specified by the previous .CARRIAGE command,  rather  than  by  the
     .PAGE CARRIAGE command.  .NO PAGING is the default.

     It is not necessary that a .PAGING  command  have  been  issued  in
     order  to  obtain  output which is divided into pages.  The .PAGING
     command merely causes the output to be divided into pages each time
     the  page  fills.   The  pages  can also be declared explicitly.  A
     .PAGE command or a .TEST PAGE or a .TEST PAGING command which fails
     would  terminate  the  current  page and start a new page even if a
     .PAGING command has not been issued.  Regardless of which method is
      Commands Needed for Paging on Video Terminals                        125


           used  to  terminate the current page and to start the new page, the
           text specified by a .BOTTOM command or by a .DEFINE BOTTOM  command
           is   inserted  into  the  output  file  after  the  current  FORMAT
           statement, the text specified by a .TOP command or by a .DEFINE TOP
           command  is  inserted  before  the  next  FORMAT statement, and the
           carriage control characters specified by the .PAGE CARRIAGE command
           appear at the left ends of the subsequent lines.

           If a .PAGING or .PAGE command or a  .TEST  PAGE  or  .TEST  SPACING
           command  which  fails  has  been  issued, then a .TEXT command will
           terminate the current page, but the bottom of the page will not  be
           filled  with  blank  lines,  and  the  text  specified by a .BOTTOM
           command or by a .DEFINE BOTTOM command will not be inserted  unless
           the  page  is already full when the .TEXT command is issued.  If it
           is desired that an end of page  always  be  produced,  filled  with
           blank lines if a .TRAILING command has been issued, and followed by
           the text specified by a .BOTTOM or .DEFINE BOTTOM command, then the
           .TEXT command should be preceded by an extra .PAGE command.

           If a .PAGING command has been issued,  then  a  TEXT  command  will
           cause  the  text  specified  by  a .TOP command or by a .DEFINE TOP
           command to be inserted before the next FORMAT  statement  and  will
           cause  the characters specified by the .PAGE CARRIAGE command to be
           used as the carriage control characters for the  subsequent  lines.
           However,  if  a .PAGING command has not been issued, then the .TEXT
           command will terminate the use of the carriage  control  characters
           specified by the .PAGE CARRIAGE command and the text specified by a
           .TOP command or by a .DEFINE  TOP  command  will  not  be  inserted
           before the next FORMAT statement.

           For example, the source text

           .page length 5.right margin 14.output width 55
           .no justify.trailing
           .page carriage +-
           .preface       WRITE(ITTY,$)
           .top       WRITE(ITTY,1)
           .define bottom
                 WRITE(ITTY,2)
                 READ(ITTY,3)LTRRTN
           .program
                 DATA ITTY/5/
           .text 100
           This text will not be divided into pages.
           .paging
           This text will be split into pages and will
           use carriage control set by PAGE CARRIAGE.
           Text set by TOP and BOTTOM commands will
           be inserted at page boundary.
           .no paging
           This text will not be divided into pages.
           .program
               1 FORMAT('1Read message')
               2 FORMAT(' Press RETURN',_$)
               3 FORMAT(1A1)
                 END
126                                          FORMAT Program User's Guide


     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           DATA ITTY/5/
           WRITE(ITTY,100)
       100 FORMAT(15H This text will/15H not be divided/1H ,
          111Hinto pages./15H-This text will/11H-be split i,
          23Hnto)
           WRITE(ITTY,2)
           READ(ITTY,3)LTRRTN
           WRITE(ITTY,1)
           WRITE(ITTY,101)
       101 FORMAT(15H+pages and will/13H-use carriage/3H-co,
          112Hntrol set by/15H-PAGE CARRIAGE./10H-Text set ,
          22Hby)
           WRITE(ITTY,2)
           READ(ITTY,3)LTRRTN
           WRITE(ITTY,1)
           WRITE(ITTY,102)
       102 FORMAT(15H+TOP and BOTTOM/14H-commands will/2H-b,
          113He inserted at/15H-page boundary./9H This tex,
          26Ht will/15H not be divided/12H into pages.)
         1 FORMAT('1Read message')
         2 FORMAT(' Press RETURN',$)
         3 FORMAT(1A1)
           END

     which would, in turn, generate the following  pages  of  text  when
     run.

     *****************  *****************  *****************
     * This text will*  *1Read message  *  *1Read message  *
     * not be divided*  *+pages and will*  *+TOP and BOTTOM*
     * into pages.   *  *-use carriage  *  *-commands will *
     *-This text will*  *-control set by*  *-be inserted at*
     *-be split into *  *-PAGE CARRIAGE.*  *-page boundary.*
     * Press RETURN  *  *-Text set by   *  * This text will*
     *****************  * Press RETURN  *  * not be divided*
                        *****************  * into pages.   *
                                           *****************


.PARAGRAPH indent, skip lines, unused lines needed on page

     The .PARAGRAPH command indicates that the following lines which are
     represented  in the FORMAT statements will form a new paragraph.  A
     number of blank lines equal to the second argument times  the  line
     spacing  which  has  been set by the previous .SPACING command will
     appear between the previous text and the start  of  the  paragraph.
     The  first  line  of  the  paragraph will be indented from the left
     margin by the number of columns specified by  the  first  argument.
     The  first  2  arguments of the .PARAGRAPH command are described in
     detail earlier in this manual.

     The third argument is ignored if a .PAGING  command  has  not  been
     issued,  or if the current page is empty.  If a .PAGING command has
     been issued, then the third argument specifies the  minimum  number
      Commands Needed for Paging on Video Terminals                        127


           of  lines  of text for which there must still be room to be printed
           on the page at the current line spacing  and  in  addition  to  the
           spacing between the paragraphs.  If there is not enough room on the
           current page, and if a .TRAILING command has been issued, then  the
           rest  of  the  current  page  will  be  filled  with  blank  lines.
           Regardless of whether of a .TRAILING command has  been  issued,  if
           the test fails, then the FORMAT statement currently being assembled
           will be closed, and text specified by a .BOTTOM or  .DEFINE  BOTTOM
           command  will  be inserted.  If some text which is to be in the new
           paragraph follows, then the text specified by a .TOP or .DEFINE TOP
           command will be inserted before the text specified by a .PREFACE of
           .DEFINE PREFACE command, and the carriage  control  for  the  first
           line  of the paragraph will be set to the first character specified
           by the previous .PAGE CARRIAGE command.

           If the third argument is missing,  then  the  value  of  the  third
           argument  set by the previous .PARAGRAPH command will be used.  The
           third argument will be assumed to have the value  3  if  the  third
           argument has not been specified in any previous .PARAGRAPH command.

           If a .SPACING 2 command has been issued to get double spacing, then
           a  .PARAGRAPH  5,1,3 command would require that there be at least 8
           unused lines on the page.  This is the sum  of  the  1  blank  line
           after  the  last  line of the previous paragraph, the 2 blank lines
           between the paragraphs requested by  the  second  argument,  the  3
           printed  lines  requested by the third argument, and the total of 2
           blank lines between these printed lines.  The total number of lines
           can be calculated as

                1 less than the current line spacing
           plus the second argument times the current line spacing
           plus the third argument
           plus 1 less than the third argument times 1 less than the line
                spacing.

           For example, the source text

           .page length 10.right margin 24.output width 55
           .paging.page carriage 1.trailing
           .preface       WRITE(ITTY,$)
           .bottom       READ(ITTY,101)IPAUSE
           .paragraph
           This demonstrates that the .PARAGRAPH commands checks
           if there is enough room at the bottom of the page for
           a reasonable number of lines to be printed.
           .paragraph
           This follows a .PARAGRAPH command.  There wasn't enough
           room on the first page for this paragraph.
           .paragraph
           This also follows a .PARAGRAPH command. However, There
           is enough room on the page for it.
           .program
             101 FORMAT(1A1)
128                                          FORMAT Program User's Guide


     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(ITTY,1)
         1 FORMAT(25H1     This   demonstrates/9H that    ,
          116Hthe   .PARAGRAPH/25H commands checks if there/
          225H is  enough  room  at the/16H bottom of the p,
          39Hage for a/25H reasonable   number   of/5H line,
          416Hs to be printed.///)
           READ(ITTY,101)IPAUSE
           WRITE(ITTY,2)
         2 FORMAT(25H1     This   follows    a/9H .PARAGRA,
          12HPH,6X,8Hcommand./25H There wasn't enough room/
          225H on  the  first  page for/16H this paragraph./
          3/6X,19HThis also follows a/11H .PARAGRAPH,6X,1Hc,
          47Hommand./25H However, There is enough/7H room o,
          518Hn the page for it.)
           READ(ITTY,101)IPAUSE
       101 FORMAT(1A1)

     which would, in turn, generate the following 2 pages of  text  when
     run.

     *************************** ***************************
     *1     This   demonstrates* *1     This   follows    a*
     * that    the   .PARAGRAPH* * .PARAGRAPH      command.*
     * commands checks if there* * There wasn't enough room*
     * is  enough  room  at the* * on  the  first  page for*
     * bottom of the page for a* * this paragraph.         *
     * reasonable   number   of* *                         *
     * lines to be printed.    * *      This also follows a*
     *                         * * .PARAGRAPH      command.*
     *                         * * However, There is enough*
     *                         * * room on the page for it.*
     *************************** ***************************


.RESUME BOTTOM

     The text specified  by  the  previous  .BOTTOM  or  .DEFINE  BOTTOM
     command,  but  which  was  subsequently  disabled  by  a .NO BOTTOM
     command, is once again to be inserted into the  output  file  after
     the  FORMAT  statement which contains the bottom line on each page.
     A .RESUME BOTTOM command is implied by each new .BOTTOM or  .DEFINE
     BOTTOM  command.  The .RESUME BOTTOM command has no effect if a .NO
     BOTTOM command has not been issued.   The  .RESUME  BOTTOM  command
     cannot  be used to restore the insertion of the text specified by a
     previous .BOTTOM or .DEFINE BOTTOM command but which  was  disabled
     by  a  subsequent  .BOTTOM  or .DEFINE BOTTOM command which did not
     specify any text which was to be inserted.
      Commands Needed for Paging on Video Terminals                        129


      .RESUME TOP

           The text specified by the previous .TOP or .DEFINE TOP command, but
           which was subsequently disabled by a .NO TOP command, is once again
           to be inserted into the output file  before  the  FORMAT  statement
           which contains the top line on each page.  A .RESUME TOP command is
           implied by each new .TOP or .DEFINE TOP command.  The  .RESUME  TOP
           command  has  no  effect  if a .NO TOP command has not been issued.
           The .RESUME TOP command cannot be used to restore the insertion  of
           the  text  specified  by a previous .TOP or .DEFINE TOP command but
           which was disabled by a subsequent  .TOP  or  .DEFINE  TOP  command
           which did not specify any text which was to be inserted.


      .SKIP number of normal spaced lines at page bottom times -1

           If the .SKIP command is followed by a negative number, then  enough
           blank  lines are to be generated before the next line of text which
           is represented in the FORMAT statements to cause there to  be  room
           for only the indicated number of lines to be printed at the current
           line spacing at the bottom of the page.   The  .BLANK  command  can
           similarly be followed by a negative number to place the next line a
           specified number of single spaced lines  from  the  bottom  of  the
           page,  rather then allowing enough room for the indicated number of
           lines to be printed at the current line spacing at  the  bottom  of
           the page.

           A .LEADING command does not  have  to  be  active  when  the  .SKIP
           command  is  issued with a negative argument either at the top of a
           page or before any printing characters have been represented in the
           FORMAT  statements.   Enough blank lines will be generated when the
           next line which contains printing characters is represented in  the
           FORMAT  statement  to place this line at the proper location on the
           page regardless of whether  the  page  was  empty  when  the  .SKIP
           command  was issued.  The .SKIP command with a negative argument is
           ignored if the location of the next line would  already  be  at  or
           below the indicated position.

           The .SKIP command can be issued with a negative argument even if  a
           .PAGING  command has not been issued.  If a .PAGING command has not
           been issued, then the page will be assumed to extend from the .TEXT
           command, .PAGE command or .TEST SPACING or .TEST PAGE command which
           generated the last break between the pages.  If a  .PAGING  command
           has not been issued, then a .PARAGRAPH command will not have caused
           the break between the pages.

           The effect of a .SKIP command issued with a  negative  argument  is
           quite  different  from  that of a .TEST SPACING command.  The .SKIP
           command moves the next printed line down on the page so that  there
           is room for only the indicated number of lines to be printed on the
           page.  The .SKIP command never generates a  new  page.   The  .TEST
           SPACING  command  never  changes  the  location of the next line if
           there is enough room left on the page for the indicated  number  of
           lines  to  be  printed.   The .TEST SPACING command instead insures
           that there is enough room left on the page for the indicated number
           of lines to be printed, and starts a new page if there is not.
130                                          FORMAT Program User's Guide


     A .SKIP command issued with a negative argument can be followed  by
     a  .TEST  SPACING  command to place the following lines together at
     the bottom of the current page if they will fit or on  the  top  of
     the next page if they will not fit.  Reversing the order of these 2
     commands  would  insure  that  the  following  lines  would  appear
     together  at  the bottom of the current page if they fit, or on the
     bottom of the following page if they do not fit on  the  bottom  of
     the current page.

     If a .SPACING 2 command has been issued to obtain  double  spacing,
     then  a  .SKIP-3 command would generate enough blank lines to place
     the next line at a location 5 lines from the bottom of the page  so
     that there would be only enough room left on the page for 3 printed
     lines and the 2 blank lines between them.  A .BLANK-3 command would
     place  the  next  line at a location 3 lines from the bottom of the
     page regardless of the line spacing.

     For example, the source text

     .page length 10.right margin 24.output width 55
     .paging.page carriage 1
     .preface       WRITE(ITTY,$)
     .bottom       READ(ITTY,101)IPAUSE
     This is single spaced at the top of the page.
     .skip-2
     This is single spaced at the bottom of the page.
     .spacing 2
     This is double spaced at the top of the page.
     .skip-2
     This is double spaced at the bottom of the page.
     .program
       101 FORMAT(1A1)

     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(ITTY,1)
         1 FORMAT(25H1This is single spaced at/9H the top ,
          112Hof the page.///////23H This is single spaced ,
          22Hat/24H the bottom of the page.)
           READ(ITTY,101)IPAUSE
           WRITE(ITTY,2)
         2 FORMAT(25H1This is double spaced at//9H the top ,
          112Hof the page./////25H This is double spaced at/
          2/24H the bottom of the page.)
           READ(ITTY,101)IPAUSE
       101 FORMAT(1A1)
      Commands Needed for Paging on Video Terminals                        131


           which would, in turn, generate the following text when run.

           *************************** ***************************
           *1This is single spaced at* *1This is double spaced at*
           * the top of the page.    * *                         *
           *                         * * the top of the page.    *
           *                         * *                         *
           *                         * *                         *
           *                         * *                         *
           *                         * *                         *
           *                         * * This is double spaced at*
           * This is single spaced at* *                         *
           * the bottom of the page. * * the bottom of the page. *
           *************************** ***************************


      .TEST PAGE number of single spaced lines needed on page

           A new page is to be started if there is not enough room left on the
           current  page  for the indicated number of additional single spaced
           lines of text.  The maximum number of lines which  are  assumed  to
           fit  into  the  current  page  is  the  number which was set by the
           previous .PAGE LENGTH command.  The page  is  assumed  to  hold  22
           lines if a .PAGE LENGTH command has not been issued.

           The .TEST SPACING command can similarly be used to check  if  there
           is enough room left on the current page for the indicated number of
           additional lines spaced  according  to  the  most  recently  issued
           .SPACING  command.  If a .SPACING 2 command has been issued to give
           double spacing, then a .TEST SPACING 5 command would be  equivalent
           to a .TEST PAGE 9 command, since a blank line would not have to fit
           into the page below  the  bottom  printed  line.   Except  for  the
           adjustment  of  the  number  appearing  to  the  right of the .TEST
           SPACING command to allow for the current line  spacing,  the  .TEST
           PAGE   and   .TEST   SPACING  commands  perform  identically.   The
           description of the .TEST SPACING command should  be  consulted  for
           additional information.


      .TEST SPACING number of multiple spaced lines needed on page

           A new page is to be started if there is not enough room left on the
           current  page  for the indicated number of additional lines of text
           to be displayed at the line spacing set by  the  previous  .SPACING
           command.  The maximum number of lines which are assumed to fit into
           the current page is the number which was set by the previous  .PAGE
           LENGTH  command.   The  page is assumed to hold 22 lines if a .PAGE
           LENGTH command has not been issued.

           It is not necessary that the lines are  being  parcelled  out  into
           pages  when  the  .TEST SPACING command is issued.  A .TEST PAGE or
           .TEST SPACING command which fails, i.e. which  requires  more  than
           the  remaining  unused  space  on  the  page,  or  a .TEXT or .PAGE
           command, sets the  line  count  on  the  new  page  to  zero.   All
           subsequent  lines  are counted and are considered to be on the same
           page until a new page is started regardless of  whether  a  .PAGING
           command has been issued.
132                                          FORMAT Program User's Guide


     If the .TEST SPACING command succeeds, i.e. if there is enough room
     left  on  the current page to display the indicated number of lines
     at the  current  line  spacing,  then  the  .TEST  SPACING  command
     terminates  the  current  output line but does not start a new page
     and is equivalent to  a  .BREAK  command.   If  the  .TEST  SPACING
     command fails, i.e. if there is not enough room remaining unused on
     the current page, then the page is filled with  blank  lines  if  a
     .TRAILING  command has been issued, the current FORMAT statement is
     finished, and the text specified by a  .BOTTOM  or  .DEFINE  BOTTOM
     command  is inserted after the FORMAT statement.  Also, if the test
     fails, then the text specified by a .TOP  or  .DEFINE  TOP  command
     will be inserted before the next FORMAT statement, and the carriage
     control characters specified by the .PAGE CARRIAGE command will  be
     inserted at the left ends of the lines of text on the new page.  If
     a .PAGING command has not been issued, then the next .TEXT  command
     will  resume  the  insertion  of  the  carriage  control  character
     specified by the .CARRIAGE command.

     If NUMBER1 is the number specified by the .TEST SPACING command and
     if  NUMBER2  is the number specified by the .SPACING command, then,
     in order for a new page not to be necessary,  there  must  be  room
     enough  on  the  current  page  for  NUMBER1  printed lines and for
     (NUMBER1-1) groups of (NUMBER2-1) blank lines between  the  printed
     lines.  The number of required lines can then be expressed as

          NUMBER1+((NUMBER1-1)*(NUMBER2-1))

     which is equivalent to

          1+(NUMBER2*(NUMBER1-1))

     where the asterisk represents  multiplication.   If  a  .SPACING  2
     command  has  been  issued  so that the output text is being double
     spaced,  then  a  .TEST  SPACING  5  command  would  test  for  the
     availability   of  9  lines  which  can  be  calculated  either  as
     5+((5-1)*(2-1)) = 5+(4*1) = 9 or as 1+(2*(5-1)) = 1+(2*4) = 9.

     The .TEST PAGE command is similar  to  the  .TEST  SPACING  command
     except  that  the .TEST PAGE command checks if there is enough room
     left on the current page for a specific  number  of  single  spaced
     lines.  If a .SPACING command has not been issued, or if a .SPACING
     1 command has been issued most recently, so that the lines of  text
     are  being  single  spaced,  then the .TEST SPACING command and the
     .TEST PAGE command are equivalent.
      Commands Needed for Paging on Video Terminals                        133


           For example, the source text

           .page length 7.right margin 14.output width 55
           .trailing.spacing 2
           .page carriage +-
           .preface       WRITE(ITTY,$)
           .top       WRITE(ITTY,1)
           .define bottom
                 WRITE(ITTY,2)
                 READ(ITTY,3)LTRRTN
           .program
                 DATA ITTY/5/
           .text 100
           TEST SPACING
           .test spacing 3
           commands are
           .test spacing 3
           interspersed
           .test page 5
           among these
           .test page 5
           double spaced
           .test spacing 3
           lines of text.
           .program
               1 FORMAT('1Read message')
               2 FORMAT(' Press RETURN',_$)
               3 FORMAT(1A1)
                 END

           would, when processed by this  program,  be  transformed  into  the
           following FORTRAN text

                 DATA ITTY/5/
                 WRITE(ITTY,100)
             100 FORMAT(13H TEST SPACING//13H commands are////)
                 WRITE(ITTY,2)
                 READ(ITTY,3)LTRRTN
                 WRITE(ITTY,1)
                 WRITE(ITTY,101)
             101 FORMAT(13H+interspersed/1H-/12H-among these/1H-/
                11H-/1H-/1H-)
                 WRITE(ITTY,2)
                 READ(ITTY,3)LTRRTN
                 WRITE(ITTY,1)
                 WRITE(ITTY,102)
             102 FORMAT(14H+double spaced/1H-/15H-lines of text./
                11H-)
               1 FORMAT('1Read message')
               2 FORMAT(' Press RETURN',$)
               3 FORMAT(1A1)
                 END
134                                          FORMAT Program User's Guide


     which would, in turn, generate the following  pages  of  text  when
     run.

     *****************  *****************  *****************
     * TEST SPACING  *  *1Read message  *  *1Read message  *
     *               *  *+interspersed  *  *+double spaced *
     * commands are  *  *-              *  *-              *
     *               *  *-among these   *  *-lines of text.*
     *               *  *-              *  *-              *
     *               *  *-              *  *****************
     *               *  *-              *
     * Press RETURN  *  *-              *
     *****************  * Press RETURN  *
                        *****************


.TOP line of text to be inserted at top of each page

     The characters which appear to the right of the .TOP command on the
     same  line are to be copied into the output file on a separate line
     before the FORMAT statement which represents the top line  on  each
     new page.  The character to the immediate right of the .TOP command
     must be a space.  The line of text which is to be copied  into  the
     output  file  before  the  start  of  each new page starts with the
     second character to the right of the .TOP command, whether  or  not
     this  is  a  printing  character, and extends through the rightmost
     printing character on the line.  The line of text specified by  the
     .TOP  command  is copied into the output file as a line of ordinary
     FORTRAN  text.   This  line  is  not  represented  in  the   FORMAT
     statements.   The  line of text specified by the .TOP command might
     be used to clear the screen on a video terminal before the text  on
     the  page  is  displayed  or  to  place  a standard header onto the
     screen.  The rules which govern the specification of the line which
     is  defined  by  the  .TOP command are identical to those which are
     described elsewhere  in  this  manual  for  the  .PREFACE  command.
     Dollar  signs  can appear in the line specified by the .TOP command
     to indicate locations at which the next statement numbers are to be
     inserted,  and  these  statement  numbers  can  be  manipulated  as
     described for the .PREFACE command.

     Provided that a .TRAILING command has been issued and that there is
     already  something  on the page, enough blank lines are represented
     in the FORMAT statement to fill the current page whenever  a  .PAGE
     command  is  issued,  or  whenever  a .TEST PAGE or a .TEST SPACING
     command fails, or, provided that a .PAGING command has been issued,
     whenever  the  page  fills.  Then the line of text specified by the
     .TOP command is copied into the output file just  before  the  next
     line  of text is placed on the next page.  It is not necessary that
     a .PAGING command have been issued before the .PAGE  or  the  .TEST
     PAGE or the .TEST SPACING command.

     If more than a single line  must  be  inserted  before  the  FORMAT
     statement  which  represents  the top line on each new page, then a
     .DEFINE TOP command followed by the lines of text and  then  by  an
     .END DEFINITION command should be used to define the lines instead.
     Regardless of which method is used to define the line or lines, the
     insertions  of the line or lines are performed similarly.  The line
      Commands Needed for Paging on Video Terminals                        135


           of text specified by the .TOP command or the lines specified by the
           .DEFINE  TOP  command  will continue to be inserted into the output
           file before the FORMAT statement representing the top line on  each
           new page of text until a subsequent .NO TOP command is issued.  The
           insertion of this text will be resumed if a .RESUME TOP command  is
           issued after the .NO TOP command.

           The .GROUP  or  .DEFINE  GROUP  command  defines  lines  which  are
           inserted  before a logical section of text which could be continued
           onto several pages.  The .TOP or .DEFINE TOP command defines  lines
           which  are  inserted before each new page.  The .PREFACE or .DEFINE
           PREFACE command  defines  lines  which  are  inserted  before  each
           individual  FORMAT  statement.   Typically,  the  .GROUP or .DEFINE
           GROUP command would be used  to  define  a  transfer  back  to  the
           calling  program  when the previous section was completed and would
           construct the numbered statement to which the calling program would
           transfer  to  use  the  current  section.   The .TOP or .DEFINE TOP
           command would define the FORTRAN statements  needed  to  clear  the
           screen  before the first and each subsequent page.  The .PREFACE or
           .DEFINE PREFACE command would insert the WRITE statements needed to
           use  the FORMAT statements.  If several of these types of lines are
           being inserted before a particular FORMAT statement, then the lines
           defined  by the .GROUP or .DEFINE GROUP command are inserted first,
           followed by the lines specified by the .TOP or .DEFINE TOP command,
           followed  in turn by the lines specified by the .PREFACE or .DEFINE
           PREFACE command.

           For example, the source text

           .page length 5.right margin 14.output width 55
           .no justify
           .preface       WRITE(ITTY,$)
           .top       WRITE(ITTY,100)
           .define bottom
                 WRITE(ITTY,101)
                 READ(ITTY,102)LTRDMY
           .end definition
           .paging.trailing
           .program;      ITTY=5
           .text;This page will be terminated early.
           .page
           This sentence is long enough that it will
           have to be continued onto a second page.
           .page
           .program
             100 FORMAT('1Sample Screen'/)
             101 FORMAT(/' Press RETURN',_$)
             102 FORMAT(1A1)
                 END
136                                          FORMAT Program User's Guide


     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           ITTY=5
           WRITE(ITTY,100)
           WRITE(ITTY,1)
         1 FORMAT(15H This page will/14H be terminated/2H e,
          15Harly.//)
           WRITE(ITTY,101)
           READ(ITTY,102)LTRDMY
           WRITE(ITTY,100)
           WRITE(ITTY,2)
         2 FORMAT(14H This sentence/15H is long enough/2H t,
          111Hhat it will/11H have to be/15H continued onto)
           WRITE(ITTY,101)
           READ(ITTY,102)LTRDMY
           WRITE(ITTY,100)
           WRITE(ITTY,3)
         3 FORMAT(15H a second page.////)
           WRITE(ITTY,101)
           READ(ITTY,102)LTRDMY
       100 FORMAT('1Sample Screen'/)
       101 FORMAT(/' Press RETURN',$)
       102 FORMAT(1A1)
           END

     which would, in turn, generate the following  pages  of  text  when
     run.

     *****************  *****************  *****************
     *1Sample Screen *  *1Sample Screen *  *1Sample Screen *
     *               *  *               *  *               *
     * This page will*  * This sentence *  * a second page.*
     * be terminated *  * is long enough*  *               *
     * early.        *  * that it will  *  *               *
     *               *  * have to be    *  *               *
     *               *  * continued onto*  *               *
     *               *  *               *  *               *
     * Press RETURN  *  * Press RETURN  *  * Press RETURN  *
     *****************  *****************  *****************

     The dollar sign in the FORMAT statement in the above example  is  a
     DECsystem10/20 notation for preventing a carriage return from being
     included at the end of a line which is displayed on  the  terminal.
     This allows the screen cursor to remain to the right of the request
     until the user presses the RETURN key.


.TRAILING

     The .TRAILING command indicates that each page which is  terminated
     by  a  .PAGE  command  or  by a .TEST PAGE or .TEST SPACING command
     which fails is to be filled with enough blank  lines  to  make  the
     number  of lines on the page be equal to the page size specified by
     the .PAGE LENGTH command.   If  both  a  .TRAILING  command  and  a
     .PAGING  command  have been issued, then a .PARAGRAPH command which
     appears closer to the bottom of the page than the number  of  lines
      Commands Needed for Paging on Video Terminals                        137


           specified  by  the  third  number  appearing  to  the  right of the
           .PARAGRAPH command will also fill the bottom of the page with blank
           lines.   Regardless of whether a .PAGING command has been issued, a
           page which is terminated by a .TEXT command or which is at the  end
           of the input file will not be filled with blank lines.  However, if
           a .TRAILING command has been issued, then any blank lines requested
           by  a  .BLANK  or .SKIP command just before the .TEXT command or at
           the end of the input file, and the interline spacing requested by a
           .SPACING command, will be represented at the bottom of the page.

           If both a .TRAILING  command  and  a  .LEADING  command  have  been
           issued,  then any blank lines requested at the bottom of a page for
           which there is not enough room on that page will be  shown  at  the
           top  of  the  next  page.   If both of these commands have not been
           issued, then blank lines which are requested at  the  bottom  of  a
           page,  but  for  which  there  is not enough room on that page, are
           discarded.

           If the output text is not being paged, then  the  .LEADING  command
           can  be  used  to  obtain  blank  lines  requested  at the start or
           immediately after a .TEXT command, and the .TRAILING command can be
           used  to  obtain blank lines requested at the end of the input file
           or immediately before a .TEXT command.  Regardless of  whether  the
           output  text  is  being  paged,  the  .TRAILING command changes the
           timing of the representation of blank  lines  which  are  requested
           just  before  a .PROGRAM command.  If the .TRAILING command has not
           been issued, then it is not known  when  the  .PROGRAM  command  is
           issued  whether  the blank lines will be needed, so the blank lines
           must be reserved until after the next .CONTINUE  command.   If  the
           .TRAILING  command  has been issued, then the blank lines requested
           immediately before a .PROGRAM command are represented in the FORMAT
           statement before the lines of the text appearing after the .PROGRAM
           command are copied as FORTRAN statements into the output file.

           The .TRAILING command is the opposite of the .NO TRAILING  command.
           If  a  .NO  TRAILING  command  has  been  issued, or if a .TRAILING
           command has not been issued, then the bottoms of the pages are  not
           filled  with  blank  lines  and  none  of the blank lines requested
           immediately before a .TEXT command or at the end of the input  file
           are represented in the FORMAT statements.

           For example, the source text

           .page length 5.right margin 14.no justify
           .paging.page carriage 1.output width 55
           .preface       WRITE(ITTY,$)
           A TRAILING command hasn't been issued.
           .page.trailing
           A TRAILING command is now active.
           .test page 3
           This comes after the TEST PAGE command.
138                                          FORMAT Program User's Guide


     would, when processed by this  program,  be  transformed  into  the
     following FORTRAN text

           WRITE(ITTY,1)
         1 FORMAT(11H1A TRAILING/15H command hasn't/5H been,
          18H issued.)
           WRITE(ITTY,2)
         2 FORMAT(11H1A TRAILING/15H command is now/5H acti,
          13Hve.//)
           WRITE(ITTY,3)
         3 FORMAT(11H1This comes/15H after the TEST/5H PAGE,
          19H command.)

     which would, in turn, generate the following  pages  of  text  when
     run.

     *****************  *****************  *****************
     *1A TRAILING    *  *1A TRAILING    *  *1This comes    *
     * command hasn't*  * command is now*  * after the TEST*
     * been issued.  *  * active.       *  * PAGE command. *
     *****************  *               *  *****************
                        *               *
                        *****************


                                     Appendix A



                         FORMAT Program Development History
                         ------ ------- ----------- -------

      May 1980
          Original release of the FORMAT program through DECUS library.

      August 1980
          (correction) Empty lines were being discarded when multiple  spacing
          in  nofill  mode.  A line represented by merely a semicolon to right
          of a command was being discarded when in nofill mode.

      August 1983
          The following  commands  were  added  to  support  paging  on  video
          terminals.   The  general  function of each group of new commands is
          listed at the top.

          screen top  screen bottom  1st statement new statement
          .TOP        .BOTTOM        .GROUP        .DEFINE PREFACE
          .DEFINE TOP .DEFINE BOTTOM .DEFINE GROUP .RESUME PREFACE
          .NO TOP     .NO BOTTOM     .NO GROUP
          .RESUME TOP .RESUME BOTTOM .RESUME GROUP

          select paging    page characteristics  other
          .PAGING          .PAGE LENGTH          .END DEFINITION
          .NO PAGING       .PAGE CARRIAGE        .PAGE POSITION
          .PAGE            .NO PAGE CARRIAGE
          .TEST PAGE
          .TEST SPACING

          (change) The .LENGTH command has been renamed  .OUTPUT  LENGTH,  the
          .BEGIN  command  has been renamed .TEXT, and the .FORMAT command has
          been renamed .CONTINUE, but the previous names are still recognized.

          (change) A preface line is no longer cancelled by a .TEXT command.

          (extension) The .COMMENT command has been added to allow  commenting
          of the source file.

          (extension) The  .BLANK  and  .SKIP  commands  now  accept  negative
          arguments  to allow skipping to within the indicated number of lines
          at the bottom of the page on a video terminal.

          (extension) The .PARAGRAPH command  now  accepts  a  third  argument
          which is the number of additional lines for which there must be room
          on the page.  A new page is generated if there is not enough space.

          (extension) The  dollar  signs  appearing  within  the  range  of  a
          .PROGRAM  command,  as  well  as  in  the  text defined by the .TOP,
          .BOTTOM, .GROUP and .PREFACE commands, can now  be  followed  by  an
          equal  sign  to change the number of the next statement or by a plus
          or minus sign to temporarily modify the value which is  copied  into
          the output.




                                     Appendix B



                       List of Files Included in this Package
                       ---- -- ----- -------- -- ---- -------

      ABSTRA.RNO  Abstract  containing  a  short  description  of  the  FORMAT
                  program.

      FMTD10.FOR  A  version  of  the  FMTASK  and  FMTEND  routines  for  the
                  DECsystem10  and  DECsystem20 computers.  The FMTASK routine
                  asks for the user to specify the input file  and  opens  it,
                  then  asks for the user to specify the output file and opens
                  it.  The FMTEND routine closes the files when they are done.
                  These routines are simple and can be modified easily for use
                  on other computers.

      FORMAT.DOC  The instruction manual.  This  was  produced  by  using  the
                  FROFF word processor to process the rough form of the manual
                  in the FORMAT.RNO file.

      FORMAT.FOR  The system independent portion of the FORMAT program.   This
                  must  be  loaded  with  a  version  of the FMTASK and FMTEND
                  routines customized for the computer  on  which  the  FORMAT
                  program will be used.

      FORMAT.GET  File containing the results which are expected when the test
                  cases  in  the  FORMAT.TRY  file are processed by the FORMAT
                  program.

      FORMAT.KEY  Data  file  which  when  processed  by  the  KEYWRD  program
                  produces the BLOCK DATA routine which defines the vocabulary
                  of commands recognized by the FORMAT program.

      FORMAT.RNO  The rough form of the instruction manual.  This is meant  to
                  be processed by the FROFF word processor.

      FORMAT.TRY  A group of test cases which when  processed  by  the  FORMAT
                  program  should  produce  a file identical to the FORMAT.GET
                  file.