Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-13 - renbr.doc
There are 6 other files named renbr.doc in the archive. Click here to see a list.


XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X                                                                            X
X  1. Adjust paper position so that dark frame on this page is               X
X     copied centered on paper 8.5 inches wide by 11 inches                  X
X     high.                                                                  X
X  2. Copy all remaining pages of document in same manner.                   X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
X                                                                            X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX








                         THERENBRUSERSGU    HERENBRUSERSGUI
                         E          E  G    T  R          U
                         DETHE  NBRUS  S    E  E  NBRUSERSG
                             H  ENBRU  R    D  H  E
                             T  RENBR  ERSGUI  T  RENBRU
                             E  ERENB          E       R
                             D  HEREN  USERSG  D  HERENB
                             I  THERE  RUSERS  I  T
                             U  ETHER  BRUSER  U  ETHERENBR
                             G  DETHE  NBRUSE  G          B
              IDETHEREN  USERSGUIDETHERENBRUSERSGUIDETHERENBRUSERSG
              U       ENBR          T  RENBRU  R       HERE       SGU
              G  DETHE  NB  SERSGUIDE   RENBR  E  GUIDE  ER  BRUSE  GU
              S  IDETHE  N  USERSGUID    RENB  S  SGUIDE  E  NBRUSE  G
              R  UIDET  RE  RUSERSGUI  T  REN  U  RSGUI  TH  ENBRU  RS
              E       THER       RSGU  ET  RE  R       IDET       USE
              S  SGU  ETHE  NBRUSERSG  DET  R  B  SERSG  DE  ERE  RU
              U  RSGU  ETH  ENBRUSERS  IDET    N  USERSG  D  HERE  RU
              R  ERSGU  ET  RENBRUSER  UIDET   E  RUSER  UI  THERE  RU
              B  SERSGU  E          E  GUIDET  R       RSGU  ETHERE  R
              NBRUSERSGUIDETHERENBRUSERSGUIDETHERENBRUSERSGUIDETHERENB
              E  RUSERS  IDET       U          H       SERSGUI       N
              R  BRUSER  UI  THERENBR  ERSGUIDET  RENBR  ERS  IDETHERE
              E  NBRUSE  G  DETHERENB  SERSGUIDE  ERENBR  E  GU
              H  ENBRUS  SG  DETHEREN  USERSGUID  HEREN  USE  GUIDE
              T  RENBRU  RSGU    HERE       SGUI       NBRUSER    DET
              E  ERENBR  ERSGUIDE  ER  BRUSERSGU  ETH  ENBRUSERSGU  ET
              D  HERENB  SERSGUIDE  E  NBRUSERSG  DETH  ENBRUSERSGU  E
              ID  HERE  RUSERSGUI  TH  ENBRUSERS  IDETH  ENBRUSERS  ID
               IDE    ENBR       IDET          R  UIDETH  E       SGU
                 DETHERENBRUSERSGUIDETHERENBRUSERSGUIDETHERENBRUSERS
                 IDE       R  ERSGUI  T      R       IDET          R
                GU  ETHERENB  SERSGU  ETH  ENB  SERSG  DE  ERENBRUSE
                S  IDETHEREN  USERSG  DET  REN  USERSG  D  H
                R  UIDETHERE  RUSERS  IDE  ERE  RUSERS  I  THEREN
                E  GUI     R  BRUSER  UID  HER  BRUSER  U       E
                S  SGUIDE  E  NBRUSE  GUI  THE  NBRUSE  G  DETHER
                U  RSGUID  H  ENBRUS  SGU  ETH  ENBRUS  S  I
                RU  RSGUI  TH  ENBR  ERSG  DET  RENBR  ER  UIDETHERE
                 RUS       ETHE    RUSE      E       RUSE          R
                   USERSGUIDETHERENBRUSERSGUIDETHERENBRUSERSGUIDETHE



                               The RENBR User's Guide

                                  Donald E. Barth

                                     March 1985














                                 Table of Contents
                                 ----- -- --------


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

            Instructions for Use on the DECsystem10 Computer  .  .  .  2

            Switches Typed by User to Select Results .  .  .  .  .  .  6

            Input File Restrictions   .  .  .  .  .  .  .  .  .  .  . 12

            Supported Variations of Statement Structure .  .  .  .  . 17

            Maintaining Logical Blocks of Statement Numbers   .  .  . 19

            Creating Logical Blocks of Statement Numbers   .  .  .  . 24

            Maintaining Number Regions Keyed to Statement Types  .  . 25

            Including NonFORTRAN Text in the Input File .  .  .  .  . 26

            Statement Types Recognized by RENBR   .  .  .  .  .  .  . 27

            Appendix A: Sample Table of Contents and Listing  .  .  . 31

            Appendix B: List of Files Forming This Package .  .  .  . 38

            Appendix C: RENBR Development History .  .  .  .  .  .  . 43

            Appendix D: Summaries Produced by the /Z Switch   .  .  . 48

            Appendix E: Instructions for the Support Programs .  .  . 50




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

      RENBR is a program which can change the  statement  numbers  in  FORTRAN
      programs  so  that these numbers increase uniformly, and which can print
      listings of  these  programs.   RENBR  is  itself  written  in  FORTRAN.
      Although   RENBR   accepts   instructions  containing  DECsystem10  file
      specifications, the routines which handle these file specifications  can
      easily be removed or replaced if RENBR is to be used on other computers.

      RENBR can process  programs  and  routines  which  are  written  in  the
      FORTRAN-77 language, in the FORTRAN-IV language, and in some dialects of
      the older FORTRAN-II language.  RENBR  can  also  process  programs  and
      routines  which use the FORTRAN language extensions allowed by version 7
      of the DECsystem10 FORTRAN-10 compiler.

      RENBR will treat a character  string  consisting  either  of  a  leading
      decimal  number followed by the letter H and then by the string, or else
      enclosed within matching apostrophes, as a  single  unit  similar  to  a
      variable  name.  RENBR would recognize that the 56s and the 57s, but not
      the 55s, are statement numbers in either of the lines

            IF(A.EQ.10H)GO TO 55;)GO TO 56;GO TO 57
      or
            IF(A.EQ.')GO TO 55;')GO TO 56;GO TO 57

      where the first semicolon (the ; character) on each line is  part  of  a
      character  string  but where the second semicolon on each line indicates
      that another statement follows on the same line.

      RENBR can also detect when a FORTRAN key word is instead being used as a
      variable  or  array name.  RENBR would recognize that the variable named
      DO55I and the array location READ(5,10) are being assigned values in the
      following statements.

            DO 55 I=12
            DO 55 I='5,10'
            DO 55 I=4H5,10
            DO 55 I=READ(5,10)
            READ(5,10)=DO55I

      Prior to using RENBR to renumber a new version of a program, the program
      should   be   compiled  without  getting  any  serious  error  messages.
      Statement numbers in statements which are not recognized by the compiler
      will  probably  not  be recognized by RENBR either.  Any statement which
      cannot be recognized by RENBR is  copied  into  the  renumbered  program
      without  change.   A  program  which  has  just been composed or revised
      should not be renumbered until after it has  been  compiled,  since  any
      statement number which is in an improperly written statement will not be
      correct after renumbering.  When programs which are  likely  to  contain
      language  features which might not be recognized by RENBR are renumbered
      for the first time, it is best to force the new statement numbers to  be
      completely  outside  the range of those originally in the program.  This
      will cause any  statement  numbers  in  statements  which  RENBR  leaves
      unchanged  to  reference  nonexisting statements.  These errors would be
      caught when the program is compiled the next time.  If, instead, the new
      statement numbers were to be similar to those originally in the program,
2                                                 The RENBR User's Guide


then, after the program has been renumbered, any statement number  which
appears in a statement which is not recognized would likely still be the
new number of a statement, although of the wrong one.

The user should also verify that lines in the program do  not  end  with
necessary  blank  characters  (sometimes  call  space characters), since
rightmost  blanks  are  trimmed  off  each  line  when  the  program  is
renumbered.   In particular, at least 1 printing character should appear
on the same line as, and to the right of, each blank character which  is
within  a  character string.  If the blank character is at the right end
of a string which follows a number and the letter H, then the string can
remain  in  the  H notation, but can be enclosed between parentheses, or
else the string can be converted to apostrophe notation.  If  the  blank
character is in a FORMAT statement, then the string can be broken into 2
separate strings with the second string appearing after a comma and on a
continuation  line.  The FORTRAN operating system's read routines insert
extra blanks to the right of the printing  characters  already  on  each
line  to  cause  all  lines  to  be of the same length.  To decrease the
lengths of the resulting files, RENBR discards all rightmost  blanks  on
each  line since it cannot distinguish between the blanks which actually
appeared at the right ends of the lines in the file being processed  and
those  which  were  inserted  by  the  operating system.  For example, a
statement such as

      IF(INDEX.EQ.1)LTRBFR(INDEX)=1H

could instead be written as

      IF(INDEX.EQ.1)LTRBFR(INDEX)=(1H )
or
      IF(INDEX.EQ.1)LTRBFR(INDEX)=' '

On the DECsystem10 or DECsystem20 computers, this statement  could  also
be rewritten as

      IF(INDEX.EQ.1)LTRBFR(INDEX)=1H ;
or
      IF(INDEX.EQ.1)LTRBFR(INDEX)=1H !


            Instructions for Use on the DECsystem10 Computer
            ------------ --- --- -- --- ----------- --------

On the DECsystem10 computer, FORTRAN programs can be written  either  in
conventional  column form having the statement text in columns 7 through
72, or in tab form in which an optional left justified statement  number
is  followed by a tab character and then by up to 66 characters of text.
The tab character is a nonprinting character which advances the location
of  the  next character to the next column beyond the next multiple of 8
columns from the left margin.  RENBR can  process  programs  written  in
either  column  or  tab  form,  or  in  a  mixture  of these forms.  The
renumbered program can have whichever form  is  selected  by  the  user.
RENBR can also, on request, convert tab characters in comment lines into
blanks filling to the tab stops.  Such tab to blank conversion is  often
necessary  when  readying  programs  for  compilation  on other computer
systems which do not recognize the tab character.
      Instructions for Use on the DECsystem10 Computer                       3


      RENBR can process a series of input files.  Each of  these  input  files
      can  contain  one  or  many main programs and routines.  A program, or a
      routine, or even a statement, which starts at the end of one file can be
      continued in the next file.

      The files which RENBR is to process cannot  contain  the  line  sequence
      numbers  which are used by some line oriented editors on the DECsystem10
      computer.  Such line sequence numbers must be removed before the file is
      processed,  since RENBR cannot distinguish between line sequence numbers
      and statement numbers.   On  the  DECsystem10  computer,  line  sequence
      numbers can be removed by selecting the /N switch when using the monitor
      COPY command to copy the file.

      When RENBR is started, it will suggest that the user type /H  to  obtain
      instructions.   RENBR  will  then  wait  for the user to type a command.
      Each line of the command must be no longer than 80 characters,  but  the
      command can be continued onto as many subsequent lines as are necessary.
      In order to continue the command onto a  subsequent  line,  the  command
      must  be  split  between  file  specifications, and either a comma or an
      ampersand (the & character) must be  typed  at  the  right  end  of  the
      current  line.   A file specification cannot itself be continued in this
      manner since whatever is typed on the next line will start  a  new  file
      specification.

      The command which could be typed by the user can be  read  from  a  file
      instead if the user types the name of this file either preceded directly
      by an at sign (the @ character) or followed directly by an @  character.
      If  the  command  is read from a file, then the names of the input files
      can appear on separate lines without the use  of  the  comma  or  the  &
      character at the ends of the preceding lines.  If the file is to contain
      several commands which are to be processed separately, then  these  must
      be  separated  by  semicolons  (the ; character).  All characters to the
      right of an exclamation point (the ! character), to the right  of  an  &
      character,  or  to  the  right  of  the  name of the command file in the
      original command which was typed by the user, are ignored.

      The command which is typed by the user or which is read from  a  command
      file  can consist of the name of the output file which is to contain the
      renumbered version of the program, and/or the name of  the  output  file
      which  is  to  contain  the  listing,  followed  by an equal sign (the =
      character) and then by  a  list  of  one  or  more  input  source  files
      separated  by commas.  If both output files are specified to the left of
      the equal sign, then a comma should separate the names of  these  files,
      and  a  switch which specifies something about either the listing or the
      renumbering, but not about both, must appear with at least one of  these
      file specifications.  The switch, which consists of a slash and a letter
      sometimes followed by a number, implies whether the output  file  having
      the  name  with  which  the  switch appears is to contain the renumbered
      program or the listing.  The switch is necessary if  both  output  files
      are  specified, since either type of output file can be specified first.
      If either 1 output file or none is specified to the left  of  the  equal
      sign,  and  if  no  switch  which specifies something about a listing is
      given, then the program is renumbered instead.  If neither  output  file
      is  specified, then the equal sign is not necessary, and the command can
      start with the name of the first input source file.
4                                                 The RENBR User's Guide


A single file specification can consist of a device name followed  by  a
colon,  followed  by  the file name.  If no device name is specified for
the output listing file, then the output  listing  file  is  written  to
logical device LPT:.  Any other file for which no device is specified is
assumed to be on or to be written to logical device DSK:.  The directory
or  path  upon  which  the  file  is located can be specified before the
device name, between the device name and the file  name,  or  after  the
file  name.  The directory specification can consist of an octal project
number, an octal programmer number, and a single subfile directory (SFD)
name  separated  by  commas  and  enclosed between left and right square
brackets.  If either a  programmer  number  or  an  SFD  name  is  being
specified, then all items to its left must also be supplied.  The user's
local directory is assumed if none is specified.  However, once the user
has  specified  either  a device name or a directory for an input source
file, then this device name or this directory continues to be  used  for
all  subsequent  input  source  files  for  which  these  items  are not
specified.

Each file name can consist of up to 6 characters followed  by  a  period
and  then  by an extension which can consist of up to 3 characters.  The
file name extensions .NEW, .LPT, .FOR and .RNB are used as defaults  for
the  resulting  renumbered file, for the resulting listing file, for the
original source files, and for the command file if  extensions  are  not
specified  for  the  names  of these files.  If a file name is to have a
null extension consisting of 3 blanks,  then  a  period  must  be  typed
following  the  first part of the file name.  The first part of the name
of the first original source file is used as the first part of the  name
of  either  of  the resulting files if the first part of the name of the
resulting file is not specified.  If the first part of  the  name  of  a
command file is missing, then the default name RENBR is assumed.

The user can specify the title which is to be shown at the top  of  each
page  of the listing by enclosing the title between apostrophes.  If the
title is itself to contain an apostrophe, then this  apostrophe  can  be
indicated  by  typing  2  apostrophes  where the single apostrophe is to
appear.  If a title is specified to the left of the equal sign, then the
file with which it is associated will contain the listing.

For example, the commands

     DACOPY
and
     DSK:DACOPY.NEW/I=DSK:DACOPY.FOR

are identical, and would cause the program in the file named  DACOPY.FOR
to  be  renumbered  with  the  result  being  placed into the file named
DACOPY.NEW.  The /I in this command is a switch  described  below  which
implies renumbering.

The commands

     DACOPY'this is a title
     'this is a title'DACOPY
and
     'this is a title'LPT:DACOPY.LPT=DSK:DACOPY.FOR
      Instructions for Use on the DECsystem10 Computer                       5


      are identical, and would cause the program in the file named  DACOPY.FOR
      to  be  listed  with  the  result  being  placed  into  the  file  named
      DACOPY.LPT, which would then  be  printed  on  device  LPT:.   The  text
      appearing  between  the  apostrophes  would be placed at the top of each
      page in the listing.  It is not necessary to include a  switch  in  this
      example,  since  the  specification  of  the title itself implies that a
      listing is desired.

      The commands

           DACOPY/I'title
           DACOPY'title'/I
           /I DACOPY'title
           'title'DACOPY/I
           /I'title'DACOPY
           'title'/I DACOPY
      and
           LPT:DACOPY.LPT'title',/I DSK:DACOPY.NEW=DSK:DACOPY.FOR

      are identical, and would cause the program in the file named  DACOPY.FOR
      to  be  both  renumbered  and listed, since the specification of a title
      implies that a listing is  desired,  and  the  /I  switch  implies  that
      renumbering is also desired.

      The command

           PRVI:.LST='title'DAHEST,DSKB:[22,56]DAHEFT.F4,DAVERB

      would generate a single file on device PRVI: containing a listing of the
      3  files  DAHEST.FOR,  DAHEFT.F4 and DAVERB.FOR, the latter 2 being read
      from the directory [22,56] on device DSKB:.  This command could also  be
      broken into 2 lines as shown below.

           PRVI:.LST='title'DAHEST,
           DSKB:[22,56]DAHEFT.F4,DAVERB

      The commands

           @[35,56,SAMPLE]
      and
           @[35,56,SAMPLE]RENBR.RNB

      are identical, and would cause further instructions to be read from  the
      file RENBR.RNB in the [35,56,SAMPLE] directory.  If This file contains

           .FOR=ONE;
           .FOR=TWO;.FOR=THREE
           ;.FOR=FOUR
           ;'title'ONE
           TWO,THREE
           FOUR

      then the files ONE.FOR, TWO.FOR, THREE.FOR and FOUR.FOR  in  the  user's
      local directory would be replaced by renumbered versions having the same
      names.  All  of  the  renumbered  files  would  then  be  listed.   Such
      overwriting  of an original file by a renumbered version having the same
      name should not be done with the only copy of a source file.
6                                                 The RENBR User's Guide


                Switches Typed by User to Select Results
                -------- ----- -- ---- -- ------ -------

Along with the names of the original and resulting files, the  user  can
type  a slash followed by a letter or a slash followed by a letter and a
number to select whether renumbering  or  listing  or  both  are  to  be
performed  and  to modify how these operations are to be performed.  The
letter must immediately follow the slash, and the following number  must
immediately  follow  the letter, although a colon can appear between the
letter and number.  The combination of the slash,  letter  and  optional
colon and number is called a switch.

Examples of all of the possible switches which can be typed by the  user
are  shown below together with typical values for the following numbers,
where allowed.

/A:2      add 2 blanks to lines in DO loop or IF THEN block
/B:100    base statement number is 100
/C        column form statements (see /T and /U)
/E:1      1 extra table of contents
/F:60     form feeds every 60 lines (see /L)
/G:1      gap of 1 line between each statement in listing
/H        help message is to be typed
/I:5      increment between statement numbers is 5
/J:0:4    jump 0 lines at top and 4 at bottom of first page
/K        keep lines intact (see /S)
/L:60:66  60 lines can be printed on pages 66 lines high
/M        maintain original statement numbers
/M:100    modify only statement numbers of 100 or larger
/M:1:9    modify only statement numbers in range 1 through 9
/P:1      page number at start of listing is to be 1
/S:9      split lines 9 characters beyond right margin
/T        tab form statements (see /C and /U)
/U        uniform left justification of statement numbers
/V        view listing on controlling terminal
/W:8      width of tab stops is 8
/Z        types array usage summary if listing is requested
'A Title' print the words A Title at top of each page

Typing a title enclosed in apostrophes, or any of the switches  /E,  /F,
/G,  /J,  /K,  /L,  /P,  /S or /V, causes a listing to be produced.  The
default options for listings are initial  page  number  1,  form  feeds,
intact long lines, single spacing, and 1 table of contents.  The default
number of printable lines per page is 60.  The default total  number  of
lines per page, including the blank lines used to simulate form feeds at
the page boundaries if the /L switch is issued, is  66.   These  default
values could also be selected by typing the following switches

     /F:60
or
     /L:60:66

Typing any of the switches /B, /C,  /I,  /M,  /T  or  /U  causes  a  new
renumbered  version  of  the  source  file  to be produced.  The default
options for renumbering are smallest statement number 1, increment 1 and
column form.
      Switches Typed by User to Select Results                               7


      The  switches  /A,  /W  and  /Z  do  not  indicate  whether  listing  or
      renumbering  is  to  be  performed,  and  apply to the results of either
      listing or renumbering.

      The switches are described in more detail below.

      /A causes extra blanks to be added to the  left  of  the  text  of  each
         statement  inside  a  DO  loop  or  inside  an  IF  THEN block in the
         renumbered file or in the listing.  The actual number of blanks added
         to  each  line  in  such  block structures is indicated by the number
         which follows the /A switch.  When DO loops or  IF  THEN  blocks  are
         embedded,  the  range  of  each  additional loop or block is indented
         further.  Either /A without a following number or /A:0 implies  /A:1.
         A  /A  switch  appearing  within  a  CRENBR  command  line (see later
         description of this) within a particular program or routine  can  for
         that  program  or  routine  supersede  the  indentation  of the block
         structure which has been selected by the user.

         Shown below is an example of the application of the /A  switch  to  a
         multiply embedded block structure.  The unindented FORTRAN statements
         are shown at the left and the indented FORTRAN  statements  resulting
         from the application of /A:5 are shown at the right.

               A=0                           A=0
               IF(B.EQ.0)THEN                IF(B.EQ.0)THEN
               C=0                                C=0
               IF(D.EQ.0)THEN                     IF(D.EQ.0)THEN
               E=0                                     E=0
               END IF                             END IF
               F=0                                F=0
               ELSE IF(G.EQ.0)THEN           ELSE IF(G.EQ.0)THEN
               H=0                                H=0
               DO WHILE(I.EQ.0)                   DO WHILE(I.EQ.0)
               J=0                                     J=0
               END DO                             END DO
               K=0                                K=0
               ELSE                          ELSE
               L=0                                L=0
               DO 1 M=1,2                         DO 1 M=1,2
               N=0                                     N=0
             1 CONTINUE                    1      CONTINUE
               O=0                                O=0
               END IF                        END IF
               END                           END

         Except for the addition of the extra blanks within the  range  of  DO
         loops  and of IF THEN blocks, the first printing character within the
         statement field of a FORTRAN statement will be either in column 7  if
         column  form  is selected, or following the tab character if tab form
         is selected regardless of the original indentation of the first  line
         of the statement.  The original indentation of each continuation line
         is preserved if possible.

      /B sets the smallest statement number which is to appear in each program
         and  routine  after  renumbering.   The  actual value of the smallest
         statement number is indicated by the  number  which  follows  the  /B
         switch.   If  a /I switch is given but a /B switch is not given, then
8                                                 The RENBR User's Guide


   the absolute value of the number appearing after the /I  switch  will
   be used as the smallest statement number.  A /B switch appearing on a
   CRENBR  command  line  (see  later  description  of  this)  within  a
   particular  program  or  routine  can  for  that  program  or routine
   supersede the smallest statement number selected by the user.

   If the /B switch is issued without a following number, and if the  /I
   switch has not been issued, then it is assumed that the user meant to
   type /I:1 instead of /B.  Values specified by the  user's  typing  of
   the  /B  switch  and/or  the  /I  switch  can be modified by a CRENBR
   command line (see later description of this) locally for the  routine
   in which this command line appears.  If a nonzero value of the lowest
   statement number has not been specified either by the user  or  by  a
   CRENBR  command line within the routine, then the value of the lowest
   statement number in a routine after renumbering will be the  absolute
   value of the statement number increment used to renumber the routine.
   This allows the production of reasonable statement  numbers  even  if
   the  statement  number  increment,  but  not  the  smallest statement
   number, is specified.  On the other hand, the lowest statement number
   can  be  specified  by  the user for all routines except for those in
   which it is specified internally by a CRENBR command line.

/C causes the renumbered statements to have the  column  form.   In  the
   resulting  file, the rightmost digit of each statement number will be
   in column 5 and the text of the initial line of each statement  which
   is  not within the range of an indented DO loop or IF THEN block will
   start in column 7.  A digit in the range 1 through 9 will  appear  in
   column   6  of  each  continuation  line.   Although  the  renumbered
   statements are generated in column form, the  original  programs  and
   routines  can  be in either column or tab forms, or in any mixture of
   these.

   The following 3 examples resulted from renumbering the same  sequence
   of  FORTRAN statements with the /C, /U, and /T switches respectively.
   Although the /U and /T switches appear to  produce  similar  results,
   the  /U  switch  causes  blanks  to be inserted between the statement
   number and the following text to force the  first  character  of  the
   statement  to be in column 7, while the /T switch causes a single tab
   character to appear between the statement number  and  the  following
   text.

     applying /C        applying /U        applying /T

   C234567890123456   C234567890123456   C234567890123456
       8 DO 9 I=1,2   8     DO 9 I=1,2   8       DO 9 I=1,2
         DO 9 J=1,5         DO 9 J=1,5           DO 9 J=1,5
       9 IJ=IJ+       9     IJ=IJ+       9       IJ=IJ+
        1LOC(I,J)          1LOC(I,J)             1LOC(I,J)
      10 TYPE 11,IJ   10    TYPE 11,IJ   10      TYPE 11,IJ
      11 FORMAT(I5)   11    FORMAT(I5)   11      FORMAT(I5)

/E causes extra tables of contents to be generated at  the  end  of  the
   listing.   The  actual  number  of extra tables of contents which are
   generated is indicated by the number which  follows  the  /E  switch.
   Extra  tables  of contents might be necessary if a long listing is to
   be bound as several volumes.  /E without a following number  or  /E:0
   implies /E:1.
      Switches Typed by User to Select Results                               9


      /F causes the listing to be prepared for display on a device  which  can
         eject  a  page  of  paper  when a form feed character is encountered.
         Line feeds would not then have to be used in the listing to  simulate
         form feeds.  The pages in the listing will be separated by form feeds
         if the output is being sent either to device LPT (the default) or  to
         device  TTY.  The character 1 (the digit one) will appear in column 1
         where a form feed is needed if the listing is written  to  any  other
         device.   /F  can  be  followed  by  the  number  of  lines which are
         printable  per  page  not  including   those   lines   skipped   over
         automatically  at the page boundaries.  /F without a following number
         or /F:0 implies /F:60.

      /G causes extra blank lines to be inserted between  consecutive  FORTRAN
         statements  in  the  listing, and between blocks of comment lines and
         the surrounding FORTRAN statements.  The actual number of blank lines
         which are inserted between consecutive statements is indicated by the
         number which follows  the  /G  switch.   No  extra  blank  lines  are
         inserted between comment lines or between the continuation lines of a
         single statement.  /G without a  following  number  or  /G:0  implies
         /G:1.

      /H types a summary of the switches which are  accepted  by  RENBR.   Any
         file  specifications  which  have  already been typed by the user are
         ignored.

      /I sets the increment between  consecutive  statement  numbers  in  each
         program  and routine after renumbering.  The actual increment between
         consecutive statement  numbers  is  indicated  by  the  number  which
         follows  the  /I  switch.   A  negative  increment,  such as would be
         specified by /I:-1, would cause the smallest number to be at the  end
         of  the  program  rather  than at the beginning.  The smallest number
         will be the absolute value of the statement number  increment  unless
         /B  is issued and is followed by a number which is greater than zero.
         Either /I without a following number or /I:0 implies /I:1.

      /J sets the number of extra blank lines which are to be inserted at  the
         tops  and bottoms of each page in the listing.  The actual numbers of
         blank lines which are inserted are indicated by 2 numbers  which  can
         follow  the  /J switch.  The first number which follows the /J switch
         sets the number of blank lines which are to appear in the listing  at
         the top of the 1st page, at the bottom of the 2nd page, at the top of
         the 3rd page, and so on.  This number can be followed by a colon  and
         then  by  the number of blank lines which are to appear at the bottom
         of the 1st page, at the top of the 2nd page, at the bottom of the 3rd
         page,  and  so  on.  These blank lines could be inserted to allow top
         binding of unburst fanfold paper and must be included in the  maximum
         number  of  printable  lines  specified  by the number following a /F
         switch or by the first number following a /L switch.  /J:6 or  /J:6:0
         would  skip 6 lines at the top of the 1st page, both before and after
         the separation between pages 2 and 3, between pages 4 and 5,  and  so
         on.   /J:0:6  or  /J::6  would skip 6 lines both before and after the
         separation between pages 1 and 2, between pages 3 and 4, and so on.

      /K causes long lines to be kept intact in the listing.   The  /S  switch
         can  be issued instead to select the point at which long lines are to
         be wrapped around to give narrower listings.
10                                                The RENBR User's Guide


/L causes the pages in the listing  to  be  separated  by  counted  line
   feeds.   The  /L  switch can be followed by the number of lines which
   are printable per page not including those  lines  which  are  to  be
   skipped  over  at  the page boundaries by the printing of extra empty
   lines.  This number can be followed by the total number of lines  per
   page  including  those lines which are to be skipped over at the page
   boundaries by the printing of extra empty lines.  /S:0 is assumed  if
   a  /S  switch  has  not  already  been selected.  If the /K switch is
   desired, then it must be issued after the /L switch.   /L  without  a
   following number or /L:0 implies /L:60:66.

/M causes only those statement numbers  which  are  within  a  specified
   range  to  be  renumbered.   If  the /M is issued without a following
   number, then the original statement numbers will be retained  in  all
   programs  and  routines which are processed.  It should be noted that
   the /M switch without following numbers has a different meaning  when
   included  on  a CRENBR command line within a program or routine being
   processed.

   If the /M switch is issued  with  2  following  numbers,  then  these
   numbers  are  the  the  lowest and highest original statement numbers
   which will be  modified  in  all  programs  and  routines  which  are
   processed.  All original statement numbers which are either less than
   the first number or greater than the second number will be  retained.
   The  first number following the /M switch is assumed to be 1 if it is
   missing but the second number is specified.   The  second  number  is
   assumed  to  be  99999  if  it  is  missing  but  the first number is
   specified.  The /M switch could be used to identify a  section  of  a
   program or routine which is to be modified and then grafted back into
   the original program or  routine  since  all  references  within  the
   section to statements outside the section would remain correct.

   If a /M switch, either with or without following numbers,  is  issued
   by the user, then all /B, /I, /M, /N and /O switches issued on CRENBR
   command lines within the programs and routines being  processed  will
   be ignored.

/P sets the page number of the first page in the  listing.   The  actual
   page  number shown on the first page is indicated by the number which
   follows the /P switch.  Issuing the /P switch with a  number  greater
   than  1  does  not  suppress  any  portion of the listing.  It merely
   changes the numbers shown at the upper right corners  of  the  pages.
   /P without a following number or /P:0 implies /P:1.

/S causes long lines to be split a desired distance  beyond  the  normal
   right  margin of the listing.  The portion of a long line which would
   extend beyond the right margin by more than the number of  characters
   indicated  by  the  number  which follows the /S switch will be right
   justified on the following line instead.

   If the /S or /S:0 switch is issued, then the  listing  will  have  at
   most  69  characters  per line (or 70 if the FORTRAN carriage control
   character is counted).  The right margin is then 1 inch wide on 8 1/2
   inch  wide paper (assuming 10 characters per inch), and FORTRAN lines
   containing over 59 characters will be  split  in  the  listing.   (In
   addition  to  the  statement  text,  each line printed in the listing
   contains the carriage control character and 10 characters in the line
      Switches Typed by User to Select Results                              11


         number and margin left of the statement number field.) If wider paper
         is to be cut down to 8 1/2 inch width, and if the printer  can  print
         more  characters,  then  a  narrower  right margin can be obtained by
         following the /S switch with the number of additional  characters  to
         be allowed before the line is split.

         If the /S is followed by a number which has a value of 69 or greater,
         then  this  number  is assumed to be the maximum number of characters
         which can be written on a single line in the listing.  Thus, /S:0 and
         /S:69  are  equivalent.   Either  /S:13  or /S:82 would give the same
         result as /K when FORTRAN programs and/or routines are being  listed,
         unless  a  /C switch has also been issued on a CRENBR command line in
         the program or routine being listed to cause more than 72  characters
         to  be  retained  in each FORTRAN comment line.  Since 120 characters
         are allowed in each line of a comment section introduced by either  a
         RENBRSTART  or a RENBRTITLE line (see later descriptions of these), a
         larger number in the range of the /S switch might be appropriate  for
         such comment sections even if the FORTRAN statements are not too long
         for the listing.

         A portion of a listing which was generated using /S:0 is shown below.
         In  place  of  a  line  number  at the left edge of the listing, each
         overflow line is  indicated  by  the  number  of  leading  blanks  in
         parentheses if the excess text starts with a blank, or by minus signs
         otherwise.  The page number on the  top  line  of  each  page  always
         extends  to  the normal right margin.  The width of each line in this
         sample has been reduced somewhat to fit this document.

         SAMPLE TITLE                                    Page   12
                                                      MAIN PROGRAM

         98     48 KM=IN-1
         99        IF(LINES.EQ.0)WRITE(ILPT,49)INDEX,IGROUP,NUMPRS
         ----                                                (KM),
         99       1NMBTWO,LTRTWO
         100    49 FORMAT(1H ,1I4,2H (,1I3,1H ,1I4,13X,1I2,2I4,2H
         ( 1)                                                ,5A1)

      /T causes the renumbered statements  to  have  the  tab  form.   In  the
         resulting  file,  a  tab  character  will appear between the optional
         statement number and the statement text.  A  digit  in  the  range  1
         through  9 will appear to the immediate right of the tab character in
         each continuation line.  Although the renumbered output is  generated
         in  tab  form, the original programs and/or routines can be in either
         column or tab forms, or in any mixture of these.   If  a  listing  is
         also  being  generated,  then  the  statement  numbers  will  be left
         justified in the listing, but the rest  of  each  statement  will  be
         shown in column form in the listing.

      /U causes the renumbered statements to have a variation  of  the  column
         form.   In  the  resulting file, the leftmost digit of each statement
         number will be in column 1 and the text of the initial line  of  each
         statement  which is not within the range of an indented DO loop or IF
         THEN block will start in column 7.  A digit in the range 1 through  9
         will  appear  in  column  6  of  each  continuation  line.   The only
         difference between the form produced when the /U is issued  and  that
         produced  by  the  /C  switch  is that the statement numbers start in
12                                                The RENBR User's Guide


   column 1 when /U is issued, but end in column 5 instead  when  /C  is
   issued.  If all of the statement numbers were to consist of 5 digits,
   then the results would be identical.

/V causes the listing to be typed on the controlling terminal.   If  the
   /L switch is also issued, then the user will be asked to position the
   paper to the next top of page before the program proceeds.

/W causes tab characters in the comment lines to be converted  to  blank
   characters  in  the  renumbered  file  or in the listing.  The actual
   separation of the tab stops is indicated by the number which  follows
   the  /W switch.  If a /W switch is not issued, then tab characters in
   comment lines are converted to blanks using a tab stop separation  of
   8  for the listing, but are not converted to blanks in the renumbered
   output.  Tab characters in the text of FORTRAN statements  are  never
   converted  to  blanks in the renumbered file.  /W without a following
   number or /W:0 implies /W:8.

/Z types onto the controlling terminal all of the information  by  which
   each  file  is  specified when this file is opened.  If a listing has
   been requested, then, after  the  listing  has  been  completed,  the
   largest   number   of  locations  which  were  needed  to  store  the
   information in the listing for any of the  programs  or  routines  is
   also  typed onto the controlling terminal.  The /Z switch is provided
   for use by developers of the RENBR program and is mentioned here only
   for  completeness.   The  information  which is displayed when the /Z
   switch is used is described in an appendix to this manual.


                        Input File Restrictions
                        ----- ---- ------------

RENBR can process programs and routines written according to  either  of
the  1966 or 1977 standards for FORTRAN or in some dialects of the older
FORTRAN-II.  RENBR can also process programs and routines which use  the
FORTRAN  language extensions allowed by the DECsystem10 F40 compiler and
by version 7 of the  DECsystem10  FORTRAN-10  compiler.   Unrecognizable
statements  are  copied into the renumbered output unchanged and will be
correct if these statements do not reference statement numbers.

RENBR can be used to produce listings of FORTRAN programs  and  routines
which  contain  syntax  errors.   However,  RENBR  should not be used to
renumber programs and routines  until  these  no  longer  produce  error
messages  when  compiled,  since  RENBR  is  unable to correctly convert
statement numbers which appear in statements having incorrectly  spelled
keywords or which reference missing statements.

The first time that RENBR is used to renumber an existing  program,  the
resulting  renumbered  program  should be checked for errors since it is
possible that the program uses some  extension  to  or  variant  of  the
FORTRAN language which cannot be handled properly by RENBR.  The easiest
way to test whether RENBR can correctly process a program is to renumber
it  with  the  new  statement  numbers  being outside the range of those
originally in the program, then to compile the  renumbered  program  and
let  the  compiler  report  any statement numbers which are missing.  If
RENBR  has  been  used  repeatedly  to  process  a  program  during  its
development,   then  such  checking  would  be  unnecessary,  since  any
      Input File Restrictions                                               13


      extensions or variants would have been  found  and  excluded  while  the
      program was being tested.

      RENBR cannot handle all possible programs  acceptable  to  all  possible
      compilers.   In  particular,  programs  which  do not meet the following
      restrictions will not be processed correctly.

       1.  The input source file must not contain line sequence  numbers  left
           of  the  statement  number  field.   If present, such line sequence
           numbers must be removed before the file is processed by RENBR.

       2.  Continuation lines following  a  comment  line  beginning  with  an
           initial  letter  C  (either  upper  or  lower  case), or any of the
           characters *, !, / or $, are taken as a continuation of the comment
           and  are  written  into  the  output  unchanged.   For this reason,
           comment lines can separate statements, but cannot appear  within  a
           single statement.

       3.  If some digits of a statement number in the  text  of  a  statement
           appear to the left of an exclamation point and additional digits of
           the same statement number appear on a following continuation  line,
           then  the  exclamation  point  and the comment to its right will be
           lost when the program  or  routine  is  processed.   The  statement
           number  would  still  be replaced by the proper new number, but the
           comment is considered to be part of the text of the old number  and
           is  discarded  along with the digits of the old number.  Similarly,
           if blanks appear between the digits of  a  statement  number,  then
           these blanks are discarded when the number is replaced.

           For example, the comment which appears inside the statement  number
           56 in the following statement

                 GO TO 5!THIS COMMENT APPEARS INSIDE A STATEMENT NUMBER
                16

           would be discarded, although the statement number itself  would  be
           recognized  and  treated  properly.  The comment would be retained,
           however, if it is entirely outside the statement number as  is  the
           case in either of the following statements.

                 GO TO 56!THIS COMMENT APPEARS AFTER A STATEMENT NUMBER
           or
                 GO TO !THIS COMMENT APPEARS BEFORE A STATEMENT NUMBER
                156

       4.  Statement numbers in obsolete statements, which have  been  changed
           to  comment  lines  by  the addition of the letter C, or any of the
           characters *, !, / or $, to the start of the statements,  are  left
           unchanged  and  therefore become incorrect when programs containing
           them are renumbered.  Some compilers ignore lines which begin  with
           certain  other  characters,  but RENBR treats such lines as FORTRAN
           statements and maintains the initial  characters.   (See  also  the
           description of the /R switch in the CRENBR command line.)

       5.  All blanks which appear at the right end of the lines in a file are
           discarded  when  the  contents  of  the  file  are  renumbered.  If
           character  strings  are  specified  as  the  number  of  characters
14                                                The RENBR User's Guide


     followed  by  the  letter  H and the characters of the string, then
     lines which end with character strings containing rightmost  blanks
     will  have  these  blanks removed.  Therefore, unless the processed
     file is written onto cards, a statement such as

          A=1H

     should instead be written as

          A=(1H )
     or
          A=' '

     On the DECsystem10 and DECsystem20 computers, this statement  could
     also be rewritten as

          A=1H ;
     or
          A=1H !

     Such  deletion  of  rightmost  blanks  can  also  occur  in  FORMAT
     statements  in  which  character strings extend across continuation
     line boundaries.  For example, the FORMAT statement

        50 FORMAT(' THIS IS A FORMAT STATEMENT WITH A BLANK
          1FOLLOWING THE FIRST APPEARANCE OF THE WORD BLANK')

     in which a  single  blank  character  and  then  the  end  of  line
     characters  follow  the  first  appearance of the word BLANK, could
     instead be rewritten as

        50 FORMAT(' THIS IS A FORMAT STATEMENT WITH A BLANK ',
          1'FOLLOWING THE FIRST APPEARANCE OF THE WORD BLANK')

     Any character string in which a  necessary  blank  appears  at  the
     right end of a line should be rewritten manually before the program
     is processed by RENBR.  Of course, since  many  screen  (or  video)
     editors  themselves  discard  rightmost  blanks  on  a line, merely
     editing a program in which some lines contain  necessary  rightmost
     blanks  could  itself  make  the program incorrect or uncompilable.
     Some screen editors also  convert  multiple  blanks  to  tabs,  and
     others convert tabs to multiple blanks.  If the tabs which separate
     the  statement  number  fields  from  the  text  fields  have  been
     converted to blanks by the editor, then the continuation lines will
     no longer compile correctly,  but  RENBR  will  still  treat  these
     properly and can convert the file to either column or tab form.

 6.  The argument list of a  function  cannot  contain  the  numbers  of
     statements  to  which  control  is  to  be transfered when a RETURN
     statement which includes a number  is  executed  in  the  function.
     Such  alternate  returns  are allowed, however, from routines which
     are referenced by CALL statements, rather than by the inclusion  of
     the  names of the routines in expressions.  These statement numbers
     are preceeded in the CALL statements by asterisks, dollar signs  or
     ampersands  (the  *,  $  or  & characters, respectively), and their
     locations in the argument list in the first line  of  the  routines
     are indicated by the same characters used alone.
      Input File Restrictions                                               15


           An example of a program which would not be processed  correctly  by
           RENBR  is  shown below.  This program asks for the user to supply 2
           values, and reports the smaller of these.   In  this  example,  the
           SMALLR  function  uses an alternate return to transfer to statement
           50 if the values are equal.  RENBR cannot identify that  SMALLR  in
           the  main program is an external function rather than an array, and
           so does not recognize that the *50 is a reference  of  a  statement
           number.   Therefore,  the  statement number in the argument list of
           the function call will not be changed if the program is renumbered.

              10 TYPE 20
              20 FORMAT(' NEXT 2 VALUES? ',$)
                 ACCEPT 30,ONE,TWO
              30 FORMAT(2F)
                 A=SMALLR(*50,ONE,TWO)
                 TYPE 40,A
              40 FORMAT(' SMALLER VALUE IS',1E12.4)
                 GO TO 10
              50 TYPE 60
              60 FORMAT(' VALUES ARE EQUAL')
                 GO TO 10
                 END
                 FUNCTION SMALLR(*,ONE,TWO)
           C     RENBR(/RETURN LESSER OF 2 VALUES)
                 IF(ONE.EQ.TWO)RETURN 1
                 SMALLR=ONE
                 IF(ONE.GT.TWO)SMALLR=TWO
                 RETURN
                 END

           This restriction probably will not cause any difficulty since  many
           FORTRAN compilers do not recognize alternate return destinations in
           function calls anyway, and since such alternate return destinations
           in  function calls are not defined by the standards for the FORTRAN
           language.  They are, however, allowed by the F40  compiler  on  the
           DECsystem10.

       7.  The initial line of a statement cannot be followed by more than  19
           continuation  lines.   This means that a single statement cannot be
           more than 20 lines  long.   It  also  means  that  if  a  statement
           separation   character  such  as  the  semicolon  is  used  between
           statements to pack several statements on a line, and if  subsequent
           statements  are  wrapped  around  onto continuation lines, then the
           right  end  of  the  final  statement  cannot  be  more   than   19
           continuation  lines  beyond  the  line  containing the start of the
           first statement.

       8.  Unless the dimensions  of  the  storage  arrays  within  the  RENBR
           program  are  increased,  a single main program or a single routine
           being renumbered cannot contain more than 1000 numbered statements.
           (If the file is being both listed and renumbered, then the limit is
           25 less.) When making a listing of a program or routine  for  which
           the  sum  of  the  number  of  statement  numbers and the number of
           references of these numbers in the statements is greater than 1000,
           the  listing of the statements will be fragmented to allow frequent
           emptying and reuse of the storage arrays.  If a program or  routine
           contains  more  than  1000  numbered  statements, then the original
16                                                The RENBR User's Guide


     statement numbers will be retained when renumbering  is  requested.
     If   a   program  or  routine  contains  less  than  1000  numbered
     statements,  then  the  program  or  routine  can   be   renumbered
     regardless  of  the  number  of  references of these numbers in the
     statements.

 9.  The END statement which terminates a  program  or  a  routine  must
     appear  on  a single line, although the letters of the word END can
     be preceded by  or  be  separated  by  blanks  or  tabs.   The  END
     statement  can  have  a  statement  number  to  its left and can be
     followed by an exclamation point and a comment to  its  right,  but
     the  END  statement  must  not appear on the same line as any other
     statement.  The input  source  files  can  contain  any  number  of
     programs  or  routines, each with its own END statement.  The first
     statement or comment of each of the subsequent programs or routines
     must start on a new line.

     Any statement which starts with the letters  END  cannot  be  split
     onto  a  new  line  between  these  letters  and  the  rest  of the
     statement.  For example, an END IF or END DO or END FILE  statement
     cannot  have  the  word  END  on the first line and the rest of the
     statement on a continuation line.

10.  If the FORTRAN compiler which was used to compile RENBR itself does
     not  support  the END= end-of-file test in READ statements, then an
     additional END statement should be inserted after the final program
     or routine in each of the files which are to be processed by RENBR.
     These extra END statements will not  appear  in  the  output.   The
     extra  END  statement  in  the final source file which is processed
     causes a normal exit  which  includes  printing  of  the  table  of
     contents.  The programs and routines in the input source file would
     still be processed correctly even if the extra END statement is not
     inserted,  but  only a single input source file could be processed,
     and the listings would not include the table of contents.   If  the
     end-of-file test for READ statements is not available, then it will
     not be possible to have a single program or routine be split across
     two  or  more  input source files, since the end of each file would
     have to be marked by an extra END statement.

     If the end-of-file test is not available, and if the list of  files
     which  are to be processed is read from a command file, rather than
     typed by the user directly, then the name of the final file in  the
     list  should  be  followed by a semicolon either to its right or on
     the next line.

11.  RENBR cannot handle  INCLUDE  statements  and  instead  copies  the
     INCLUDE  statement unchanged into the renumbered file.  The INCLUDE
     statement names another file and causes the compiler to  treat  the
     text  in  this  additional  file  as  though it had appeared in the
     original file in place of the INCLUDE statement.  Since RENBR  does
     not  process  the  text in the file named by the INCLUDE statement,
     the text in this additional  file  should  not  contain  statements
     which bear statement numbers referenced elsewhere in the program or
     which  could  be  duplicated  when  the  rest  of  the  program  is
     renumbered.   Likewise,  the  text in the file named in the INCLUDE
     statement should not reference statement numbers appearing  in  the
     rest of the program being renumbered.
      Supported Variations of Statement Structure                           17


                    Supported Variations of Statement Structure
                    --------- ---------- -- --------- ---------

      RENBR allows a tab character to appear between the statement number  and
      the  text  in  the  first line of a statement.  Use of the tab character
      relieves the programmer of having to type enough blanks  to  advance  to
      column  7  or beyond.  On a continuation line, a tab at the start of the
      line can be followed by  a  digit  other  than  zero  and  then  by  the
      continuation of the text of the statement.  The programmer does not have
      to insert exactly 5 blanks and then place the digit in column  6  as  is
      required  for  the  standard  form of continuation lines.  Regardless of
      whether the lines in the file which is processed  by  RENBR  start  with
      tabs  or  have  the  standard  form,  the  lines  in the renumbered file
      produced by RENBR can have the tab form or can have  the  standard  form
      with the numbers being either left justified or right justified.

      If the FORTRAN compiler or the  operating  system  do  not  support  tab
      characters  in input files, then any FORTRAN programs which contain such
      leading tab characters should have these  tab  characters  converted  to
      blanks  before the programs are processed using RENBR.  If the tab stops
      are equally spaced at least 6 characters apart, then  the  tabs  can  be
      converted   to   the  appropriate  number  of  blanks  to  fill  to  the
      corresponding tab stops  before  the  file  is  processed  using  RENBR.
      Alternatively,  each  tab character in the file can be converted to 6 or
      more blanks before the file is processed using RENBR, since the text  of
      an  initial  line  must  start  in  column  7 or beyond, and since RENBR
      recognizes a line which starts with 5 or more blanks and then a  nonzero
      digit as a continuation line.

      RENBR allows semicolons between statements which appear on the same line
      and  allows  exclamation  points  before  comments  on the same lines as
      statements.  These characters  are  recognized  only  when  they  appear
      within  the  portion  of  the line which can contain statement text.  If
      more than 1 statement appears on a line, then only the  first  statement
      can  bear  a  statement  number, since the text of the next statement is
      assumed to start immediately after the semicolon.  There cannot be  more
      than 19 consecutive continuation lines even if these represent more than
      1 statement.  The END statement can bear a comment  to  its  right,  but
      must not appear on the same line as any other statement.

      The interpretation of lines in a FORTRAN program which are not  comments
      but which have an alphabetic letter in column 1 depends upon the FORTRAN
      compiler which is being used.  Some compilers require the letters  B,  D
      or  I  in  column  1  to specify the type of variables appearing on that
      line.  The DECsystem10 FORTRAN compiler allows the letter D in column  1
      to  indicate a debugging line, the compilation of which is optional.  If
      the initial line of a statement starts with the  letter  D,  then  RENBR
      will  place  the letter D at the start of each continuation line of that
      statement regardless of  whether  these  continuation  lines  themselves
      originally  started  with  the  letter  D.   If  the  first  line of the
      statement does not start with the letter D, but some of the continuation
      lines  do  start with the letter D, then the appearances of the letter D
      at the start of the continuation  lines  are  discarded.   Whether  this
      modification  of  the  continuation  lines can change the meaning of the
      program will depend upon which DECsystem10 compiler is used.  When lines
      which start with the letter D are being ignored, the F40 compiler treats
      a continuation line after a line bearing the letter D in column 1  as  a
18                                                The RENBR User's Guide


continuation  of  a  comment while the FORTRAN-10 compiler treats such a
continuation line as a continuation of the previous statement.

For example, on the DECsystem10, the program shown below would type  the
value  1 if debugging lines starting with the letter D are not compiled.
The program would instead type  the  value  2  if  debugging  lines  are
compiled.

      INDEX=1
D     IF(INDEX.EQ.1)
D    1INDEX=2
      TYPE 1,INDEX
    1 FORMAT(' INDEX=',1I2)
      END

A line beginning a new statement can have any of  the  forms  which  are
described  below.   Where  these  descriptions speak of a line beginning
with a character other than the letter C, it is actually meant that  the
character  in  column  1  cannot  be any of the characters upper case C,
lower case c, *, !, /, or $.  Any of these characters in column 1  would
cause the rest of the line to be treated as a comment.

 1.  A line beginning with 5 blanks and/or digits followed in  column  6
     by a blank or a zero, and then by the text of the statement.

 2.  A line beginning with a non-tab non-blank non-digit character other
     than  the  letter  C followed by 4 blanks and/or digits followed in
     column 6 by a blank or  a  zero,  and  then  by  the  text  of  the
     statement.

 3.  A line beginning with a tab followed by the first character of  the
     statement which cannot be a digit.

 4.  A line beginning with a non-tab non-blank non-digit character other
     than the letter C followed by a tab followed by the first character
     of the statement.

 5.  A line beginning with a digit or digits  of  the  statement  number
     followed by a tab followed by the first character of the statement.

 6.  A line beginning with a non-tab non-blank non-digit character other
     than  the letter C followed by the digit or digits of the statement
     number followed by a tab followed by the  first  character  of  the
     statement.

The contents of  typical  lines  which  can  start  new  statements  are
diagrammed  below.   In these illustrations, (BLANK) represents a blank,
(TAB) represents a tab and (TEXT) represents the text of the  statement.
Of  course,  the text of the statement can itself begin with one or more
blanks or tabs.

    (BLANK)(BLANK)(BLANK)(BLANK)(BLANK)(BLANK)(TEXT)
    (BLANK)(BLANK)(BLANK)(BLANK)(BLANK)0(TEXT)
    D(BLANK)(BLANK)(BLANK)(BLANK)(BLANK)(TEXT)
    D(BLANK)(BLANK)(BLANK)(BLANK)0(TEXT)
    (BLANK)(BLANK)(BLANK)22(BLANK)(TEXT)
    (BLANK)(BLANK)(BLANK)220(TEXT)
      Supported Variations of Statement Structure                           19


          D(BLANK)(BLANK)22(BLANK)(TEXT)
          D(BLANK)(BLANK)220(TEXT)
          22(BLANK)(BLANK)(BLANK)(BLANK)(TEXT)
          22(BLANK)(BLANK)(BLANK)0(TEXT)
          D22(BLANK)(BLANK)(BLANK)(TEXT)
          D22(BLANK)(BLANK)0(TEXT)
          (TAB)(TEXT)
          D(TAB)(TEXT)
          22(TAB)(TEXT)
          D22(TAB)(TEXT)

      A continuation line can have any of the forms which are described below.
      Again,  where  these  descriptions  speak  of  a  line  beginning with a
      character other than the  letter  C,  it  is  actually  meant  that  the
      character  in  column  1  cannot  be any of the characters upper case C,
      lower case c, *, !, /, or $.

       1.  A line beginning with 5 blanks  followed  by  a  non-blank  non-tab
           non-zero  character  which is ignored.  This is in turn followed by
           the continuation of the text of the statement.

       2.  A line beginning with a non-tab non-blank non-digit character other
           than  the  letter  C  followed  by 4 blanks followed by a non-blank
           non-tab non-zero character which  is  ignored.   This  is  in  turn
           followed by the continuation of the text of the statement.

       3.  A line beginning with a tab (or with 5 or more blanks) followed  by
           a non-zero digit which is ignored.  This is in turn followed by the
           continuation of the text of the statement.

       4.  A line beginning with a non-tab non-blank non-digit character other
           than  the  letter  C  followed  by  a  tab (or by 4 or more blanks)
           followed by a non-zero digit which is ignored.   This  is  in  turn
           followed by the continuation of the text of the statement.

      The following are typical continuation lines.

          (BLANK)(BLANK)(BLANK)(BLANK)(BLANK)2(TEXT)
          (BLANK)(BLANK)(BLANK)(BLANK)(BLANK)A(TEXT)
          D(BLANK)(BLANK)(BLANK)(BLANK)2(TEXT)
          D(BLANK)(BLANK)(BLANK)(BLANK)A(TEXT)
          (TAB)2(TEXT)
          D(TAB)2(TEXT)


                  Maintaining Logical Blocks of Statement Numbers
                  ----------- ------- ------ -- --------- -------

      Some programmers select statement numbers used within a logical  section
      of  a program from a different range of values than those used elsewhere
      within  the  same  program.   RENBR  can  maintain  these  regions  when
      renumbering.   However,  since a single normal renumbering would destroy
      such regions, a command line within the program is used to  specify  the
      size  of  the  range  of  statement  numbers in each section rather than
      querying the user for this information.  This command line is a  comment
      line  with  an  * or the letter C in column 1 followed by the word RENBR
      and then any switches for which values are being specified.   A  typical
20                                                The RENBR User's Guide


command line would be

CRENBR/I:-10/B:10(NAME/SUBTITLE FOR LISTING) O 200 N 400

where slashes could appear before the single letter switches and  colons
could  appear  between  the  single  letter  switches  and the following
numbers.  However, these slashes and colons are not required.

Examples of each of the switches which can appear on the CRENBR  command
line  are  shown  below,  together with typical values for the following
numbers, where allowed.

/A:2      add 2 blanks to lines in DO loop or IF THEN block
/B:100    base statement number is 100
/C:80     comment lines are 80 characters wide
/I:5      increment between statement numbers is 5
/M        mixed statement number regions
/M:100    modify only statement numbers of 100 or larger
/M:1:9    modify only statement numbers in range 1 through 9
/N:500    new groups of numbers are 1 - 499, 500 - 999 etc.
/O:100    old groups of numbers are 1 - 99, 100 - 199 etc.
/R=       statement numbers in comment lines start with =
(ONE/TWO) ONE is routine name, TWO is subtitle on each page

The switches are described in more detail below.

/A causes extra blanks to be added to the  left  of  the  text  of  each
   statement  inside a DO loop or inside an IF THEN block in the program
   or routine in which it appears.  These blanks are added regardless of
   whether  the  program  or  routine  is renumbered or listed.  When DO
   loops or IF THEN blocks are embedded, the range  of  each  additional
   loop or block is indented further.  The actual number of blanks added
   to each line is indicated by the number which follows the /A  switch.
   If  the  user has specified the /A switch when RENBR was started, and
   the /A switch also appears on the CRENBR command line, then the value
   specified  on  the CRENBR command line will be used instead, but only
   in the program or routine in which it appears.

   The CRENBR command line containing the /A switch should be issued  at
   the  start of a program, or immediately following the first statement
   of a routine, since the /A switch cannot change  the  indentation  in
   the  listing  of  block  structures  which  precede its appearance if
   renumbering is not being performed.

/B sets the smallest statement number which is to appear in the  program
   or  routine  in  which  it  appears  if  the  program  or  routine is
   renumbered.  The actual value of the  smallest  statement  number  is
   indicated  by the number which follows the /B switch.  Normally, this
   would be the first statement number in the renumbered program, but if
   the  increment  between consecutive statement numbers is specified to
   be negative, then the smallest number will  be  the  final  statement
   number  within  the program.  If the /B switch does not appear on the
   CRENBR command line, then the value used as  the  smallest  statement
   number  will be that specified by the user when RENBR was started, or
   will be the absolute value of the statement number increment  if  the
   user  did  not  specify  the smallest statement number when RENBR was
   started.
      Maintaining Logical Blocks of Statement Numbers                       21


      /C specifies that more than 72 characters are to be retained in each  of
         the  subsequent  FORTRAN  comment  lines  in  the  current program or
         routine.  The number following this switch is the maximum  number  of
         characters, in addition to the 72 characters usually processed, which
         are to be read and written in each FORTRAN  comment  line.   If  this
         number  has  a  value  of  72 or greater, then this number is instead
         assumed to be the total number of characters which are to be retained
         in  each FORTRAN comment line.  Either a /C:8 or a /C:80 switch would
         cause up to 80 characters to be  included  in  each  FORTRAN  comment
         line.   The /C switch does not apply to the preceding FORTRAN comment
         lines or to the CRENBR command line in which it appears.  Although  a
         previous  CRENBR  command  line  could  have  changed  the  number of
         characters retained in the current  CRENBR  command  line,  only  the
         first  72  characters  are ever evaluated on any CRENBR command line.
         The maximum value which can appear with the /C switch is 120.

      /I specifies the statement number increment.  The number following  this
         switch  will  be the increment between consecutive statement numbers.
         If the /I switch does not appear on the CRENBR command line, then the
         value  used  as the increment will be that specified by the user when
         RENBR was started, or will be  1  if  the  user  did  not  specify  a
         statement number increment when RENBR was started.

      /M if issued without a  following  number,  then  the  statement  number
         regions  which  are to be maintained during renumbering can be mixed,
         rather than separated into logical blocks.  An example of the use  of
         the /M switch is given in a later section of this instruction manual.
         The /M switch must  not  be  issued  if  logical  blocks  are  to  be
         maintained as described in this section of the manual.

         If the /M switch is followed by 2 numbers, then these numbers are the
         the  lowest  and  highest  original  statement  numbers which will be
         modified.  All original statement numbers which are either less  than
         the  first number or greater than the second number will be retained.
         The first number following the /M switch is assumed to be 1 if it  is
         missing  but  the  second  number is specified.  The second number is
         assumed to be 99999  if  it  is  missing  but  the  first  number  is
         specified.   The  /M  switch could be used to identify a section of a
         program or routine which is to be modified and then grafted back into
         the  original  program  or  routine  since  all references within the
         section to statements outside the section would remain correct.   For
         example,  the  switch  /M:100:200  or M100 200 would cause only those
         statement numbers which are in the range 100  through  and  including
         200 to be renumbered.

         If the /M switch is followed by a  single  number,  then  the  second
         number  is  assumed  to  have  the  value 99999 so that all statement
         numbers which are equal to or greater than the specified number  will
         be  modified.   The  /M  switch might be used with a single number to
         prevent the accidental renumbering of a  routine,  or  to  allow  the
         renumbering  of  only  the  more  recent  changes  to a routine if an
         earlier version of the routine is being retained for comparison.

         If a number or pair of numbers follows the /M switch, then the CRENBR
         command  line  can  also  contain  /B  and  /I switches to select the
         statement number base and increment, but /N and /O  switches  on  the
         CRENBR command line will be ignored.
22                                                The RENBR User's Guide


/N specifies the new region size.   The  number  following  this  switch
   specifies  the  jump in generated statement numbers from the start of
   one region to the next in the  renumbered  program  or  routine.   To
   prevent   erroneous   scaling  of  the  statement  numbers  during  a
   subsequent renumbering of the program or routine which  contains  the
   CRENBR  command  line,  a /O (old region size) switch is removed when
   renumbering is performed if the /O switch has  been  preceded  within
   the  current program or routine by a /N switch, and each /N switch is
   converted to a /O switch.  If the /N switch does not  appear  on  any
   CRENBR  command  line  in the program or routine, then the old region
   size as specified by the /O switch is also used  as  the  new  region
   size.   If  neither  the  /N  switch nor the /O switch appears on any
   CRENBR command line in the program, then  the  regions  of  statement
   numbers are not preserved.

/O specifies the old region size.   The  number  following  this  switch
   specifies  the  jump in the original statement numbers from the start
   of one region to the next in the program which is  being  renumbered.
   To  prevent  erroneous  scaling  of  the  statement  numbers during a
   subsequent renumbering of the program or routine which  contains  the
   CRENBR  command  line,  a  /O  switch  is removed when renumbering is
   performed if the /O switch  has  been  preceded  within  the  current
   program  or  routine  by  a  /N (new region size) switch, and each /N
   switch is converted to a /O switch.  If the /O switch does not appear
   on  any  CRENBR  command line in the program or routine, then the new
   region size as specified by the /N switch is also  used  as  the  old
   region  size.   If neither the /N switch nor the /O switch appears on
   any CRENBR command line in the program, then the regions of statement
   numbers are not preserved.

/R specifies how statement number references  are  to  be  indicated  in
   comment  lines.   The  first  printing  (neither  a  blank nor a tab)
   character following the R switch will be scanned for on  all  comment
   lines  and,  whenever  this  character is found followed by a number,
   then this number will be taken as a statement number reference.  If a
   colon  follows the /R switch, then colons will mark statement numbers
   which appear on comment lines.  If renumbering  is  being  performed,
   then  the number marked by this character will be replaced by the new
   value of the referenced statement number.   If  a  listing  is  being
   produced,  then  the  number  marked by this character will be placed
   into the list of statement number references with the associated line
   number being that of the FORTRAN statement which precedes the comment
   in which the number is located.  If  more  than  1  statement  number
   reference  appears  on  a  single  comment  line,  then  each must be
   preceded by the character.  The character  is  scanned  for  only  on
   lines which are indicated to be comments by the character (such as an
   asterisk or the letter C) which appears in column 1.   Spaces  and/or
   tabs can appear on the comment line between the key character and the
   following statement number but are  not  required.   Spaces  or  tabs
   cannot  appear  between  the digits of a single statement number on a
   comment line.

 ( specifies the routine name.  The printing characters which follow the
   (  switch,  through the end of the line, or up to the next appearance
   of a right parenthesis or slash character on the line, are to be used
   as  the routine name in the table of contents, and at the upper right
   corners of the pages containing the listing of the routine.  Only the
      Maintaining Logical Blocks of Statement Numbers                       23


         first  6  printing  characters  will  be used if more than 6 printing
         characters are specified in the name.  If the ( switch is not  issued
         or  does  not specify a name, then the routine name will be that read
         from the SUBROUTINE, FUNCTION, BLOCK DATA or PROGRAM statement.   The
         (  switch  can be used to label main programs even though these would
         not usually have names.

         If a slash (the / character) appears after the ( switch or after  the
         routine name following the ( switch, then the characters which follow
         the / character, through  the  end  of  the  line,  or  to  the  next
         appearance  of a matching right parenthesis on the line, will be used
         as the subtitle in the listing.  Such a subtitle can  consist  of  at
         most  44  characters and can include blanks and balanced parentheses.
         The subtitle is not changed if the / character does not appear  after
         the  (  switch or after the routine name following the ( switch.  The
         subtitle will be blank if it is not specified anywhere in the program
         or routine.

         The CRENBR command line containing the ( switch should be  issued  at
         the  start  of a program or immediately following the first statement
         of a routine since the ( switch cannot change  the  routine  name  or
         subtitle  in  that  portion  of  the  listing  preceding  its  use if
         renumbering  is  not  being  performed.   (If  renumbering  is  being
         performed,  then  the CRENBR command line is interpreted on the first
         pass through the input program, and the listing is  produced  on  the
         second  pass.   However,  if renumbering is not being performed, then
         the listing is produced in a single pass.)

      The switches can appear in any order on the CRENBR command  line.   Only
      the  /I  switch will accept a negative value.  Although the initial * or
      letter C must be in column 1, blanks and tabs can appear  anywhere  else
      on the CRENBR command line except within numbers.

      The values specified by the CRENBR command line apply to  all  statement
      numbers  within a single program or routine, but the CRENBR command line
      can appear anywhere in the program or routine before  the  terminal  END
      statement.   If  multiple  CRENBR  command  lines appear within a single
      program or routine, then the values which are used are the final  values
      specified  for each switch.  The CRENBR command line applies only to the
      program or routine in which it  appears.   The  default  values  of  the
      switches  (set  by the user when RENBR was started) are restored for the
      next program or routine read.  In the case of the /N  and  /O  switches,
      these defaults are to not preserve regions.

      The CRENBR command line

      CRENBR I-10 B 10 O 200 N 400

      would specify that original regions such as 1-199, 200-399  and  400-599
      would  be translated to new regions such as 1-399, 400-799 and 800-1199.
      The actual translation would depend on the  relative  placement  of  the
      original  regions.   To  allow  the  insertion  of new statements into a
      region, statement numbers which would normally be outside the region are
      taken as part of the surrounding region if statement numbers both before
      and after the insertion are within the region.  If the statement  number
      increment  is  positive,  then  this  searching  for the final statement
      number which is also within the region starts at the top of the  program
24                                                The RENBR User's Guide


and proceeds towards the bottom of the program.  If the statement number
increment is negative, then the searching starts at the  bottom  of  the
program and proceeds towards the top of the program instead.

For example, the original program shown  at  the  left  below  would  be
converted  to  the program shown at the center when renumbered.  In this
example, the statement number at the top of the program is 317 which  is
in  the  range  200  to 399.  The final statement number which is within
this same range is  285,  so  all  of  the  statements  located  between
statements  317 and 285 are also included in the first region.  The next
statement below the end of the first region is number 15 which is in the
range  1 to 199.  The final statement number which is in this same range
is 99, so all of the statements located between statements 15 and 99 are
also  included in the second region.  The bottom 2 numbers 1600 and 1622
are in the same range and form the third region.

CRENBR I   10 B10   CRENBR I   10 B10   CRENBR I  -10 B10
CRENBR/O:200/N:500  CRENBR/O:200/O:500  CRENBR/O:200/O:500
  317 GO TO 1622       10 GO TO 1010     1010 GO TO 10
  216 GO TO 1600       20 GO TO 1000     1000 GO TO 20
 4260 GO TO 99         30 GO TO 540       540 GO TO 30
  285 GO TO 1650       40 GO TO 530       530 GO TO 40
   15 GO TO 4266      500 GO TO 520       520 GO TO 500
 4200 STOP            510 STOP            510 STOP
 4266 GO TO 4200      520 GO TO 510       500 GO TO 510
 1650 GO TO 15        530 GO TO 500        40 GO TO 520
   99 GO TO 285       540 GO TO 40         30 GO TO 530
 1600 GO TO 4260     1000 GO TO 30         20 GO TO 540
 1622 GO TO 216      1010 GO TO 20         10 GO TO 1000
      END                 END                 END

If the increment specified by the /I switch on the CRENBR  command  line
in  the original program shown at the left above were to be -10 instead,
then the program shown at the right would result when  the  program  was
renumbered.   Since the increment is negative, the searching for regions
of statement numbers starts at the bottom of the program, rather than at
the top.  Here, the first range would begin at the bottom of the program
with the statement numbered 1622, and would extend backward through  the
statement  numbered  1650  which  is the most distant statement having a
number in the range 1600 to 1799.  The second region  would  begin  with
the  next  statement  which is numbered 4266 and extend backward through
the statement numbered 4260.


              Creating Logical Blocks of Statement Numbers
              -------- ------- ------ -- --------- -------

To convert the statement numbers in a program to  indicate  the  logical
blocks  in  which they appear, RENBR could be run several times with the
user selecting different values with the /M and /B switches to change  a
different  range  of statement numbers each time.  Alternatively, all of
the statement numbers can be converted in a single  renumbering  if  new
statements,  which  bear  statement  numbers  outside  the logical block
ranges found elsewhere in the program, are inserted at the start and end
of  each consecutive logical region of statements to force conversion of
statement numbers within these regions into consecutively higher ranges.
If  the  CRENBR  command line specifies that logical blocks of statement
      Creating Logical Blocks of Statement Numbers                          25


      numbers are to be preserved, then RENBR, when  assigning  new  statement
      numbers,  will  terminate each logical block of statement numbers at the
      final statement number which is within the range defined  by  the  first
      statement  number  of  the block.  If this technique is used, then there
      should be a temporary statement at both the start and  the  end  of  the
      program  and  2 temporary statements between consecutive regions.  Since
      the statements which temporarily define logical blocks should be removed
      during  or  after  renumbering,  these statements need not be written in
      legal FORTRAN.  If these temporary statements consist only of  statement
      numbers  but  no  statement text, then RENBR will remove these statement
      numbers when the  program  or  routine  is  renumbered.   Following  the
      renumbering,  a  statement  number will be missing from the lower end of
      each region until the program is next renumbered.

      For example, to convert the first 2 statements in the program  shown  at
      the  left below into a first region, the next 5 statements into a second
      region, and the rest into a third region,  a  CRENBR  command  line  and
      numbered  but  otherwise  empty statements could be inserted as shown in
      the program in the middle.  Processing  of  the  program  shown  in  the
      middle would produce the program shown at the right in which the first 2
      statements are now in the range 1 through 49, the second in the range 50
      through  99,  and  the  third  in  the range 100 through 149.  Since the
      region size in the final program is 50, RENBR has changed the  /N:50  on
      the  CRENBR command line to be /O:50 instead.  Subsequent renumbering of
      the final program would retain the  new  statement  number  regions  and
      would   set  the  first  numbers  in  the  regions  to  1,  50  and  100
      respectively.

          1 GO TO 9       CRENBR/O:100/N:50   CRENBR/O:100/O:50
          2 GO TO 8       100                     2 GO TO 102
          3 GO TO 7           1 GO TO 9           3 GO TO 101
          4 GO TO 6           2 GO TO 8          51 GO TO 55
          5 STOP          101                    52 GO TO 54
          6 GO TO 5       200                    53 STOP
          7 GO TO 4           3 GO TO 7          54 GO TO 53
          8 GO TO 3           4 GO TO 6          55 GO TO 52
          9 GO TO 2           5 STOP            101 GO TO 51
            END               6 GO TO 5         102 GO TO 3
                              7 GO TO 4             END
                          201
                          300
                              8 GO TO 3
                              9 GO TO 2
                          301
                                END


                Maintaining Number Regions Keyed to Statement Types
                ----------- ------ ------- ----- -- --------- -----

      Many programmers use statement number size to indicate the types of  the
      statements  with  which  they  are  associated.   In  particular, FORMAT
      statements and the statements at the ends of DO loops are often assigned
      large  numbers.   Use of the /M switch without a following number on the
      CRENBR command line allows the resulting mixed statement number  regions
      to  be  maintained  during  renumbering.   The new statement numbers are
      based on the order in which they appear within their respective regions.
26                                                The RENBR User's Guide


The high order or leftmost digits (relative to the original region size)
of the statement numbers  are  maintained  unless  an  expanding  region
overflows  into  the  next higher region in which case the higher region
must be offset to prevent duplication of the new statement numbers.

For example, the program shown at the left below would be  converted  to
the  program  shown  at  the  center  when renumbered.  If the increment
specified by the /I switch on the CRENBR command line were to be changed
to -10, then the program shown at the right would be produced instead.

CRENBR/O:1000/I10/M CRENBR/O:1000/I10/M CRENBR/O:1000/I-10/M
  317 GO TO 1622       10 GO TO 1020       50 GO TO 1000
  216 GO TO 1600       20 GO TO 1010       40 GO TO 1010
 4260 GO TO 99       4000 GO TO 50       4020 GO TO 10
  285 GO TO 1650       30 GO TO 1000       30 GO TO 1020
   15 GO TO 4266       40 GO TO 4020       20 GO TO 4000
 4200 STOP           4010 STOP           4010 STOP
 4266 GO TO 4200     4020 GO TO 4010     4000 GO TO 4010
 1650 GO TO 15       1000 GO TO 40       1020 GO TO 20
   99 GO TO 285        50 GO TO 30         10 GO TO 30
 1600 GO TO 4260     1010 GO TO 4000     1010 GO TO 4020
 1622 GO TO 216      1020 GO TO 20       1000 GO TO 40
      END                 END                 END


              Including NonFORTRAN Text in the Input File
              --------- ---------- ---- -- --- ----- ----

The first line of the first  input  source  file,  and  the  first  line
following  each FORTRAN END statement, are scanned for the appearance of
the letters RENBRSTART anywhere on the line.  The letters RENBRSTART can
be  preceded  by  any other characters and can be separated by blanks or
tabs.  If the letters RENBRSTART are found, then the  current  line  and
all following lines through the end of the final input source file or up
to the next CRENBR command line will be treated as comment  lines.   The
name  to  be associated with the current comment section, and a subtitle
for the listing, can appear to the right of the  letters  RENBRSTART  in
the  form  in  which  this  information could appear on a CRENBR command
line.  The name and subtitle will be blank in the listing if  these  are
not  specified  by  the  RENBRSTART command line.  Additional RENBRSTART
command lines can  appear  within  the  comment  section  to  force  the
printing  of  a new page with new name and new subtitle.  If the comment
section is terminated by a CRENBR command line, then this CRENBR command
line  is  considered  to  be  a part of the following FORTRAN program or
routine.

The ability to include comment sections within  the  input  file  allows
assembly language routines, command files and data to be listed with the
FORTRAN programs with which these are used.   If  renumbering  is  being
performed,  then  the  comment  sections are copied into the output file
unchanged.  If a listing is being produced, then a line sequence  number
is  printed beside each line within the comment section, and the comment
section name and the total number of lines within  the  comment  section
are  included  in  the  table  of  contents,  but  the words and numbers
appearing in the comment section are not indexed.
      Including NonFORTRAN Text in the Input File                           27


      A RENBRTITLE command line can be used for much the  same  purpose  as  a
      RENBRSTART  command  line.  These 2 types of command lines are identical
      if encountered at the start of the first input source file  or  after  a
      FORTRAN  END  statement.   The  only difference between these 2 types of
      command lines is that, when encountered within  an  already  established
      comment section, the RENBRTITLE command line does not force the printing
      of a new page and, if the RENBRTITLE command line  does  not  specify  a
      subtitle, then the subtitle previously specified for the comment section
      will remain unchanged.  The RENBRTITLE command line is used to enter  an
      additional  comment  section  name, and comment section line total, into
      the table of contents without starting a new page in  the  listing.   If
      the  storage  used  for  the table of contents is already full, then the
      current table of contents will have to be printed before  the  new  name
      can be added, so under these conditions even the RENBRTITLE command line
      would force printing of a new page after the table of contents.

      A typical sequence of FORTRAN programs and comment sections would be

           text of FORTRAN program or routine
                 END
           any charactersRENBRSTART(NAME/SUBTITLE)
           comment section text
           any charactersRENBRTITLE(NAME/SUBTITLE)
           additional comment section text
           CRENBR(NAME/SUBTITLE)
           text of another FORTRAN program or routine
                 END

      It should be noted that if the FORTRAN system does not allow end-of-file
      tests in READ statements, then the sequence of lines

      CRENBR
            END
            END

      must appear at the end of the input source file to force the printing of
      the  table  of  contents if no other FORTRAN routines follow the comment
      section.


                        Statement Types Recognized by RENBR
                        --------- ----- ---------- -- -----

      RENBR can recognize statement numbers contained in the  following  types
      of  FORTRAN  statements.  In these examples, the number 20 has been used
      to represent any FORTRAN statement number and the  number  10  has  been
      used  to  represent  a  number which is not a statement number.  The key
      words which identify these statements can also be used as variable names
      or  as  array  names  without  causing any difficulties.  The ability to
      handle statement numbers in other types  of  statements  can  be  easily
      added.
28                                                The RENBR User's Guide


ACCEPT 20
ACCEPT 20,LIST OF VARIABLES
ACCEPT(FMT=20,ERR=20,END=20)LIST OF VARIABLES
ACCEPT TAPE 20
ACCEPT TAPE 20,LIST OF VARIABLES
ASSIGN 20 TO INTEGER VARIABLE
BACKFILE(10,ERR=20)
BACKFILE(UNIT=10,ERR=20)
BACKSPACE(10,ERR=20)
BACKSPACE(UNIT=10,ERR=20)
CALL ROUTINE(OPTIONAL ARGUMENTS,*20,OPTIONAL ARGUMENTS)
CALL ROUTINE(OPTIONAL ARGUMENTS,$20,OPTIONAL ARGUMENTS)
CALL ROUTINE(OPTIONAL ARGUMENTS,&20,OPTIONAL ARGUMENTS)
CLOSE(OPTIONAL SPECIFICATIONS,ERR=20,OPTIONALSPECIFICATIONS)
DECODE(10,20,VARIABLE)LIST OF VARIABLES
DECODE(10,20,VARIABLE,ERR=20)LIST OF VARIABLES
DO 20 INTEGER VARIABLE=EXPRESSION,EXPRESSION
DO 20,INTEGER VARIABLE=EXPRESSION,EXPRESSION
DO 20 INTEGER VARIABLE=EXPRESSION,EXPRESSION,EXPRESSION
DO 20,INTEGER VARIABLE=EXPRESSION,EXPRESSION,EXPRESSION
ENCODE(10,20,VARIABLE)LIST OF VARIABLES
ENCODE(10,20,VARIABLE,ERR=20)LIST OF VARIABLES
ENDFILE(10,ERR=20)
ENDFILE(UNIT=10,ERR=20)
FIND(10'10,ERR=20)
FIND(10#10,ERR=20)
FREQUENCY 20(OPTIONAL NUMBERS), ... ,20(OPTIONAL NUMBERS)
FREQUENCY 20(10,10,10),20,20(10),20(10,10)      !FOR EXAMPLE
GO TO 20
GO TO INTEGER VARIABLE(20, ... ,20)
GO TO INTEGER VARIABLE,(20, ... ,20)
GO TO (20, ... ,20)INTEGER VARIABLE
GO TO (20, ... ,20),INTEGER VARIABLE
IF(EXPRESSION)20,20
IF(EXPRESSION)20,20,20
IF(EXPRESSION)STATEMENT
IF ACCUMULATOR OVERFLOW 20,20
IF ACCUMULATOR OVERFLOW 20,20,20
IF DIVIDE CHECK 20,20
IF DIVIDE CHECK 20,20,20
IF QUOTIENT OVERFLOW 20,20
IF QUOTIENT OVERFLOW 20,20,20
INQUIRE(OPTIONAL SPECIFICATIONS,ERR=20,OPTIONAL SPECIFICATIONS)
OPEN(OPTIONAL SPECIFICATIONS,ERR=20,OPTIONAL SPECIFICATIONS)
PRINT 20
PRINT 20,LIST OF VARIABLES
PRINT(FMT=20,ERR=20)LIST OF VARIABLES
PUNCH 20
PUNCH 20,LIST OF VARIABLES
PUNCH(FMT=20,ERR=20)LIST OF VARIABLES
PUNCH TAPE 20
PUNCH TAPE 20,LIST OF VARIABLES
READ 20
READ(10,20)
READ(10,20,END=20)
READ(10,20,ERR=20)
READ(10,20,ERR=20,END=20)
      Statement Types Recognized by RENBR                                   29


      READ(10,20,END=20,ERR=20)
      READ(10,FORMAT,END=20)
      READ(10,FORMAT,ERR=20)
      READ(10,FORMAT,ERR=20,END=20)
      READ(10,FORMAT,END=20,ERR=20)
      READ(10'10,20,ERR=20,END=20)
      READ(10#10,20,ERR=20,END=20)
      READ 20,LIST OF VARIABLES
      READ(10,20)LIST OF VARIABLES
      READ(10,20,END=20)LIST OF VARIABLES
      READ(10,20,ERR=20)LIST OF VARIABLES
      READ(10,20,ERR=20,END=20)LIST OF VARIABLES
      READ(10,20,END=20,ERR=20)LIST OF VARIABLES
      READ(10,FORMAT,END=20)LIST OF VARIABLES
      READ(10,FORMAT,ERR=20)LIST OF VARIABLES
      READ(10,FORMAT,ERR=20,END=20)LIST OF VARIABLES
      READ(10,FORMAT,END=20,ERR=20)LIST OF VARIABLES
      READ(10,FMT=20,END=20,ERR=20)LIST OF VARIABLES
      READ(UNIT=10,FMT=20,END=20,ERR=20)LIST OF VARIABLES
      READ(10'10,20,ERR=20,END=20)LIST OF VARIABLES
      READ(10#10,20,ERR=20,END=20)LIST OF VARIABLES
      READ INPUT TAPE 10,20
      READ INPUT TAPE 10,20,LIST OF VARIABLES
      REREAD 20
      REREAD 20,LIST OF VARIABLES
      REREAD(FMT=20,END=20,ERR=20)LIST OF VARIABLES
      REWIND(10,ERR=20)
      REWIND(UNIT=10,ERR=20)
      SKIPFILE(10,ERR=20)
      SKIPFILE(UNIT=10,ERR=20)
      SKIPRECORD(10,ERR=20)
      SKIPRECORD(UNIT=10,ERR=20)
      TYPE 20
      TYPE 20,LIST OF VARIABLES
      TYPE(FMT=20,ERR=20)LIST OF VARIABLES
      UNLOAD(10,ERR=20)
      UNLOAD(UNIT=10,ERR=20)
      WRITE 20
      WRITE(10,20)
      WRITE(10'10,20)
      WRITE(10#10,20)
      WRITE 20,LIST OF VARIABLES
      WRITE(10,20)LIST OF VARIABLES
      WRITE(10,FMT=20,ERR=20)LIST OF VARIABLES
      WRITE(UNIT=10,FMT=20,ERR=20)LIST OF VARIABLES
      WRITE(10'10,20)LIST OF VARIABLES
      WRITE(10#10,20)LIST OF VARIABLES
      WRITE OUTPUT TAPE 10,20
      WRITE OUTPUT TAPE 10,20,LIST OF VARIABLES

      In addition to the above, the following statement types  are  recognized
      although these do not contain statement number references.

       1.  DATA and FORMAT statements are recognized so that  items  following
           these keywords are not indexed.
30                                                The RENBR User's Guide


 2.  DO WHILE(expression) and END DO statements are recognized to  allow
     optional indentation of statements within their ranges.

 3.  IF(expression)THEN,  ELSE  IF(expression)THEN,  ELSE,  and  END  IF
     statements   are   recognized  to  allow  optional  indentation  of
     statements within their ranges.

 4.  BLOCK DATA, PROGRAM, SUBROUTINE, ENTRY and FUNCTION statements  are
     recognized  so  that program and routine names can be obtained from
     these.

The FORTRAN operators and delimiters shown below are  recognized.   This
list  does  not  include  operators  such  as ** (exponentiation) and //
(concatenation) which can be  considered  to  be  a  series  of  shorter
operators.

     .LT.    .EQ.    .GT.    .AND.   .OR.    .EQV.
     .LE.    .NE.    .GE.    .NOT.   .XOR.   .NEQV.
     (   )   =   +   -   *   /   ,   <   >   #   :   ^

RENBR handles as a single unit any  character  string  which  either  is
preceded by the decimal number of characters and the letter H or else is
preceded and followed by apostrophes.  It is likely that  no  harm  will
result  if  programs  containing other character string designations are
renumbered.  If some character other than the apostrophe is used as  the
delimiting character in programs or routines which are to be renumbered,
then the  only  situation  likely  to  give  trouble  will  be  when  IF
statements  are  used  to  test character data against character strings
containing either left or right parentheses.  RENBR was used for several
years before the ability to handle character strings as single units was
even added to it.

Statement numbers appearing in CALL statements can be preceded either by
an asterisk, by a dollar sign or by an ampersand.
      Appendix A: Sample Table of Contents and Listing                      31


                  Appendix A: Sample Table of Contents and Listing
                  -------- -  ------ ----- -- -------- --- -------

      RENBR can, at the user's  request,  produce  a  listing  of  the  source
      programs.  The listing of each separate main program or routine is begun
      on a new page.  In the upper right corner of each page are printed  both
      the  current page number and the name of the program or routine.  To the
      left of each non-comment statement is  printed  the  count  or  sequence
      number  of  the  statement  within the current program or routine.  If a
      statement must be split to keep it within the margins  of  the  listing,
      then the extra characters are right justified on the next line and minus
      signs are placed in the statement count field  if  the  right  justified
      extra  text  does not begin with a blank character.  If there is a blank
      at the start of the right justified  extra  text,  then  the  number  of
      initial  blanks  is  printed  within  parentheses in the statement count
      field instead.

      Following the listing of the program or routine is a list  of  statement
      numbers  and  of  the  sequence numbers of the statements in which these
      statement  numbers  are  referenced.   If  renumbering  is   not   being
      performed,  then  this  list  will  also include as negative numbers the
      sequence numbers of the numbered statements themselves.  These  negative
      numbers  are  not included in the list of statement number references if
      renumbering is being performed.  If renumbering is being performed, then
      the  array  space which would be needed to store the negative numbers is
      used instead to store information needed to perform the renumbering.  It
      is  felt  that  the  negative  numbers do not really need to be shown if
      renumbering is being  performed,  since  then  the  resulting  statement
      numbers  will  be  in  order  anyway,  so that further assistance is not
      needed to locate them.

      After the list of statement number references is an  index  of  all  key
      words,  variable  names  and  constants  used in the program or routine.
      Each of these items is accompanied by a list of the sequence numbers  of
      the  statements  in  which  these  items appear.  The sequence number is
      negative if the equals sign operator is used in the statement to  assign
      a  value  to  the item.  The keywords GO TO and IF are excluded from the
      index  because  they  are  used  almost  as  often  as  the  punctuation
      operators.   Likewise,  the  format  specifications  which appear within
      FORMAT statements, and the list of values which  are  assigned  by  DATA
      statements, are not included in the index.

      A table of contents containing the names of the  routines  and  programs
      appears  at  the  end of the listing.  The following information is also
      shown at the top of the table of contents.

      1.  The total number of FORTRAN statements which  start  on  new  lines.
          This number does not include statements which appear to the right of
          semicolons on the same line as other statements.  Continuation lines
          and comment lines also are not included.

      2.  The total number of comment lines appearing within FORTRAN  programs
          and routines.  These are lines which are indicated as being comments
          by the character appearing  in  column  1.   This  number  does  not
          include  comments which appear to the right of exclamation points in
          the text field.
32                                                The RENBR User's Guide


3.  The total number of lines in comment sections which were  designated
    by either RENBRSTART or RENBRTITLE command lines.

4.  The average number of consecutive FORTRAN statements which were  not
    separated  by  comment  lines or by the end of programs or routines.
    This number is truncated down to the next lower whole number.

5.  The average number of consecutive FORTRAN comment lines  which  were
    not  separated by FORTRAN statements.  This number is truncated down
    to the next lower whole number.

Each program and routine name appears twice in the  table  of  contents.
The  program and routine names are listed down the left side of the page
sorted alphabetically by name.  The program and routine names are listed
down the right side of the page in the order in which they appear in the
listing.  The page numbers appear with the routine names in both  lists.
The  total  number  of FORTRAN statements in each program and routine is
also shown in the list at the right side of the page.

A single page of the table of contents can contain the  names  and  page
locations  of  up  to  28 programs or routines.  If the listing contains
more than 28 programs or routines, then the table of  contents  will  be
broken  into separate pages which will be scattered through the listing.
The program or routine names appearing in  the  table  of  contents  are
sorted  alphabetically  only among those others which appear on the same
page of the table of contents.  If it is desired that  the  program  and
routine  names  which  appear  on several pages be sorted alphabetically
together, then the sizes of 2 arrays will have to be  increased  in  the
RENBR program.  The REBIG program described elsewhere in this manual can
be  used  to  change  the  sizes  of  these  arrays.   Instructions  for
increasing  the  array  sizes  manually are also given in the BLOCK DATA
routine in RENBR.

A listing of one of the routines used by RENBR itself is  shown  on  the
next  pages.   The  width of the lines in this listing have been reduced
slightly (by 3 characters) to 60 characters  to  fit  into  the  current
document  regardless  of  how  it  is  formatted.  The table of contents
produced by RENBR when it was used to list itself is shown first.
      Appendix A: Sample Table of Contents and Listing                      33


      APPENDIX: SAMPLE TABLE OF CONTENTS AND LISTING      Table of
      Statements  3483, Comments  3700, NonFORTRAN     0  Contents
      (Avg Group)   10,             11
                          Page                       Length   Page

      DASORT SUBROUTINE    223        RENBR BLOCK DATA   47      1

      RECHCK SUBROUTINE     66      RENBR MAIN PROGRAM   29     48

      RECLS1 SUBROUTINE    288        RESET SUBROUTINE   90     57

      RECMND SUBROUTINE    179       RECHCK SUBROUTINE   29     66

      REDAT1 SUBROUTINE    277        RE1ST SUBROUTINE  283     74

      REDONE SUBROUTINE    142        RE2ND SUBROUTINE  286     89

      REFIL1 SUBROUTINE    245       REPLAC SUBROUTINE  467    104

      REFLG1 SUBROUTINE    254        REOUT SUBROUTINE  293    126

      REHLP1 SUBROUTINE    280       REDONE SUBROUTINE   70    142

      REINDX SUBROUTINE    159       RENUMB SUBROUTINE   55    151

      RENBR  BLOCK DATA      1       REINDX SUBROUTINE  397    159

      RENBR  MAIN PROGRAM   48       RECMND SUBROUTINE  229    179

      RENEXT SUBROUTINE    206       RETITL SUBROUTINE  201    193

      RENUMB SUBROUTINE    151       RENEXT SUBROUTINE  111    206

      REOPN1 SUBROUTINE    264        RETOP SUBROUTINE   36    215

      REOUT  SUBROUTINE    126       DASORT SUBROUTINE   46    223

      REPLAC SUBROUTINE    104       REUSR1 SUBROUTINE  318    227

      REPRT1 SUBROUTINE    271       REFIL1 SUBROUTINE  113    245

      RESET  SUBROUTINE     57       REFLG1 SUBROUTINE  120    254

      RETITL SUBROUTINE    193       REOPN1 SUBROUTINE   99    264

      RETMP1 SUBROUTINE    284       REPRT1 SUBROUTINE   97    271

      RETOP  SUBROUTINE    215       REDAT1 SUBROUTINE   10    277

      REUSR1 SUBROUTINE    227       REHLP1 SUBROUTINE   23    280

      RE1ST  SUBROUTINE     74       RETMP1 SUBROUTINE   17    284

      RE2ND  SUBROUTINE     89       RECLS1 SUBROUTINE    5    288

      SECND1 FUNCTION      290         SECND1 FUNCTION   12    290
34                                                The RENBR User's Guide


APPENDIX: SAMPLE TABLE OF CONTENTS AND LISTING     Page  223
SORT ROUTINE                               DASORT SUBROUTINE

1         SUBROUTINE DASORT(IARRAY,ILOWER,IUPPER,JARRAY)
    C     RENBR(/SORT ROUTINE)
    C
    C     DONALD BARTH, HARVARD BUSINESS SCHOOL
    C
    C     REGIONS CONTAINING INITIAL ORDERING ARE SWAPPED BY
    C     THREADING ITEMS BEING MOVED INTO NEW LOCATIONS.
    C
    C     IARRAY = THE ARRAY TO BE SORTED.
    C     ILOWER = LOWEST SUBSCRIPT OF REGION TO BE SORTED.
    C     IUPPER = HIGHEST SUBSCRIPT OF REGION TO BE SORTED.
    C     JARRAY = ARRAY TO BE HELD PARALLEL TO IARRAY.
    C
2         DIMENSION IARRAY(1),JARRAY(1)
    C
    C     FIND UPPER END OF LOWER REGION TO BE SWAPPED
3         IPNTR=ILOWER
4       1 MID=IPNTR
5         IPNTR=IPNTR+1
6       2 IF(IPNTR.GT.IUPPER)GO TO 12
7         IF(IARRAY(IPNTR).GE.IARRAY(MID))GO TO 1
    C
    C     FIND LOWER END OF LOWER REGION TO BE SWAPPED
8         ITEST=IARRAY(IPNTR)
9         LOW=ILOWER
10      3 IF(ITEST.LT.IARRAY(LOW))GO TO 4
11        LOW=LOW+1
12        GO TO 3
    C
    C     FIND UPPER END OF UPPER REGION TO BE SWAPPED
13      4 JTEST=IARRAY(LOW)
14      5 MAX=IPNTR
15        IPNTR=IPNTR+1
16        IF(IPNTR.GT.IUPPER)GO TO 6
17        ITEST=IARRAY(IPNTR)
18        IF(ITEST.LT.IARRAY(MAX))GO TO 6
19        IF(ITEST.LT.JTEST)GO TO 5
    C
    C     PERFORM THE THREADED SWAP OF ORDERED REGIONS
    C
    C     IF THERE WERE SEVERAL PARALLEL ARRAYS, IT MIGHT
    C     BE CONVENIENT TO REPLACE THE FOLLOWING SECTION BY
    C     CALLS TO THE SWAPPING ROUTINE DASWAP SIMILAR TO
    C
    C     CALL DASWAP(IARRAY,LOW,MID,MAX)
    C     CALL DASWAP(JARRAY,LOW,MID,MAX)
    C
20      6 ITEST=LOW-MAX-1
21        LAST=MAX
22        LOW=LOW-MID-1
23        JTEST=MAX-MID
      Appendix A: Sample Table of Contents and Listing                      35


      APPENDIX: SAMPLE TABLE OF CONTENTS AND LISTING     Page  224
      SORT ROUTINE                               DASORT SUBROUTINE

      24      7 INDEX=LAST+LOW
      25        IKEEP=IARRAY(LAST)
      26        JKEEP=JARRAY(LAST)
      27      8 ITEST=ITEST+1
      28        INEW=IARRAY(INDEX)
      29        JNEW=JARRAY(INDEX)
      30        IARRAY(INDEX)=IKEEP
      31        JARRAY(INDEX)=JKEEP
      32        IKEEP=INEW
      33        JKEEP=JNEW
      34        IF(INDEX.GT.MID)GO TO 9
      35        INDEX=INDEX+JTEST
      36        GO TO 8
      37      9 IF(INDEX.EQ.LAST)GO TO 10
      38        INDEX=INDEX+LOW
      39        GO TO 8
      40     10 IF(ITEST.EQ.0)GO TO 11
      41        LAST=LAST-1
      42        GO TO 7
          C
          C     PREPARE TO FIND NEXT ORDERED REGION
      43     11 MID=MAX
      44        GO TO 2
      45     12 RETURN
      46        END
36                                                The RENBR User's Guide


APPENDIX: SAMPLE TABLE OF CONTENTS AND LISTING     Page  225
SORT ROUTINE                               DASORT SUBROUTINE

Statement
Number        Referenced by

     1       -4     7
     2       -6    44
     3      -10    12
     4       10   -13
     5      -14    19
     6       16    18   -20
     7      -24    42
     8      -27    36    39
     9       34   -37
    10       37   -40
    11       40   -43
    12        6   -45
      Appendix A: Sample Table of Contents and Listing                      37


      APPENDIX: SAMPLE TABLE OF CONTENTS AND LISTING     Page  226
      SORT ROUTINE                               DASORT SUBROUTINE

      Word       Contained in

      DASORT     1
      DIMENSION  2
      END       46
      IARRAY     1     2     7     8    10    13    17    18    25
                28   -30
      IKEEP    -25    30   -32
      ILOWER     1     3     9
      INDEX    -24    28    29    30    31    34   -35    37   -38
      INEW     -28    32
      IPNTR     -3     4    -5     6     7     8    14   -15    16
                17
      ITEST     -8    10   -17    18    19   -20   -27    40
      IUPPER     1     6    16
      JARRAY     1     2    26    29   -31
      JKEEP    -26    31   -33
      JNEW     -29    33
      JTEST    -13    19   -23    35
      LAST     -21    24    25    26    37   -41
      LOW       -9    10   -11    13    20   -22    24    38
      MAX      -14    18    20    21    23    43
      MID       -4     7    22    23    34   -43
      RETURN    45
      SUBROUTINE 1
      0         40
      1          2     5    11    15    20    22    27    41
38                                                The RENBR User's Guide


             Appendix B: List of Files Forming This Package
             -------- -  ---- -- ----- ------- ---- -------


The following files are needed to load the various versions of the RENBR
program.

REHLP1.FOR, REHLP2.FOR, etc.
            FORTRAN sources  of  the  various  versions  of  the  REHELP
            routine  which  are  called by the corresponding versions of
            RENBR to display instructions to the user.  These files  are
            produced  by  using  the FORMAT program to process the rough
            drafts of the instructions  in  the  REHLP1.RNO,  REHLP2.RNO
            files, etc.

REHLP1.RNO, REHLP2.RNO, etc.
            Rough drafts of the various  versions  of  the  instructions
            which  can  be  displayed  by some versions of RENBR.  These
            files would be processed using the FORMAT program to produce
            the FORTRAN source code in the REHLP1.FOR, REHLP2.FOR files,
            etc.

RENBRC.FOR  Source of the RENBR program which internally uses  character
            strings  as  defined  by the FORTRAN77 standards rather than
            Hollerith variables.

RENBRH.FOR  Source of the RENBR program which internally uses  Hollerith
            variables  which  were  supported  by  FORTRAN  prior to the
            FORTRAN77 standards.

            The versions of RENBR in the RENBRC.FOR and RENBRH.FOR files
            can both process other FORTRAN programs which are written in
            FORTRAN77 or prior versions  of  FORTRAN.   The  only  known
            difference in the results obtained when using these versions
            on the DECsystem10 computer is in the listings, and  is  due
            to  the  sort order for characters specified in Hollerith or
            1H  notation  being  different  than  that  for   characters
            specified  in CHARACTER*1 notation.  This causes numbers and
            character strings quoted with apostrophes to appear  in  the
            indexes  after  other  variables  when RENBRH.FOR is used to
            produce listings, but before other variables when RENBRC.FOR
            is  used.   There  should  not  be  any  differences  in the
            resulting renumbered files.

            The RENBRC.FOR and RENBRH.FOR files each contain the  entire
            program with the exception of the machine dependent routines
            REUSER, RETEMP and RECLOS which process the  commands  typed
            by the user and open and close all files.  One of the REHELP
            routines to type instructions will also be needed  with  all
            but the simplest versions of the user interaction routines.

RENBR1.CMD, RENBR2.CMD, etc.
            Command files for loading the  various  versions  of  RENBR.
            These  versions  differ  in  the  manner  in  which the user
            specifies file  names  and  options.   These  versions  also
            differ   in   whether  the  RENBR  program  internally  uses
            character strings or Hollerith variables.
      Appendix B: List of Files Forming This Package                        39


                  The following command files load  versions  of  RENBR  which
                  internally  use  Hollerith variables which were supported by
                  FORTRAN prior to the FORTRAN77 standards.

                  RENBR1.CMD  loads RENBRH,REUSR1,RETMP1,REHLP1
                              This  version  for  the  DECsystem10  asks   for
                              commands of the form files=files/options.

                  RENBR2.CMD  loads RENBRH,REUSR2,RETMP1,REHLP2
                              This  version  asks  for   all   options,   then
                              separately for file names.

                  RENBR3.CMD  loads RENBRH,REUSR3,RETMP1
                              This version asks separately for file names, and
                              assumes standard options.

                  RENBR4.CMD  loads RENBRH,REUSR4,REHLP4
                              This version for the DEC VAX asks  for  commands
                              of the form files=files/options.

                  The following command files load  versions  of  RENBR  which
                  internally use character strings as defined by the FORTRAN77
                  standards  rather  than   Hollerith   variables.    On   the
                  DECsystem10, however, the versions loaded with these command
                  files do not  run  as  efficiently,  since  the  DECsystem10
                  FORTRAN  compiler  cannot  optimize  programs  which contain
                  character variables.  The version  loaded  using  RENBR5.CMD
                  typically  takes  5  times longer to process files than does
                  the optimized version loaded using RENBR1.CMD.

                  RENBR5.CMD  loads RENBRC,REUSR5,RETMP5,REHLP5
                              This  version  is  similar  to  that  loaded  by
                              RENBR1.CMD.

                  RENBR6.CMD  loads RENBRC,REUSR6,RETMP5,REHLP6
                              This  version  is  similar  to  that  loaded  by
                              RENBR2.CMD.

      RETMP1.FOR  Sources of the RETEMP routine which  opens  and  closes  the
                  scratch  file  and  of  the  RECLOS routine which closes the
                  output files for use on the DECsystem10.  This file must  be
                  compiled  and  loaded  together  with  RENBRH.FOR and either
                  REUSR1.FOR, REUSR2.FOR or REUSR3.FOR.

      RETMP5.FOR  Sources of the same routines  as  in  the  RETMP1.FOR  file,
                  except that those in RETMP5.FOR use character strings rather
                  than Hollerith variables.  This file must  be  compiled  and
                  loaded  together  with  RENBRC.FOR  and either REUSR5.FOR or
                  REUSR6.FOR.

      REUSR1.FOR  Sources of the REUSER routine, and of several routines which
                  are  called  by  REUSER,  for  use on the DECsystem10.  This
                  version of these routines  accepts  a  single  line  command
                  which  consists  of  the  names  of  the  output  files  and
                  associated switches, followed by an equal sign and the  list
                  of  input  files.   This version of these routines should be
                  compiled with the FORTRAN-10 compiler, version 5 or greater,
40                                                The RENBR User's Guide


            with  optimization.   The  ERR=  transfers  will  have to be
            removed from the OPEN statements if this  version  of  these
            routines  is compiled using the F40 compiler or with earlier
            versions of the FORTRAN-10 compiler.  Before the routines in
            the  REUSR1.FOR  file can be compiled with the F40 compiler,
            the DATA statements which define the left and  right  square
            brackets  will  have  to  be  commented  out of two of these
            routines  and  be  replaced  by  the  octal  notation   DATA
            statements which are currently commented out.

REUSR2.FOR  Source of a simple version of the REUSER routine for use  on
            the DECsystem10.  This version of the REUSER routine accepts
            a single line command which consists only of  switches,  and
            then  asks  on  subsequent lines for the names of the output
            and input files.  This version of the  REUSER  routine  will
            probably  be  easier  to  convert  for use on other computer
            systems than that in REUSR1.FOR.

REUSR3.FOR  Source of a very simple version of the  REUSER  routine  for
            use  on the DECsystem10.  This version of the REUSER routine
            merely asks for the output and input file names.

REUSR4.FOR  Sources of the REUSER routine, of the RETEMP routine, of the
            RECLOS  routine, and of several routines which are called by
            REUSER, for use on the  Digital  Equipment  Corporation  VAX
            computer.   A single line command is accepted which consists
            of the names of the output files  and  associated  switches,
            followed by an equal sign and the list of input files.  Full
            VAX file specifications are supported, including  nodes  and
            version  numbers.  Percent signs have replaced semicolons as
            command separators  since  semicolons  can  precede  version
            numbers  in  VAX  file specifications.  The default filetype
            (or extension) for  the  renumbered  output  file  has  been
            changed  to  .FOR  since the default version number prevents
            destruction of the original file.

REUSR5.FOR  Sources of the REUSER routine  and  the  routines  which  it
            calls  which have been converted internally to use character
            strings  rather  than  Hollerith  variables.   This  version
            accepts  the  names  of  the  output  files  and  associated
            switches, followed by an equal sign and the  list  of  input
            files.   It  is  based  upon  the  routines  in  REUSR1.FOR.
            REUSR5.FOR must  be  used  with  the  version  of  RENBR  in
            RENBRC.FOR,   and   with  the  routines  in  RETMP5.FOR  and
            REHLP5.FOR.

REUSR6.FOR  Source of  the  REUSER  routine  which  has  been  converted
            internally  to  use  character strings rather than Hollerith
            variables.  This version accepts a single line of  switches,
            and  then  asks for the names of the files individually.  It
            is based upon the routines in REUSR2.FOR.   REUSR6.FOR  must
            be  used  with  the version of RENBR in RENBRC.FOR, and with
            the routines in RETMP5.FOR and REHLP6.FOR.
      Appendix B: List of Files Forming This Package                        41


      The following files contain documentation.

      RENBR.DIC   List of less common words which appear in this  manual,  and
                  of  sequences  of  characters  which appear together in this
                  manual but which are not words.  This list can  be  used  to
                  customize  the dictionary of a spelling verification program
                  when processing this manual.

      RENBR.DOC   This instruction manual.

      RENBR.RNO   The rough form of this instruction manual.  This is meant to
                  be processed by the FROFF text processor.


      The following files contain support programs.

      REBIG.FOR   FORTRAN program which can be used to change the sizes of the
                  arrays  used by RENBR to store the information which appears
                  in the statement number table and in the index  of  variable
                  names  and  constants.  REBIG can also be used to change the
                  maximum number of numbered statements allowed, and to change
                  the maximum number of continuation lines allowed.

      RECUT.FOR   FORTRAN program to split a large file containing most or all
                  of  the  RENBR program into many small files each containing
                  merely  a  single  routine  or  a  few  closely   associated
                  routines.   The  RECUT program can also be used to merge the
                  small files back into the large file.  The  large  file  can
                  either  contain  the  sources of only the relatively machine
                  independent portions of  RENBR,  or  can  also  contain  the
                  sources  of  the  various  versions  of REUSER and RETEMP as
                  well.

      REFMT.DAT   Data file which can be read by REFMT to specify the  current
                  order of the items in the arrays.

      REFMT.FOR   FORTRAN program which reorders the items in the arrays which
                  control  the  recognition  by  RENBR of the various types of
                  FORTRAN statements.

      REH2C.FOR   FORTRAN program which  reads  the  version  of  RENBR  which
                  internally  uses  Hollerith  notation and produces a version
                  which uses character strings instead.

      REOPR.DAT   Data file which can be read by REOPR to specify the  FORTRAN
                  operators currently recognized by RENBR.

      REOPR.FOR   FORTRAN program which constructs the DATA  statements  which
                  define  the  arrays  used  by  RENBR  in  the recognition of
                  FORTRAN operators.
42                                                The RENBR User's Guide


The following files contain test cases.

NOTABS.GET  File containing the results which are expected when RENBR is
            used to renumber the test cases in the NOTABS.TRY file.

NOTABS.LPT  File containing the results which are expected when RENBR is
            used  to  list,  but  not  renumber,  the  test cases in the
            NOTABS.TRY file.

NOTABS.TRY  File containing many test cases.  The programs and  routines
            in this file are not meant to be compiled.  A file identical
            to NOTABS.GET should result when RENBR is  used  to  process
            the contents of the NOTABS.TRY file.  Neither of these files
            contain any tab  characters.   The  file  TABS.TRY  contains
            several  cases  meant  to  test  the  handling of statements
            written using the DECsystem10 tab form.

TABS.GET    File containing the results which are expected when RENBR is
            used to renumber the test cases in the TABS.TRY file.

TABS.LPT    File containing the results which are expected when RENBR is
            used  to  list,  but  not  renumber,  the  test cases in the
            TABS.TRY file.

TABS.TRY    File containing several cases meant to test the handling  of
            statements  written  using  the  DECsystem10  tab form.  The
            programs and routines in this  file  are  not  meant  to  be
            compiled.   A  file identical to TABS.GET should result when
            RENBR is used to process the contents of the TABS.TRY  file.
            The  file NOTABS.TRY contains many other cases meant to test
            the handling of statements written using the standard column
            form.
      Appendix C: RENBR Development History                                 43


                       Appendix C: RENBR Development History
                       -------- -  ----- ----------- -------

      RENBR is based upon a 418 statement FORTRAN program  of  unknown  origin
      which  was in use at Yale University in 1965 or shortly thereafter.  The
      present  version  of  the  program  consists  of  10  times  that   many
      statements.   The  general  construction  of  the table which drives the
      statement number recognition process is still based  upon  that  in  the
      original  program.   However,  the  statements  which perform the binary
      search of sorted statement numbers are all that remain from the original
      program.

      The features which have been added to the program by the current  author
      are listed below.

      June 1970
       1.  Extension.  Listing of each program or routine  includes  statement
           number reference table and word reference table.

      March 1971
       1.  Extension.  FORTRAN operators such  as  .EQ.   and  .LT.   separate
           components of statements.
       2.  Extension.  Character string following leading number and letter  H
           or  enclosed  between apostrophes is treated as single component of
           statement.
       3.  Extension.  Program or routine name and type are printed  at  upper
           right corner of each page of listing.
       4.  Extension.  REFMT program reorders items in the arrays which direct
           the syntax recognition process.

      May 1971
       1.  Correction.  DATA statement generator used by the REFMT program did
           not correctly handle the 2 negative numbers having largest absolute
           value and the largest positive number.

      June 1972
       1.  Extension.  Program being renumbered can contain mixture of  column
           form  and  tab  form  statements.  Output can be selected in either
           form.
       2.  Extension.  When there is a change in the number  of  digits  in  a
           statement number in the statement text, blanks are added or removed
           at the end of the line, if  possible,  to  cause  the  position  of
           following continuation lines to remain unchanged.
       3.  Correction.  Spaces and tabs were not allowed between the number of
           characters and the letter H preceding a character string.

      July 1972
       1.  Correction.  END statement could not be in tab form.

      February 1973
       1.  Correction.  Continuation column contained non-digit characters  in
           listing if renumbering was not being performed.
44                                                The RENBR User's Guide


January 1975
 1.  Extension.  Logical blocks of statement numbers can be maintained.
 2.  Extension.  Specification of options by single  characters  instead
     of by answers to dialog questions.
 3.  Extension.Optional specification  by  the  CRENBR  command  of  the
     statement number increment, base and blocks to be maintained.
 4.  Extension.  Indication in listing of names appearing on  left  side
     of equals signs.
 5.  Extension.  Optional specification by the user  of  the  number  of
     lines to be printed per page in the listing.
 6.  Extension.  Optional insertion of counted line feeds between  pages
     of listing.
 7.  Extension.  Optional splitting of long lines in listing.   This  is
     necessary  if counted line feeds are used on a narrow width listing
     device.
 8.  Extension.  Conversion  of  tab  characters  in  comment  lines  to
     multiple  blanks  so  as  to  fill  to  the proper tab stops in the
     listing.  This allows comment lines listed by RENBR  to  be  spaced
     the same as if the programs had been listed left justified.  Unless
     otherwise specified by the W option, the  width  of  the  tab  stop
     columns is assumed to be 8 characters.
 9.  Extension.  Optional conversion of tab characters in comment  lines
     to  multiple  blanks  so  as to fill to the proper tab stops in the
     renumbered output.  Conversion of tab characters in  comment  lines
     to  blanks  in  the  renumbered  output  is helpful when converting
     programs for computer  systems  which  do  not  recognize  the  tab
     character.   Unless  the  /W  switch is selected, tab characters in
     comment lines are left  intact  when  copied  into  the  renumbered
     output.   It  must  be  noted  that  tab  characters within FORTRAN
     statements are left intact by  RENBR  unless  such  tab  characters
     separate the digits of a statement number.
10.  Extension.   Optional  recognition  of  marked   statement   number
     references  in  comment  lines.   Such  marked statement numbers in
     comment lines  are  included  in  the  table  of  statement  number
     references, and can be renumbered.
11.  Extension.  Optional specification by the  CRENBR  command  of  the
     routine name and subtitle for use in the listing.
12.  Extension.  Optional multiple copies of table of contents.
13.  Extension.  Ability to include nonFORTRAN comment sections in input
     file.   This  is  signalled by the letters RENBRSTART or RENBRTITLE
     appearing in the first line of the file  or  after  a  FORTRAN  END
     statement.
14.  Extension.  ENTRY statements are included in table of contents.
15.  Extension.   Table  of  contents  is  ordered  both  serially   and
     alphabetically.  Only serial ordering was provided previously.
16.  Extension.  Optional  insertion  of  blank  lines  between  FORTRAN
     statements  in  the  listing.  Blank lines are not inserted between
     comment lines, nor  between  the  start  of  a  statement  and  its
     continuation lines.
17.  Extension.  Optional indentation of statements within the range  of
     DO loops.
      Appendix C: RENBR Development History                                 45


      January 1979
       1.  Extension.  Optional insertion of extra empty lines into the bottom
           and  top  of  consecutive  pages  of the listing so that fan-folded
           paper can be bound at the top.
       2.  Extension.  Program name established by PROGRAM statement  is  used
           as name of a main program.
       3.  Extension.  Semicolon can appear between pair of statements on same
           line.
       4.  Extension.  Exclamation point followed by a comment can  appear  to
           the right of a statement.
       5.  Extension.  Statements can be written in a  mixture  of  upper  and
           lower cases.
       6.  Extension.  Colon can appear between letter identifying switch  and
           the following number on CRENBR command line.
       7.  Extension.  Numbers on CRENBR command line can  have  leading  plus
           sign.
       8.  Extension.  Single characters <, > and # are relational  operators.
           Single  character  : is a subscript separator.  .NEQV. is a logical
           operator.
       9.  Extension.  /M switch typed by user or on CRENBR command  line  can
           be followed by values of lowest and highest statement numbers which
           can be changed while renumbering.
      10.  Extension.  Instructions to RENBR program are given in form  OUTPUT
           FILES=LIST  OF  INPUT  FILES in which switches identify purposes of
           output files.
      11.  Extension.  Optional left justification of statement  numbers  when
           column form is selected.
      12.  Extension.  /N switch in  CRENBR  command  line  is  output  as  /O
           switch.  /O switch in CRENBR command line is removed if a /N switch
           has already been found.
      13.  Extension.  Lower case letters appearing outside character  strings
           are converted to upper case when indexed.
      14.  Extension.  Optional indentation of statements within the range  of
           IF(expression)THEN and ELSE statements.
      15.  Extension.  To support FORTRAN77 standards, asterisk  in  column  1
           indicates comment.
      16.  Extension.  REOPR program constructs DATA statements  which  define
           arrays  which control the recognition of operators such as +, - and
           .NOT.
      17.  Extension.  /C switch on CRENBR  command  line  can  cause  comment
           lines to be longer than 72 characters.
      18.  Extension.  Summary of storage utilization for the listing is shown
           to  user  only  if  the  user  types the /Z switch or if one of the
           tables overflows.  Previously, this summary was always shown to the
           user.
      19.  Extension.  Programs and routines having  a  great  many  statement
           numbers  (over  1000  with  arrays  dimensioned as supplied) can be
           processed  although  the  old  statement  numbers   are   retained.
           Previously,  such  programs  and  routines could be listed, but not
           processed.  Listings produced whenever the  old  statement  numbers
           are  being  retained,  whether  due  to an error being found in the
           first pass or to the user issuing a  /M  switch  without  following
           numbers,  include  in  the  tables of statement references the line
           numbers  of  the  statements  bearing  these   statement   numbers.
           Previously,   the  line  numbers  of  the  statements  bearing  the
           statement numbers were included in the tables of  statement  number
           references  only  if  the  programs  and  routines  were  not being
46                                                The RENBR User's Guide


     processed.
20.  Modification.   Character  information  has  been  separated   from
     numeric information in storage of index and of table of contents to
     ease future conversion to FORTRAN77 standards.  All  variables  and
     arrays  which  contain  a single character in each logical location
     which can be addressed by subscript have names beginning  with  the
     letters LTR for variables and arrays which can contain either upper
     or lower case, and LWR for variables and arrays which  can  contain
     only  lower  case  and for which there are also corresponding named
     variables or arrays which contain only upper case.   All  variables
     and  arrays  which  contain  more  than  a single character in each
     logical location have names beginning with letters such as LA4 (for
     4   characters  on  VAX  computer)  or  LA5  for  5  characters  on
     DECsystem10 computer) and are used only in  the  file  opening  and
     closing   routines   which  are  hardware  dependent  anyway.   All
     variables and arrays which contain character information and  which
     are needed by more than just a single routine are stored in labeled
     COMMON blocks which contain no numeric information.  These are  the
     only  places  where  the letter sequences LTR, LWR, LA4 and LA5 are
     used in the RENBR program.
21.  Modification.  Main program only controls the execution of  several
     subroutines.   Previously,  the  main  program also initialized the
     variables in common and read the programs and  routines  the  first
     time to locate the statement numbers.  The structure of the program
     was modified in this manner to  make  overlaying  easier.   If  the
     program  is  overlaid,  however,  then  the  contents of the COMMON
     blocks in the REUSER routine and in the  REOPEN  routine  which  is
     called  by  some  versions  of  the  REUSER routine will have to be
     preserved.
22.  Correction.  Leading non-numeric  character  was  not  repeated  on
     continuation lines of a statement being generated in column form.
23.  Correction.  Exponent is included in index with numbers written  in
     E  or  D  notation.   Previously,  signed  exponents  were  indexed
     separately.

March 1985
 1.  Correction.  When a listing was being prepared with indented  block
     structures,  the  leftmost  characters  on the first line after the
     removal of a level of indentation would  not  be  placed  into  the
     index.
 2.  Correction.  ELSE IF and END IF keywords were  each  indexed  as  2
     words if a blank appeared before the word IF.
 3.  Correction.  Routine names were not correctly inserted  into  table
     of  contents by CRENBR comment lines.  If the routine already had a
     name, so that it was really being renamed, then the  new  name  was
     not  converted  to  upper  case,  was not inserted into the correct
     alphabetical order based upon the new name, and, if shorter than  6
     characters, was right justified rather than being left justified.
 4.  Correction.  IF statements which assigned a new value to  variables
     having  names  starting  with THEN caused the following lines to be
     indented an extra level.
 5.  Modification.  Length of command line typed by user  or  read  from
     command file changed from 72 to 80 characters.
 6.  Modification.  GOTO and IF keywords are excluded from the indexes.
 7.  Conversion.   Version  of  RENBR  produced  which  internally  uses
     character strings rather than Hollerith variables.
      Appendix C: RENBR Development History                                 47


       8.  Extension.  Block structure indicated by DO  WHILE  and  DO  number
           WHILE statements can be shown by indentation.
       9.  Extension.  Statement numbers in DO  number  WHILE  statements  are
           recognized.
      10.  Extension.  ACCEPT, PRINT,  PUNCH,  OPEN,  READ,  REREAD,  REWRITE,
           TYPE, WRITE and most other input/output statements accept statement
           numbers to right of FMT=, ERR= and END= in a list  enclosed  within
           parentheses.
      11.  Extension.  Statement  numbers  in  BACKFILE,  BACKSPACE,  ENDFILE,
           FIND,  INQUIRE, REWIND, SKIP FILE, SKIP RECORD, and UNLOAD commands
           are recognized.
      12.  Extension.  Lines starting with exclamation point, slash or  dollar
           sign  are  taken as comments.  Previously, only lines starting with
           letter C or asterisk were taken to be comments.
      13.  Extension.  Circumflex which indicates exponentiation is treated as
           a FORTRAN operator.
      14.  Extension.  REFMT program produces output file which can be used as
           next input file to obtain minimum number of chains of tests.
      15.  Extension.  New program named REH2C written to convert  RENBR  from
           the use of Hollerith notation to character notation.
      16.  Extension.  New program named REBIG written to change the sizes  of
           arrays  used  by  RENBR  to  store  the information in the table of
           statement numbers and in the index of variable names and constants.
      17.  Extension.  New program named RECUT written to  split  apart  files
           containing  all of the sources of RENBR and then to merge them back
           together again.
48                                                The RENBR User's Guide


            Appendix D: Summaries Produced by the /Z Switch
            -------- -  --------- -------- -- --- -- ------

The /Z switch can be issued by the user to  produce  a  summary  of  the
allocation  and  use of the arrays needed to store the information which
is included in the listings.  A description of the files which are  read
and written is also produced as these are opened.

The summary of the utilization of the array space  is  similar  to  that
shown at the left below.  The numbers shown in this example would be for
a very large program.  The information in each line is described to  its
right.

       Through Page  263   page number on final page
         Page Total  265   total number of pages produced
Extra Number Tables    3   how often number table overflowed
  Extra Word Tables    9   how often word table overflowed
    Statement Total 4636
      Comment Total 4420
Storage Summary
Num     1879/ 1000(- 60)   statement number references
Wrd Loc21774/ 5000(-400)   locations of names and words
Wrd Spl 6288/ 2000(-200)   spelling of names and words
Tbl       35/   28         items in table of contents

The number which appears to the left of the slash in each of the last  4
lines  is  an  estimate  of  the amount of space used for the program or
routine which required the most space for this particular table.  If the
corresponding  table had to be printed in the middle of the listing of a
single program or routine to make room for more information,  then  this
number  is  the  sum  of  the  amount  used each time that the table was
printed in the program or routine which required the  most  space.   The
number  to  the right of the slash is the actual size of the array.  The
number in parentheses is an estimate of the array space needed to hold 1
additional  page  of  information,  and  is the amount which must remain
unused at the start of each new page in the listing of the lines of  the
program  to  avoid  immediate production of the corresponding table.  In
order to list the longest program or routine without having to print the
tables  before  the end of the program or routine, the array space which
would be needed is thus the sum of the first and third numbers  on  each
line.

The summary of the files which are opened by the program will consist of
lines  which  are  similar  to  those  which  are shown below.  The file
conventions in these examples are for the DECsystem10  computer.   These
lines are produced by the user interface routines.

KND 1 ERR 0 DSK  :REFMT .RNB[000123,000456,SFD   ]
KND 2 ERR 0 DSK  :REFMT .FOR[000123,000456,SFD   ]
KND 3 ERR 0 DSK  :REFMT .NEW[000123,000456,SFD   ]
KND 4 ERR 0 DSK  :REFMT .LPT[000123,000456,SFD   ]
KND 5 ERR 0 DSK  :REFMT .FOR[000123,000456,SFD   ]
      Appendix D: Summaries Produced by the /Z Switch                       49


      Each of these lines contains the following items of information.

         KIND = describes the type of file.
              = 1,  input  command  file  containing  list  of  files  to   be
                processed.
              = 2, first input file to be processed.  Output  files  have  not
                yet been opened.
              = 3, output renumbered file.
              = 4, output listing file.
              = 5, second or subsequent  input  file  to  be  processed.   All
                output files have already been opened.

        ERROR = describes whether the attempt to open the file was successful.
              = 0, the file was opened successfully.
              = 1, the file could not be opened.

      These first 2 items are followed by the name of the disk structure,  the
      name of the file and the name of the account owning the file.
50                                                The RENBR User's Guide


           Appendix E: Instructions for the Support Programs
           -------- -  ------------ --- --- ------- --------

The programs described below are provided as development and maintenance
aids  for  RENBR.   These programs recognize the particular variable and
array names  used  within  RENBR,  or  produce  new  FORTRAN  statements
containing  such  names.   They  should not, therefore, be used in their
current form to process programs other than RENBR, although  they  could
be modified to do so.


                           The REBIG Program
                           --- ----- -------

The listings produced by RENBR  include  tables  identifying  the  lines
which  bear  statement  numbers  and  which  refer to these numbers, and
indexes which list  the  lines  which  contain  the  various  variables,
constants  and FORTRAN reserved words.  These tables are usually printed
following the listing  of  the  statements  in  each  main  program  and
routine.   However,  if the arrays used to store these lists fill before
the end of the program or routine is reached, then  the  lists  will  be
printed  in the middle of the listing of the statements so as to release
the array space for storing additional information.  As supplied,  RENBR
can  produce  uninterrupted listings of individual FORTRAN main programs
or individual routines containing approximately  800  lines  other  than
comments,  although  this  limit  is  highly  dependent upon programming
style.  Storing the information for 800 lines requires 2 integer  arrays
containing  up  to 1000 values each for the statement number references,
an array containing up to 2000 characters for the words and constants in
the  index,  and  an  integer array of up to 5000 values for the numeric
information which is to be included in the index.

A table of contents consisting  of  the  names  of  the  main  programs,
routines  and  entry  points  which are included in the listing, and the
page numbers on which these start, is printed at the end of the listing.
The  names  appearing  in  the table of contents are shown in 2 parallel
lists, the left list being sorted alphabetically,  and  the  right  list
being  in  the  order  in  which the programs, routines and entry points
appear in the listing.  As supplied, RENBR can store the information for
a  table  of  contents  which contains up to 28 names and which will fit
onto a single page in the listing.  If the listing contains more than 28
programs,  routines  and  entry points, then RENBR will print a table of
contents containing the names of the 28  programs,  routines  and  entry
points  most recently listed at each point in the listing where the next
name would not fit.  However, the sizes of the arrays used to store  the
information which is to appear in the table of contents can be increased
to  allow  the  information  for  a  longer  table  of  contents  to  be
accumulated.   In  addition  to allowing the entire table of contents to
appear at the end of the listing, increasing the sizes of  these  arrays
also  allows  the  names  to be sorted alphabetically amongst all of the
names appearing in the listing, rather than just among  those  appearing
on the same page in the table of contents.

Even without changing the sizes of the arrays, RENBR  can  renumber  any
individual  main  program  or  routine  containing  up  to 1000 numbered
statements if a listing is not being produced at  the  same  time.   The
sizes of 2 arrays in RENBR will have to be increased if it is to be used
      Appendix E: Instructions for the Support Programs                     51


      to either list or  renumber  statements  continued  onto  more  than  19
      continuation  lines.   The sizes of 2 other arrays in RENBR will have to
      be increased if it is to be used to renumber main programs  or  routines
      each containing more than 1000 numbered statements.

      The REBIG program can be used to change the sizes  of  these  arrays  in
      RENBR.   The REBIG program asks for the various maximum numbers of items
      which must be allowed for in  renumbering  or  listing  a  program,  and
      calculates  the  dimensions  of  the  arrays  needed by RENBR from these
      answers.  Except for the number of items in the table of contents, these
      maximum numbers are for the longest single main program or routine which
      will be processed, and do not depend at all upon how  many  programs  or
      routines happen to be in the file or files which will be processed.  The
      REBIG program reads the original version of RENBR, and  produces  a  new
      version  of  RENBR  as  a result.  Either the Hollerith or the character
      string version of RENBR can be processed.  The RENBR block data routine,
      main  program,  all  of  its  subroutines, and the version of the REUSER
      routine being used, must all be processed using the same answers to  the
      questions.   To  save  answering the same questions several times, these
      can all be appended into a single file before they are processed.  REBIG
      should  not  be  used  again  to process the resulting version of RENBR,
      since the strings being searched for include the original  array  sizes.
      If  it  is  later  found that the array sizes must be increased further,
      then the original version of RENBR should be processed again.

      The REBIG program requests  that  the  user  supply  estimates  for  the
      maximum values of the following items.

      Number of names in table of contents (28/560)
      Number of numbered statements (300/500)
      Number of references of numbered statements (640/1100)
      Letters in names of different words and constants (1800/5000)
      Number of different words and constants (600/1100)
      Total appearances of all words and constants (1400/8100)
      Number of lines in a single statement (20/30)

      The first number which appears  to  the  right  of  each  of  the  above
      descriptions  is the value currently allowed by RENBR.  The number which
      appears to the right of the slash is a suggested value  which  is  large
      enough  to handle almost any program.  If the user does not supply a new
      value for a particular item, i.e., if the user presses  the  RETURN  key
      without  typing anything else first, then the current value of that item
      is retained.  The REBIG program will report the total array space needed
      to handle the estimates supplied by the user, and will display each line
      which is changed.


                                 The RECUT Program
                                 --- ----- -------

      The RECUT program can be used to split a large file containing  most  or
      all  of the RENBR program into many small files each containing merely a
      single routine or a few closely associated routines.  The RECUT  program
      can also be used to merge the small files back into the large file.  The
      large file can either contain the sources of only the relatively machine
      independent  portions  of  RENBR, or can also contain the sources of the
      various version of REUSER and RETEMP as well.
52                                                The RENBR User's Guide


The RECUT program searches for the END statements in the file  or  files
which  are  processed.   Each  END  statement  must  consist of 6 spaces
followed by the word END in upper case, and  nothing  else.   Any  other
form  of  the  END  statement will not be recognized.  Some of the small
files  processed  by  the  RECUT   program   contain   several   related
subroutines.   When processing these files, the RECUT program counts the
number of END statements  to  determine  when  the  next  file  must  be
started.   If  the  number  of  subroutines in any of the small files is
changed, then the array in the RECUT program which  specifies  how  many
END  statements  are  in  each  of  the  small  files  must  be  changed
accordingly.


                           The REFMT Program
                           --- ----- -------

The RENBR program recognizes statement numbers in FORTRAN statements  by
applying  some  2 dozen different possible operations in the order which
is specified by a list of numbers which indicate what operation is to be
performed  next depending upon whether the current operation succeeds or
fails.  The capability to recognize new language constructs is added  by
appending  the numbers selecting additional operations to the end of the
list, modifying the success or  failure  destinations  in  the  previous
portion  of  the  list  so  that the new operations are performed at the
correct times, and making the final  operations  performed  by  the  new
portion  of the list transfer back into the previous portion of the list
to perform subsequent operations.

Such patching produces a list which is difficult for a human to  verify,
but  which  can  drive the RENBR program as efficiently as a list having
any other order.  Portions of the list which are no longer needed become
inactive  when  the  numbers  indicating transfer to them are changed so
that  they  can  no  longer  be  reached.   Since  the  list  is  highly
interconnected,  changing  the order of the items in the list to make it
more easily understood or to remove obsolete sections  is  difficult  to
perform  by  hand  and  is  prone to errors.  The REFMT program which is
supplied with RENBR can rearrange the items in the list and the words in
the  glossary referenced by the list into any desired order.  All of the
pointers within the list are kept correct.  The only restriction is that
the  operation  which  appears first in the list cannot be shifted.  The
REFMT program also prints a written description of the list which  shows
the interconnections between the operations in the list.

In order to use the REFMT program, it must be loaded with the  Hollerith
version  of  the  BLOCK  DATA routine from RENBR, and the labeled COMMON
statement in the REFMT program must be identical to that  in  the  BLOCK
DATA routine.  The only items which are used from the BLOCK DATA routine
are the definitions of the LTRPRS, NUMPRS,  LTRABC  and  LWRABC  arrays.
The  contents  of  the LWRPRS array are defined by the REFMT array to be
parallel to those in the LTRPRS array, but the original contents of  the
LWRPRS  array  are  ignored.   A few other variables which appear in the
COMMON statements are also used internally in  the  REFMT  program,  but
these are defined within the REFMT program.
      Appendix E: Instructions for the Support Programs                     53


      When it is started, the REFMT program will ask for the  user  to  supply
      the  names of the 4 files which are described below.  The first of these
      files is an input file, the remaining 3 are output files.

       1.  The file specifying the desired order
           The REFMT program will rearrange the words in the  vocabulary,  and
           the operations needed to recognize the various types of statements,
           into the order specified by this file.

       2.  The file to which the new DATA statements are to be written
           The original version of these DATA statements can be  removed  from
           the  BLOCK  DATA routine, and the new version which is written into
           this file can be inserted, or else  this  file  can  be  referenced
           directly by an INCLUDE statement in the BLOCK DATA routine.

       3.  The file to which the next input file is to be written
           The contents of this file are a suggestion only.  If this  file  is
           used  as  the  input file for a subsequent run of the REFMT program
           but without changing the DIMENSION and DATA statements in the BLOCK
           DATA  routine,  then  the DIMENSION and DATA statements produced by
           this subsequent run will define a list with the minimum  number  of
           connected  chains  of  operations,  and with all obsolete words and
           operations being discarded.  If the  user  instead  wants  to  have
           direct  control  over the order, then this suggested version of the
           next input file can be ignored or edited.

       4.  The file to which the listing is to be written
           A description of the operations in the list will be written to this
           file.   This  file  can  be  checked  to  verify  which  tests  are
           performed, and the order in which they are applied.

      The words and single characters which  must  be  recognized  during  the
      interpretation  of  FORTRAN  statements  are stored in the LTRPRS array.
      The input file read by the REFMT program should start  with  a  list  of
      these  words  and single characters.  Each word or single character must
      be left justified on a separate line.  The words and  single  characters
      in  the LTRPRS array will be rearranged into the order indicated by this
      list, and all pointers to them will be changed accordingly in the NUMPRS
      array  which  indicates what operations are performed and in what order.
      Any words or single characters not specified by the file will be shifted
      upward  in  the  LTRPRS  array above those which are specified, but will
      remain in their original order relative to  each  other  in  the  LTRPRS
      array.  The words and single characters specified by the input file must
      already  appear  in  the  LTRPRS  array.   Including  words  and  single
      characters  in  the  input file merely indicates the order in which they
      are stored in the LTRPRS array.  Including them in the input  file  does
      not  allow them to be recognized if they were not recognized before, and
      does not change the order in which they will be recognized.  The list of
      words  and  single  characters  must be terminated by a blank line.  The
      blank line following this section of the file is necessary even  if  all
      of  words and single characters in the LTRPRS array are specified by the
      file.  For purposes of this section of the file, the several  characters
      which  can  be  recognized  by  the  operation  of type 6, which takes a
      different branch depending upon which  character  appears  next  in  the
      statement, are considered to form a single word.
54                                                The RENBR User's Guide


Following the first section of the file should be a list of the original
serial  numbers  of  the operations described by the NUMPRS array in the
order in which these are desired to appear.  These serial  numbers  must
appear one per line.  Operations are described in the NUMPRS array by an
integral number of 5 values.  Most operations are in fact  described  by
exactly 5 values.  Thus, the operation specified originally in locations
46 thru 50 would be selected by the serial number  10  if  each  of  the
earlier  operations  are  described  by  5 values, since these locations
would form the 10th group of values in  the  original  contents  of  the
NUMPRS  array.   A  zero  or a blank line terminates this section of the
file.  Any groups of  numbers  not  specified  will  be  left  in  their
original order relative to each other.

In  determining  the  serial  numbers,  earlier  operations  which   are
described  by  more  than  5  values  are each considered to be a single
operation.  Thus, if the NUMPRS array starts with a type 1 test, then  a
long  type 6 taking more than 5 locations, then another type 1 test, the
third test will have 3 as its serial number even though it starts beyond
location 11.

An input file which consists only of 2 blank lines would result  in  the
production of DIMENSION and DATA statements which are identical to those
already in the BLOCK data routine.  Such an input file might be used  to
produce  a listing of the initial structure of the lists, or to obtain a
new version of the input file which could then be used to more logically
reorder the arrays.


                           The REH2C Program
                           --- ----- -------

The version of the RENBR program which is  supplied  in  the  RENBRH.FOR
file  reads,  processes and writes Hollerith 1H arrays.  Since Hollerith
notation  is  no  longer  supported  by  the  FORTRAN77  standards,  the
algorithms  used  in RENBR have been written so that they will work with
character*1 arrays as well.  The conversion from the  version  of  RENBR
which  uses  Hollerith  notation  to that which uses FORTRAN77 character
strings only requires the insertion of  several  CHARACTER*1  statements
into  the  program,  and the conversion of character strings where these
appear in DATA statements and FORMAT statements from Hollerith  notation
to apostrophe notation.  These changes can be performed automatically by
the REH2C program.  The RENBRC.FOR file which is supplied  was  produced
directly  from  the  RENBRH.FOR file by the REH2C program.  However, the
REUSER program was extensively rewritten by hand to make better  use  of
character strings in the OPEN statements.


                           The REOPR Program
                           --- ----- -------

The RENBR program recognizes the single character FORTRAN operators such
as  +, -, *, / and the multiple character FORTRAN operators such as .EQ.
and .NOT. by testing for the characters which could appear next  in  the
operator  based  upon  those  which  have  already  been found, and then
transferring to a different point in a controlling table depending  upon
whether  the  current test is a success or a failure.  The REOPR program
is used to produce the DATA statements which specify  this  table.   The
      Appendix E: Instructions for the Support Programs                     55


      BLOCK  DATA routine from RENBR does not have to be loaded with the REOPR
      program since the operators which are to be recognized  are  defined  by
      the data file.

      The REOPR program  reads  a  single  input  file  which  specifies  each
      operator  left justified on a separate line.  All characters of multiple
      character  operators  such  as  .AND.  must  be  specified  without  any
      separating  spaces.   Alphabetic  characters  in  the  input file should
      either be all upper case or all lower case.  The input  file  should  be
      terminated  by  an  empty  line  if  the  END=  end of file test in READ
      statements is not available.  The contents of  a  file  which  could  be
      processed  by  REOPR  to  produce the DATA statements defining the table
      currently used by RENBR are listed in comment lines in  the  BLOCK  DATA
      routine in RENBR.

      The REOPR program writes the DATA statements  needed  to  recognize  the
      operators  into an output file.  If the list of operators which RENBR is
      to recognize is to be changed, then the contents  of  this  file  should
      replace  the  corresponding DIMENSION and DATA statements already in the
      BLOCK DATA routine in RENBR.  The file produced by REOPR  also  includes
      comment  lines  describing  the  tests  which  are performed by RENBR in
      recognizing the operators.  These comment lines  are  followed  by  DATA
      statements  specifying each character to be matched, the location of the
      next character to be tested for if a match succeeds, and the location of
      the  next  character  to be tested for if a match fails.  All alphabetic
      characters appear twice in the DATA statements, regardless of their case
      in the input file, first in upper case and then in lower case.  If it is
      not necessary that RENBR be able to recognize operators formed from both
      cases,  then  the  entire  section  of  code  in the REOPR program which
      recognizes the alphabetic letters and inserts  the  corresponding  lower
      case letters can be removed.

      The procedure which is used to produce the  DATA  statements  is  really
      meant  for  representing large arrays.  Such large arrays would be split
      into several arrays each small enough to be specified by a  single  DATA
      statement,  then  these  small  arrays  would  be  equivalenced with the
      respective portions of the  original  large  array.   Since  the  arrays
      needed to specify the FORTRAN operators are short, such equivalencing is
      not really necessary.  The DATA statements can be changed to define  the
      overall   arrays  directly,  and  the  EQUIVALENCE  statements  and  the
      DIMENSION statements for the component arrays can then be discarded.