Google
 

Trailing-Edge - PDP-10 Archives - AP-D480B-SB_1978 - ftn5a.doc
There is 1 other file named ftn5a.doc in the archive. Click here to see a list.


FORTRAN-10 -- Changes from V5(515) to V5A(621)
October 1977






























COPYRIGHT (C) 1975,1977 BY
DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.


THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED
ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE
INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER
COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY
TRANSFERRED.

THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE
AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT
CORPORATION.

DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS
SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
FTN5A.DOC - FORTRAN-10                                          Page 2


FORTRAN-10 -- Changes from V5(515) to V5A(621)
October 1977



1.0  SUMMARY

Version 5A of the FORTRAN compiler is a  maintenance  release  to  fix
known  bugs  that  have been reported in version 5.  Also included are
the latest versions of FOROTS, FORLIB and FORDDT.  The purpose of  the
release is to provide a tested version with all of the patches to date
incorporated.

Fortran version 5A is Fortran version 5 with edits #516  through  #621
inclusive.

1.1     Bibliography

The FORTRAN language and this  implementation  are  described  in  the
Software Notebooks and in the FORTRAN-10 Programmer's Reference Manual
- AA-0944E-TB.

1.2     Monitors

This version of Fortran will run under any monitor  supported  by  DEC
for  the  DECsystem-10.  It has been tested under 5.07, 6.01, 6.02 and
6.03.  It conforms to DATE75 standards.

1.3     Related System Software

The following system software must be used with the FORTRAN compiler:


     BLIS10  7B(222)
     LINK    any version
     FOROTS  4B or later
     FORLIB  4B or later
     SCAN    7B



2.0  EXTERNAL CHANGES

The processing of an initial tab has been fixed to correspond  in  all
cases with the documentation.  It was incorrectly handled if in column
6.

A new syntax error is detected:  if an implied DO loop  index  is  the
same  as  a currently active DO index (implied or otherwise), an error
is reported.

Only non-blank lines are outputted in the  line-number/octal-loctation
map generated under /LNMAP.

In addition a large number of SPRs have been  answered  since  version
FTN5A.DOC - FORTRAN-10                                          Page 3


5(515).  All of these edits plus a number of bug fixes are included in
version 5A.



3.0  KNOWN BUGS AND DEFICIENCIES

Deeply nested expressions might get "stack overflow" in FORTB.



4.0  INSTALLATION INSTRUCTIONS

There are no changes in the installation instructions.   This  version
of  the  compiler  requires  version 7B(222) of the BLISS compiler and
version 52 of MACRO.

See the file FTN5A.FIG for information regarding installation.



5.0  INTERNAL CHANGES

The following is a list of all the edits made  to  version  5(515)  in
producing version 5A.


#516   SPR-21215  Find files with blank extensions in SFDs.

#517   SPR-21238  Make SFDs in command strings work.

#520   SPR-21271  Prohibit negations in relational COMSUBs.

#521   QAR-900    Fix params to FATLEX in OPENCLOSE.

#522   SPR-20819  Check negflgs for arrayrefs in iolists.

#523   QAR-1038   Fix default flag settings for SCAN:  switches  count
                  from left not right.

#524   QAR-876    Put back array ref in STPRECLUDE so hash entry taken
                  out  of  tree;  call STPRECLUDE before CMNMAK so can
                  hash skewed tree with neg flags unchanged.

#525   QAR-949    Do correct TYPECNV in DOTOFIX only if necessary.

#526   QAR-1035   In CHKDOM if FNARY and no match on "func(arrayref)",
                  put back arrayref so hash tbl entry not in tree.

#527   SPR-20317  Bad code for ASSOCIATE VARIABLEs in COMMON.

#530   SPR-21606  Bad  code  for  DOUBLE   PRECISION   SPECOPs   which
                  generated FSC instructions.

#531   SPR-20323  Give warning when subroutine parameter  is  used  as
FTN5A.DOC - FORTRAN-10                                          Page 4


                  ASSOCIATE VARIABLE.

#532   SPR-20323  Fix code generation for an array element used as  an
                  ASSOCIATE VARIABLE.

#533   SPR-21796  INCLUDE stmnt destroys locs 4400-4402.

#534   SPR-21817  Internal compiler errors in FORTB  caused  by  badly
                  structured statement functions.

#535   SPR-21809  Inaccessible code with zero line number.

#536   SPR-none   Add RCHAR to err name plit.

#537   SPR-21811  Bad printing of error continuation line.

#540   SPR-22191  Bad COMMON stmnt gives ICE.

#541   SPR-none   -20 only:  clear LASTCHARACTER in READTXT  after  ^Z
                  seen so more TTY:  input may be done.

#542   SPR-22147  Make a NOT imply type LOGICAL always.

#543   SPR-none   Fix binary search for library name.

#544   SPR-10290  FIND stmnt node too small - expand it.

#545   SPR-22096  Function values must go into really free regs.

#546   SPR-22030  Fix problems with operations which clobber following
                  register (IDIV).

#547   SPR-21280  (QAR-863) Fix initial tab in column 6 to go to col 7
                  on an initial line or col 6 if a continuation line.

#550   SPR-21824  Fix reg allocation for big expression.

#551   SPR-21826  Fix type conversion during code generation.

#552   SPR-21826  Generate better code for type  conversion  of  array
                  reference.

#553   SPR-21826  Type  conversion  may  be   necessary   if   LOGICAL
                  operation above it is liquidated.

#554   SPR-22324  AND node with the negation of a function call  below
                  it gives bad code.

#555   SPR-22281  Fix line number/octal map with ENTRY points.

#556   SPR-none   Put /L in heading of page if octal map requested.

#557   SPR-none   Catch wild PPN or SFD as error.

#560   SPR-none   -20  only:   handle  PPNs  in   the   command   line
FTN5A.DOC - FORTRAN-10                                          Page 5


                  correctly.

#561   SPR-10429  Allow continuation lines after page marks  and  form
                  feeds.

#562   SPR-22540  Iolists in optimizations may kill reg 0.

#563   SPR-22541  Spurious errors  if  first  arg  to  lib  fn  is  of
                  unacceptable type.

#564   SPR-22693  Make  CGREAD  ==  CGWRIT:   generate  FIN  call   on
                  unformatted WRITE with no iolist.

#565   SPR-21810  Extended range DO loops gives bad graph.

#566   SPR-22701  Bad COMSUBs with many NOT flags and shape SKEW.

#567   SPR-22284  EXTERNAL stmnt not remembered at ENTRY points.

#570   SPR-22703  Bad stmnt fn gives ice (FN(2,3)).

#571   SPR-22378  Add IDUSECNT definition;   add  ARALINK  definition;
                  fix V5 opt that shares 2nd offset of formal array if
                  1st dims = so all will work  if  array  subsequently
                  typed  different  number  of words than when sharing
                  1st done;  define and call CLERIDUSECNT  at  end  of
                  MRP1.

#572   SPR-21825  Check implied DO  index  for  already  active  (from
                  enclosing implied or real DO).

#573   SPR-none   New REQUIRE file to hold DBUGIT flag;  remove  "BIND
                  DBUGIT="  in  IOFLG;   REQUIRE DBUGIT.REQ in DRIVER,
                  INOUT, LEXICA and LEXSUP.

#574   SPR-none   Rewrite binary search in SRCHLIB to work after  edit
                  543.

#575   SPR-22820  Rewrite ZAPLEVEL to prevent stack overflow for  very
                  large branching program.

#576   SPR-22796  Fix line number given for infinite loop

#577   SPR-22352  DO  loop  with  a   CALL   statement   inside   must
                  materialize loop variable if it is in COMMON.

#600   SPR-22990  More efficient stack usage in FORTE.

#601   QAR-20-26  Fix edit 572 to  check  implied  DO  index  in  DATA
                  statements   for  "ALREADY  ACTIVE"  from  enclosing
                  implied DO.

#602   SPR-22700  Optimized  iolists  with  skewed   expressions   may
                  generate ELISTs incorrectly.
FTN5A.DOC - FORTRAN-10                                          Page 6


#603   SPR-23442  Add * as initial char for label constant.

#604   SPR-23425  Fix listing of COMMON block so that we do not get an
                  extra carriage return.

#605   SPR-23478  Bad code with /OPT for asgmnt stmnt  with  lhs  like
                  A(I/2) or A(I**5).

#606   SPR-22795  Some overflows during constant folding not  detected
                  and poor code given.

#607   SPR-22685  Generate zero argument block only if needed.

#610   SPR-23333  Bad code for COMSUB with neg  flag.   Replaces  edit
                  345.

#611   SPR-23662  Immediate size complex constants cause  trouble  for
                  code generation.

#612   SPR-23263  Initialize ARRCOUNT in IOCLEAR (this completes  edit
                  406).

#613   QAR-2114   Ignore indirect bit in  formal  function  target  in
                  entry prologue.

#614   SPR-23760  Output only non-blank lines on /LNMAP.

#615   SPR-23116  Be careful with labels when preloading.

#616   SPR-22345  /O list under register scarcity gives ICE.

#617   QAR-2121   Only try to substitute the subscript of an  arrayref
                  if it isn't a constant.

#620   SPR-23720  D.P.  array ref in io list  causes  problems  during
                  optimization (IOLSCLS node ptrs).

#621   QAR-2120   Account for page marks at end of file.



6.0  SUGGESTIONS

None.



[End of FTN5A.DOC]

[FTN5.DOC is appended as an integral part of FTN5A.DOC]
FTN5.DOC - FORTRAN-10                                           Page 7


FORTRAN-10 -- Changes From V4A(317) to V5(515)
November 1976



1.0  SUMMARY

Version  5  of  the  FORTRAN  compiler  is   a   development   release
incorporating   improved  optimizations  that  will  increase  program
execution speed for matrix multiplication plus many bug fixes and SPRs
fixing  known  problems.   In  addition, an optional LINE NUMBER/OCTAL
LOCATION map has been added to the listing output by the compiler.

Also included are the latest versions of FOROTS,  FORLIB  and  FORDDT.
New  functionality  has  been  added  to FORTRAN, FOROTS and FORLIB to
allow user-handling of soft and hard I/O errors on OPEN,  CLOSE,  READ
and  WRITE  using  ERR=.   The  purpose of the release is to provide a
tested version with all of the patches to date incorporated.

This version of Fortran will run under any monitor  supported  by  DEC
for  the DECsystem-10.  It has been tested under 5.07, 6.01, and 6.02.
It conforms to DATE75 standards.

The FORTRAN language and this  implementation  are  described  in  the
Software Notebooks and in the FORTRAN-10 Programmer's Reference Manual
- AA-0944E-TB.



2.0  EXTERNAL CHANGES

The major improvement  in  version  5  is  to  recognize  certain  new
expressions  as  candidates  for  optimization.  One specific class of
programs which will be favorably affected  is  matrix  multiplication.
Common  sub-expression  elimination and motion of constant expressions
are performed again after reduction in  strength  and  propagation  of
constants  in order to optimize expressions of the form .R + X as well
as expressions containing propagated constants.  Also array references
containing   common   sub-expressions   are   optimized   in   certain
circumstances;  extraneous  optimizer  variables  are  not  allocated;
register  allocation  of  computations to memory has a higher priority
than index usage;  improved  packaging  techniques  are  incorporated;
variable  offsets  for  formal  arrays  are  shared  to  allow  common
sub-expression optimization.

In addition a large number of SPRs have been  answered  since  version
4A(317).   All  of these edits plus a number of bug fixes are included
in version 5.
FTN5.DOC - FORTRAN-10                                           Page 8


A LINE NUMBER/OCTAL LOCATION map, under  the  control  of  the  /LNMAP
switch,  has  been  added  to  the  listing  generated  by the FORTRAN
compiler if no MACRO listing is requested.  The  default  is  NO  line
number  map.  The /LNMAP switch with NO /MACRO switch enables the line
number map.  If BOTH /LNMAP and /MACRO are specified, no  line  number
map  will  be produced since all of the information from the map is on
the MACRO listing.  The map appears as a matrix, with the  rows  being
line numbers in increments of 10 and the columns being line numbers in
increments of 1.  The values of the matrix entries are octal locations
where the line numbers (specified by the row and column intersections)
start.  On the MACRO listing, more than  one  octal  location  can  be
associated with a line number, eg, a logical IF generates code for the
Boolean expression and the "THEN" statement (all of which may take  up
more  than  one octal location but the IF statement may be on one line
and therefore one line number is associated with more than  one  octal
location).  The LINE NUMBER/OCTAL LOCATION map contains only the first
such octal location for a given line number.  Notice that  the  matrix
can be large and sparse for line-numbered files with a large increment
(like those created by SOS).

The following functionality has been added to FOROTS/FORLIB:

     1.  ERR= has been added to OPEN and CLOSE as  an  argument.   See
         6.0   for  the  additional  syntax  of  the  OPEN  and  CLOSE
         statements.

     2.  The ERR= branch will be taken for hard  and  soft  errors  on
         OPEN,  CLOSE,  READ  and WRITE and any I/O operation on which
         the ERR= option is permitted.   This  applies  to  ASCII  and
         BINARY files.

     3.  A subroutine has been added  to  FORLIB  called  ERRSNS.   It
         takes  one  or  two  arguments,  each  of which is an integer
         variable in which to return an integer  value  that  reflects
         the  status  of  the  last I/O operation done by FOROTS.  The
         value   returned    in    the    first    argument    is    a
         Fortran-standardized  indicator  of what error occurred.  The
         value returned in the second argument (if present) is a  more
         processor-dependent  indication  of  the  error.  Zero always
         means satisfactory completion.  The other  integers  returned
         are  unique  within  the FORTRAN system and are documented in
         the Fortran Programmer's Reference Manual.  See 7.0  for  the
         list of values returned by ERRSNS.

     4.  The status of FOROTS will be left so that the operation which
         caused  the  error  may  be repeated, if possible, except for
         sequential input operations where only the last record may be
         re-input.   The values of the data items on an input list are
         undefined when the ERR= branch  is  taken.   See  8.0  for  a
         discussion of the unit's status after an I/O error.

     5.  This extension  is  compatible  with  the  proposed  ANSI  76
         FORTRAN  standard  in  the use of ERR= in both OPEN and CLOSE
         and on I/O statements.
FTN5.DOC - FORTRAN-10                                           Page 9


3.0  KNOWN BUGS AND DEFICIENCIES

Deeply nested expressions might get "stack overflow" in FORTB.

A formal parameter to a subroutine used as an ASSOCIATE VARIABLE in an
OPEN statement inside the subroutine generates incorrect code.

ASSOCIATE VARIABLEs are not always detectable by the compiler (eg,  if
the  OPEN  is  in another subroutine):  it may erroneously assume that
the ASSOCIATE VARIABLE may remain in a register around  a  random  I/O
that changes the value of that ASSOCIATE VARIABLE.



4.0  CHANGES IN INSTALLATION INSTRUCTIONS

There are no changes in the installation instructions.   This  version
of  the  compiler requires version 5A(206)-1 of the BLISS compiler and
version  50A  of  MACRO.   See  the  file  FTN10.FIG  for  information
regarding installation.



5.0  INTERNAL CHANGES

The following is a list of all the edits made to  version  4A(317)  in
producing version 5.


        begin Version 4B, 26-Aug-75

#320    SPR-16787          catch COMMON /X/A(5)B(5) as error

#321    SPR-17005          scan for induction variable  in  OPEN/CLOSE
                           when /OPT

#322    SPR-16688          check   for   disjoint    iolists    before
                           collapsing

#323    SPR-16729          change name of temps used to save  regs  in
                           function   pro/epi-logue   from  .xxxnn  to
                           .A00nn to avoid conflict.

#324    SPR-16750          clean up symbol  table  entries  after  bad
                           statement function.

#325    SPR-17044          check for overflow of stk  caused  by  long
                           argument lists, and remedy situation.

#326    SPR-17086          fix  register  targeting   for   assignment
                           statements  with  AND/OR nodes and function
                           calls.

#327    SPR-16688          prevent optimizer from  dying  on  programs
                           with potentially infinite loops
FTN5.DOC - FORTRAN-10                                          Page 10


#330    SPR-7150           ensure that the optimizer does not consider
                           ENTRY statements to be inaccessible

#331    SPR-17091          fix propagation  of  negation  for  special
                           operator:  raise to an odd constant integer
                           power cannot absorb a negate from below.

#332    SPR-17045          fix ASSIGN statements within DO loops 

#333    SPR-17045          fix up code  generated  for  assigned  GOTO
                           statements within DO loops.

#334    SPR-17420          correct format of DO statement (add LINEND)

#335    SPR-17377          fix FATLERR so that it does not destroy the
                           content of NAME for LEXICA.

#336    SPR-17259          check for iolist with NAMELIST directed I/O

#337    SPR-17305          round up immediate  real  constants  before
                           listing them

#340    SPR-16989          do not allow  call  to  MATCHER  to  change
                           value of PHI - optimizer bug

#341    SPR-17770          fix register allocation for  exponentiation
                           inside function

#342    SPR-17876          make long  unclassifiable  statements  work
                           properly - several minor patches

#343    SPR-17636          fix end of statement processing so that the
                           line number is correct.

#344    SPR-17768          fix propagation of FNCALL flag to a NEG/NOT
                           node.

#345    SPR-17554          fix common subs involving exponentiation to
                           even powers something with a NEG flag

#346    SPR-17928          pass out RETURN  information  to  outer  DO
                           loops

#347    SPR-17545          in global register allocation, prevent  bad
                           preloads caused by logical IFs.

#350    SPR-17545          common subs must  also  cause  preloads  of
                           registers on occasion - fix this.

#351    SPR-none           fix edit 342 properly

#352    SPR-18007          fix   edit   266   for   case   with    one
                           materialization

#353    SPR-18004          fix two CALLs generating bad code
FTN5.DOC - FORTRAN-10                                          Page 11


#354    SPR-18015          bad code involving reduction in strength

#355    SPR-18132          core management insufficient for large DATA
                           statement

#356    SPR-18105          make MAIN.  global symbol for main progs.

#357    SPR-18191          fix OPEN error reporting

#360    SPR-18243          fix RETURN stmnt at end of DO loop 

#361    SPR-18451          fix GOTO end of DO loop

#362    SPR-18245          fix up argument block types for logical and
                           octal and double octal constants

#363    SPR-18269          check  A1NOTFLG  before   remembering   reg
                           contents

#364    SPR-18251          correct EQUIVALENCE processing

#365    SPR-18857          take care of form feeds between routines

#366    SPR-18210          SAVLINE cannot  clobber  name:   X=.123EQ.A
                           and X=1.1HABC are illegal

#367    SPR-18239          WRITE(u) generates wrong code

#370    SPR-17938          remove  [244]:   real  fix  is  in   REDUCE
                           (TSTR);  fix code motion for .R variables

#371    SPR-18471          fix CSE for straight case in MATCHER

#372    SPR-18314          fix assign GOTO inside loops

#373    SPR-18242          correct  register  allocation   for   large
                           assignment statements

#374    SPR-none           fix mis-spelled macro name

#375    SPR-18450          use .O instead of .R for dp temporary

#376    SPR-18398          fix WRITE stmnt with DEBUG set

#377    SPR-18476          fix reg allocation for COS(X)*A(I)

#400    SPR-18704          fix logical IF before nested loops

#401    SPR-17813          fix A(I)=B(I)+B(I)+1.0

        begin Version 5, 7-May-76

#402    SPR-18917          restore FLGREG properly after INCLUDE

#403    SPR-18961          bad reg allocation for I=I/J
FTN5.DOC - FORTRAN-10                                          Page 12


#404    SPR-18869          make associate variable  list  correct  and
                           don't let them live in registers

#405    SPR-18967          fix A(P(I)) in iolist

#406    SPR-18978          fix CHAR(K(I,J)) in iolist

#407    version 5          add ERR= on OPEN/CLOSE

#410    QAR-00568          make DTABPTR global for BLDDIM

#411    SPR-19537          don't swap args for MAX or MIN if first arg
                           is negative

#412    version 5          node with arg1 = double array ref for  KA10
                           must  have  complexity  at  least  3;   use
                           subscript reg for double  array  ref  value
                           except on KA10

#413    SPR-none           don't use FADL in INTDP if not on KA10

#414    QAR-00625          fix .I offset sharing so only  shares  dim2
                           .I if dim1 same

#415    SPR-18964          don't destroy symbol table entry for formal
                           function  when  ENTRY statmnt seen with the
                           function as a param.

#416    QAR-00650          fix MOVCNST so hash entry ignored  on  next
                           pass if .R+X can't be moved as .O

#417    QAR-00637          fix bad statement function from  clobbering
                           things on cleanup in 324

#420    QAR-00637          after bad st fn, clean up the name so  that
                           it does not cause trouble later

#421    QAR-00651          don't propagate .O if came from .R

#422    SPR-18493          imbedded nulls cause low level looping

#423    QAR-00709          fix patch 414:  DIMNUM is 1-relative

#424    QAR-00690          error if DIRECTORY= not  literal  or  array
                           name in OPENCLOSE

#425    QAR-00714          call ZTREE to clear DEFPTS if optimizations
                           discontinued in OPTERR

#426    SPR-18816          set FNCALLSFLG for implicit  fn  calls,  so
                           0,1, and 16 are known to be clobbered

#427    SPR-18871          fix comsubs in iolists

#430    SPR-18876          make arith if nodes absorb negs right.
FTN5.DOC - FORTRAN-10                                          Page 13


#431    SPR-19121          materialize   varibles   that   have   been
                           allocated    to    registers    during    a
                           doubly-nested DO loop correctly.

#432    SPR-19037          fix conversion of logical array ref

#433    SPR-19130          make DO n I=10,1 execute once

#434    SPR-19211          check function call containing DO index  as
                           a parameter after constant folding.

#435    SPR-18964          fix io lists with variable increment

#436    SPR-19427          catch EQUIVALENCE violation  when  building
                           equivalence classes.

#437    QAR-00771          don't let DOTOHASGN move .O =  expr  if  .O
                           came   from   .R;   mark  subsuming  .O  if
                           subsumee .O came from .R in dotofix

#440    QAR-00771          don't NEXTUP .O if came from .R in MOVCNST

#441    SPR-19231          fix  register   allocation   for   a   d.p.
                           arrayref as a fn call paramter.

#442    SPR-19233          make the deletion of hash element  work  if
                           element is first in its list

#443    QAR-00656          warning + opt stopped if  discover  illegal
                           DO   nesting   in  LNKEXTND;   add  warning
                           message E140

#444    SPR-19484          fix  to  246  -  don't  force  preload   of
                           compiler variables if GOTO encountered.

#445    SPR-19632          use fewer locals on stack during  recursive
                           calls to P2SKARITH

#446    SPR-20652          bad code for I=I*3 and I=I**7 (QAR753)

#447    SPR-19547          negatives propagated too much in FORTG

#450    QAR-00784          don't NEXTUP arrayref if inside iolist

#451    SPR-19610          correct spelling in error message

#452    SPR-19610          NUL:  causes problems as output dev

#453    SPR-19695          don't make DO be DEFPT of all vars modified
                           inside the loop.

#454    SPR-19699          don't place preloads 1 statement  too  late
                           when placing after a DO loop.

#455    QAR-00784          can't move expressions out of implied DO if
FTN5.DOC - FORTRAN-10                                          Page 14


                           inside logical IF

#456    QAR-00784          fix FINDTHESPOT so caller tells it where to
                           stop;   add  new routine FINDPA for GLOBMOV
                           and DOTOHASGN;  call FINDTHESPOT  with  2nd
                           param   in  GLOBMOV  and  DOTOHASGN;   give
                           GLOBMOV entire hash  entry  in  CMNMAK  for
                           FINDPA;   call FINDTHESPOT with 2nd param =
                           TOP in HAULASS;  call FINDTHESPOT with  2nd
                           param = TOP in REDUCE

#457    SPR-19805          try harder not to request a reg  in  REGAL2
                           unless  we  really  need it - might run out
                           early.

#460    SPR-19477          change  DIMENSION  processing  to  be  more
                           thorough and less apt to exit early

#461    SPR-19477          detect when program is too large;  add E142

#462    SPR-19960          fix MRP1 to leave SREG<LEFT> with the  same
                           value it found in it

#463    SPR-19989          fix implied DOs whose initial value or step
                           size come from an outer AOBJN DO.

#464    QAR-00754          add line-number/octal-location map if macro
                           listing  not  requested;  add 3 globals for
                           line-handling

#465    SPR-20657          clear  INDVAR  before  calling  REDUCE  for
                           statements  before  the  DO loop;  we might
                           find some reductions otherwise.

#466    version 5          delete code to zero DEFPTS  between  LENTRY
                           and TOP (remove 465 and more)

#467    version 5          take out FORSWI.REQ;   require  FTTENX.REQ;
                           require FT1SEG.REQ

#470    SPR-20744          make sure the high seg starts  at  least  a
                           page above the end of the low seg.

#471    SPR-20309          lhs a logical equivalenced var may generate
                           bad code

#472    SPR-20494          incorrect EQUIVALENCE processing when  last
                           element of group in COMMON

#473    SPR-20478          scalars and arrays listing too wide

#474    SPR-20479          output CRLF after last COMMON block name

#475    SPR-20813          don't collapse ELISTs that we shouldn't
FTN5.DOC - FORTRAN-10                                          Page 15


#476    QAR-00754          make MAPFLG from STATFLG in  FLGREG;   make
                           /MAP   a   switch   to   SCAN;   make  line
                           number/octal location  map  optional  under
                           /MAP switch

#477    QAR-00831          make message NAMLEXs more readable

#500    SPR-20818          don't see if a node  is  an  I/O  statement
                           unless it's a statement.

#501    SPR-21113          don't reduce .Os in outer DO loops.

#502    SPR-20463          sort saved vs non-saved regs  correctly  in
                           FLIPCODES;  fake ITMCT also;  remove XLISTs
                           for FTTENEX

#503    SPR-19976          for A(I) = func.  call, don't  leave  I  in
                           reg 1 when calculating lh first.

#504    QAR-00815          fix  edit  412  to  not  allow  fetches  of
                           complex  numbers  into  an AC which is also
                           the index reg.   Negated  fetches  use  two
                           instructions (even on KIs), and NEGFLGs can
                           sneak in much later.

#505    QAR-00815          in DOTORFIX don't  move  .R  init  if  it's
                           already in the correct place

#506    SPR-10056          linesequenced   files   kill   low    level
                           buffering

#507    SPR-none           fix edit 440 to allow NEXTUP  of  .O  which
                           came   from   .R   in  MOVCNST  if  mom  is
                           arithmetic

#510    SPR-none           don't test ALCRETREGFLG in DATAOPR nodes

#511    SPR-none           fix E37,E79,E100 to agree with ERROVD;  fix
                           and  move E140 from [443];  fix spelling in
                           E74;  fix E140

#512    SPR-none           make /MAP from [476]  called  /LNMAP  since
                           /MAP/LMAP are LOAD COMPIL switches

#513    QAR-00771          in MOVCNST when  .O  is  created,  pass  up
                           ORFIXFLG   from   any  .O  being  subsumed;
                           change [507] to free varaible T in MOVCNST

#514    QAR-00806          in MOVCNST if NARY insure  .R  is  1st  arg
                           since [V5] code assumes .R+X

#515    QAR-00815          remove "TEMP [EXPRUSE] _ 1" in DOTORFIX
FTN5.DOC - FORTRAN-10                                          Page 16


6.0  OPEN AND CLOSE SYNTAX

The syntax for the OPEN and CLOSE statements may include  an  optional
error specifier of the form:

     ERR = s

where s is the  statement  label  of  an  executable  statement  (that
appears  in  the  same  program  unit as the error specifier) to which
control is transferred when an error is detected during the processing
of the OPEN or CLOSE statement.



7.0  ERRSNS VALUES

This section lists the integer values  returnable  by  the  subroutine
ERRSNS.  ERRSNS takes one or two integer variable arguments and places
values in them that describe the status  of  the  last  I/O  operation
performed  by  FOROTS.   The  following  values can be returned in the
first (standardized) argument.  Along with each value  is  listed  the
error  category  for this standardized indicator.  Under each category
are listed the specific processor-dependent errors which reside in the
category.   Numbers  in  brackets (ie.  [ and ]) refer to footnotes at
the end of the section.


value          explanation

arg1   arg2


  0            no error detected
         0     satisfactory completion, ie, no error detected
       101     normal end of job [1]

  1            invalid error call
       243     unidentified entry in FORERR [3]
       246     unidentified entry in FORERR [3]
       300     unidentified entry in FORERR

 23            backspace error
       312     BACKSPACE illegal for device [9]

 24            end-of-file during read
       308     attempt to READ beyond valid input [8]

 25            invalid record number
       302     LSCW illegal in binary record or reading ASCII
               attempt to read unwritten ASCII RANDOM ACCESS record
                 or unwritten or destroyed record number

 26            direct access not specified
       311     cannot RANDOM ACCESS a SEQUENTIAL file
FTN5.DOC - FORTRAN-10                                          Page 17


 28            CLOSE error
       252     DTA directory is full
               protection error
       254     RENAME file name already exists
       262     no room or quota exceeded
       268     cannot DELETE or RENAME a non-empty directory

 29            no such file
       250     file was not found

 30            OPEN failure
       237     DUMP mode RANDOM or APPEND access not implemented
                 try IMAGE mode
       238     DIALOG file cannot be opened [3]
       240     record length missing for RANDOM access
       242     too many devices open: fifteen maximum
       245     device not available
       248     illegal ACCESS for device
       249     illegal MODE or MODE switch
       251     no directory for project,programmer number
       253     file was being modified
       255     Illegal Sequence of Monitor Calls [11]
       256     bad UFD or bad RIB
       259     device not available
       265     partial allocation only
       266     block not free on allocation
       267     cannot supersede an existing directory
       269     SFD not found
       270     search list empty
       271     SFD nested too deeply
       272     "no create" flag on for specified UFD
       274     file cannot be updated
       277     LOOKUP ENTER or RENAME error

 31            mixed access modes
       315     cannot do SEQUENTIAL ACCESS on a RANDOM file

 32            invalid logical unit number
       239     illegal FORTRAN unit number

 39            error during read
       310     REREAD before first READ is illegal [1]

 42            device handler not resident
       244     no such device
       260     no such device

 45            OPEN statement keyword error
       241     switch error during DIALOG or OPEN statement scan

 47            WRITE on READonly file
       263     write lock error

 59            list-directed I/O syntax error
       313     illegal delimiter in LIST DIRECTED input
FTN5.DOC - FORTRAN-10                                          Page 18


 62            syntax error in FORMAT
       301     illegal character in FORMAT statement [4]
       306     input/output list without data conversion in FORMAT
       314     missing width field for A or R on input

 63            output conversion error
       305     optional * fill: unidentified entry in FORERR [7]

 64            input conversion error
       303     checksum error reading binary records [5]
       307     illegal character in data

 67            record too small for I/O list
       304     input/output list greater than record size [6]

 81            invalid argument
       102     argument block not in correct format
       261     argument block not in correct format

699            unclassifiable error on open
       247     FOROTS system error [3]
       257     FOROTS system error
       258     FOROTS system error
       264     not enough monitor table space
       273     FOROTS system error
       275     FOROTS system error
       276     FOROTS system error

799            unclassifiable data error
       309     variable cannot be found in NAMELIST block

899            unclassifiable device error
       400     write protected
       401     device error
       402     parity error
       403     block too large, quota exceeded or file structure full
       403     nonexistent CDR reader
               Spooled CDR file does not exist
       404     end of file [10]
       407     end of tape

999            unclassifiable system error
       100     FOROTS system error
       103     monitor not built to support FOROTS
       104     fatal error
       105     user program has requested more core than is available
       106     runtime memory management error
FTN5.DOC - FORTRAN-10                                          Page 19


The  second  (optional)  integer   variable   argument   is   a   more
processor-dependent  indicator  of the error.  The value is an integer
of the form

     etnn

where

      e = 0     means  I/O  reset  was  successful  so  that  the  I/O
                statement causing the error is repeatable

      e = 1     means I/O reset was unsuccessful so that  any  further
                I/O on the unit in error is undefined

      e = 2     means another I/O error occurred during I/O  reset  so
                that any further I/O on the unit in error is undefined

      t = 0     means satisfactory completion, ie, no error detected

      t = 1     means a system error occurred

      t = 2     means an open error occurred

      t = 3     means a data error occurred

      t = 4     means a device error occurred


      nn = 0    means satisfactory completion, ie, no  error  detected
                (and e = t = 0)

      nn > 0    specifies a particular error


Below are  listed  the  specific  values  for  the  second  (optional)
argument  returned  by  ERRSNS.   The  integer  in  the  second column
(labeled arg1) is the Fortran-standardized error value returned in the
first  argument to ERRSNS.  Numbers in brackets (ie, [ and ]) refer to
footnotes at the end of the section.

value          explanation

arg2   arg1


  0      0     satisfactory completion, ie, no error detected

system errors

100    999     FOROTS system error
101      0     normal end of file  [1]
102     81     argument block not in correct format
103    999     monitor not built to support FOROTS
104    999     fatal error
105    999     user program has requested more core than is available
FTN5.DOC - FORTRAN-10                                          Page 20


106    999     runtime memory management error


open errors  [2]

237     30     DUMP mode RANDOM or APPEND access not implemented
                 try IMAGE mode
238     30     DIALOG file cannot be opened  [3]
239     32     illegal FORTRAN unit number
240     30     record length missing for RANDOM access
241     45     switch error during DIALOG or OPEN statement scan
242     30     too many devices open: fifteen maximum
243      1     unidentified entry in FORERR  [3]
244     42     no such device
245     30     device not available
246      1     unidentified entry in FORERR  [3]
247    699     FOROTS system error  [3]
248     30     illegal ACCESS for device
249     30     illegal MODE or MODE switch
250     29     file was not found
251     30     no directory for project,programmer number
252     28     DTA directory is full
               protection error
253     30     file was being modified
254     28     RENAME file name already exists
255     30     Illegal Sequence of Monitor Calls [11]
256     30     bad UFD or bad RIB
257    699     FOROTS system error
258    699     FOROTS system error
259     30     device not available
260     42     no such device
261     81     argument block not in correct format
262     28     no room or quota exceeded
263     47     write lock error
264    699     not enough monitor table space
265     30     partial allocation only
266     30     block not free on allocation
267     30     cannot supersede an existing directory
268     28     cannot DELETE or RENAME a non-empty directory
269     30     SFD not found
270     30     search list empty
271     30     SFD nested too deeply
272     30     "no create" flag on for specified UFD
273    699     FOROTS system error
274     30     file cannot be updated
275    699     FOROTS system error
276    699     FOROTS system error
277     30     LOOKUP ENTER or RENAME error


data errors

300      1     unidentified entry in FORERR
301     62     illegal character in FORMAT statement  [4]
302     25     LSCW illegal in binary record or reading ASCII
FTN5.DOC - FORTRAN-10                                          Page 21


               attempt to read unwritten ASCII RANDOM ACCESS record
                 or unwritten or destroyed record number
303     64     checksum error reading binary records  [5]
304     67     input/output list greater than record size  [6]
305     63     optional * fill: unidentified entry in FORERR  [7]
306     62     input/output list without data conversion in FORMAT
307     64     illegal character in data
308     24     attempt to READ beyond valid input  [8]
309    799     variable cannot be found in NAMELIST block
310     39     REREAD before first READ is illegal  [1]
311     26     cannot RANDOM ACCESS a SEQUENTIAL file
312     23     BACKSPACE illegal for device  [9]
313     59     illegal delimiter in LIST DIRECTED input
314     62     missing width field for A or R on input
315     31     cannot do SEQUENTIAL ACCESS on a RANDOM file


device errors

400    899     write protected
401    899     device error
402    899     parity error
403    899     block too large, quota exceeded or file structure full
               nonexistent CDR reader
               Spooled CDR file does not exist
404    899     end of file  [10]
407    899     end of tape



footnotes

[1]    error not currently trappable
[2]    OPEN errors 251 through 276 map  directly  onto  error  numbers
       returned  by  the  OPEN  UUO:   see Appendix E "Error Codes" in
       Sotfware Notebook 4 "DEC-10 Monitor Calls" DEC-10-OMCMA-B-DN3
[3]    error cannot currently occur
[4]    in runtime FORMAT
[5]    checksumming controlled by compile-time variable CHKSUM
[6]    occurs when a type 2 LSCW is found in a FORSE binary record
[7]    * fill controlled by compile-time variable ASTFL
[8]    occurs when simulating mag tape output:  SKIP RECORD  and  SKIP
       FILE  are  illegal.   Also  occurs  when a non-existent file is
       opened MODE='SEQINOUT' and the first operation on that file  is
       a READ.
[9]    can occur if OPEN output on BACKSPACE is not on a mag  tape  or
       disk
[10]   trappable if there is no END= clause
[11]   can occur on OPEN (...MODE='APPEND'...) when file is  found  in
       LIB:   or on [1,4] when device specified was SYS:  and /NEW was
       in your search list
FTN5.DOC - FORTRAN-10                                          Page 22


8.0  OPERATIONS AFTER AN I/O ERROR

The following comments deal with I/O operations to a unit on which  an
error has occurred.

     1.  OPEN RANDOM on a non-existent file creates an empty file when
         the error is trapped.

     2.  OPEN SEQOUT with an invalid MODE to a spooled  device  spools
         an empty file when the error is trapped.

     3.  one way for data error recovery to fail is if  the  BACKSPACE
         routine finds an illegal LSCW.

     4.  on end of file (device error 404):

         a.  END= takes precedence over ERR=

         b.  ERR= will trap an end of file if no END= is present

         c.  ERRSNS will return the pair 899, 404 for either  END=  or
             ERR=



9.0  SUGGESTIONS

None.



[End of FTN5.DOC]