Previous: port Up: ../plot79.html Next: slides
- PRETTY - A FORTRAN Program Prettyprinter PRETTY is a program written in Portable FORTRAN which processes an input file of FORTRAN routines and produces an edited output file and listing in which all statement numbers have been replaced by numbers in ascending order with a uniform increment, and DO loops indented. Facilities are available for changing precision (both in constants and function calls), converting strings delimited by quotes (or other specified characters) to ANSI Hollerith strings, conversion of FORTRAN II I/O statements to FORTRAN IV statements, and others. Extensive documentation may be found in the PRETTY User's Guide, available from 210 South Physics.
For use on the DECSYSTEM-20, options may be provided either interactively, or in a file with default extension ".DEF". Output of PRETTY will be on the files xxxxxx.NEW (output routines) and xxxxxx.LST (output listing). PRETTY may be invoked interactively by the command @PRETTY after which the user will be queried for file names and input options. A shorter form is simply to place the file names on the command line: @PRETTY oldfile,newfile,listingfile,optionfile The FORTIO package (type HELP FORTIO) is used to open the files and access the command line. Thus, if any files are omitted, the previous file names, but with the default extensions (.FOR, .NEW, .LST, and .DEF respectively) will be assumed. File names may alternatively be provided in a file named PRETTY.CMD, one per line. Once a convenient set of input options has been found which is to be used repeatedly, it will usually be convenient if these are put in a file named PRETTY.DEF. PRETTY will use that file if it cannot find the option file of the specified name. If neither exist, the option file will be directed to the terminal and input prompts will be issued. In batch mode, the control card file should contain @PRETTY *oldfile *newfile *listingfile *optionfile *...option list if optionfile=TTY...(may use up to 10 lines) For DECSYSTEM-20 use, one new option, SEQNUM, has been defined. It defaults to .FALSE., indicating that the output source file will not be sequenced in columns 73-80 and that trailing blanks will be removed from each line. This gives a substantial reduction in disk storage requirements. Setting SEQNUM=.TRUE. will result in sequencing. PRETTY will NOT perform properly if the input source file contains TAB characters. These are not part of standard FORTRAN and will not be accepted on most computers. If your file has TAB characters, they may be removed by the DETAB utility. (Type HELP DETAB for more information). Similarly, it will not recognize FORTRAN statements in which lower-case letters are used in the keywords. Lower-case is, however, perfectly acceptable in comments and character strings, and will be preserved in the output. This version of PRETTY is Release 3.0. It replaces Release 2.0 which was called FOREDT on the DEC-20 so as to avoid a name conflict with the local text editor. PRETTY is approximately twice as fast as FOREDT, and works harder to break continued statements at nice places. The output routine which does this is adapted from that used in the SFTRAN3 preprocessor. Any problems with, or questions about, should be communicated to Dr. Nelson H.F. Beebe, 226 South Physics, Tel: (801) 581-5254, or send MAIL to BEEBE. The options which are currently available are as follows:
BLOCK.......Comment statements stand out much better if they are separated from the FORTRAN text by a distinctive line. Setting BLOCK=.TRUE. will cause the insertion of a line of dashes before and after each comment statement block.
CVTIO.......FORTRAN II I/O statements READ, PRINT, and PUNCH are not ANSI FORTRAN, and though accepted by most compilers sometimes cause difficulties. For example, in CDC FORTRAN, the file names associated with these are fixed. Setting CVTIO=.TRUE. will result in their replacement by IBM standard READ (5,etc), WRITE (6,etc), and WRITE (7,etc) statements.
CVTSTR......Character strings delineated by special characters such as single or double quotes or asterisks are convenient to code, but cause great portability problems. If CVTSTR=.TRUE., all such character strings surrounded by a specified delimiter character (see MARK below) will be converted to ANSI-standard Hollerith strings.
EJECT.......To suppress page ejects before each new program unit, specify EJECT=.FALSE. A line of equals signs will be printed as a separator line instead.
IN..........FORTRAN unit number for the data set containing the input FORTRAN source text.
INCONT......Number of columns to indent continuation lines from the first line of the statement.
INCR........Sequence number increment for columns 73..80.
INCFMT......FORMAT statement number increment. This will be adjusted downward if necessary.
INCST.......Statement number increment. This will be adjusted downward if necessary.
INDENT......Number of columns to indent successive nested DO-loops.
IOFILE......FORTRAN unit number for first scratch file.
IOPRNT......FORTRAN unit number for the printed output listing.
IOREAD......FORTRAN unit number for the input file containing control options. If options are provided through the job control language, this file will not be used. It must be different from IN.
IPREC.......Because IBM compilers interpret floating point constants without an exponent as single precision, it is desirable to be able to add an appropriate exponent if a different precision is required. Setting IPREC = 1, 2, or 3 will cause the conversion of _all_ floating-point constants to single, double, or quadruple precision by the addition or changing of exponents to E, D, or Q type. At the same time as floating-point constants are converted, all ANSI and IBM FORTRAN built-in function names are changed to the specified precision. Any other value of IPREC will suppress such changes, and since the scan required is reasonably time-consuming, this option is disabled by default.
LC..........Number of lines/page for printed output.
MARK........Character string delimiter character. To allow for NAMELIST input on machines which do not permit character strings in NAMELISTs, MARK may be set to 1 for a single apostrophe ('), 2 for a double apostrophe ("), 3 for an asterisk (*), or 4 for a dollar sign ($). Any other value will be assumed to represent a Hollerith character stored in A1 format. If MARK is an asterisk, substitutions will be restricted to FORMAT statements to conform to CDC FORTRAN use.
MAXNUM......Printing of the prettyprinted text for any single program unit will be suppressed after MAXNUM lines have been output for the program unit. For example, MAXNUM=20 would allow printing of only the first 20 lines of each routine processed.
NEWFMT......Initial FORMAT statement number.
NEWST.......Initial text statement number. It must not exceed NEWFMT since all FORMAT statements are output immediately before the END statement.
NEWTXT......FORTRAN unit number for the data set containing the output prettyprinted FORTRAN text.
NUFILE......FORTRAN unit number for second scratch file.
NUMBER......Initial sequence number for columns 73..80.
PAD.........To improve readability of text, setting PAD=.TRUE. will cause the insertion of padding blanks around equals signs as well as around logical and relational operators.
PURGE.......PRETTY normally makes two passes over the old code, once to collect labels, and once to substitute labels. It is not until all labels have been substituted that it is possible to detect whether or not any labels are unreferenced. The PURGE option requests a third pass in which unreferenced labels can be deleted. PURGE=0 suppresses label deletion. PURGE=1 requests unreferenced label deletion on non-FORMAT statements. PURGE=2 requests deletion of unreferenced FORMAT statements. PURGE=3 combines options 1 and 2. Any other value is equivalent to PURGE=0. A second run of _PRETTY_ should later be made to resequence in order to fill up the gaps where labels have been deleted.
SEQNUM......If .TRUE, sequence numbers are placed in output lines in columns 73..80. If .FALSE., sequence numbers are omitted, and trailing blanks are trimmed.
Defaults for these have been selected on the basis of long experience, and it is highly recommended that they be adhered to. The current list of defaults is as follows: BLOCK=F, CVTIO=F, CVTSTR=F, EJECT=T, IN=8, INCONT=5, INCR=100, INCFMT=10000, INCST=100, INDENT=5, IOFILE=2, IOPRNT=6, IOREAD=5, IPREC=0, LC=80, MARK=1, MAXNUM=99999999, NEWFMT=10000, NEWST=100, NEWTXT=1, NUFILE=3, NUMBER=100, PAD=F, PURGE=0, SEQNUM=F