Annotation of 43BSDTahoe/new/help/src/f77/io_details, revision 1.1.1.1

1.1       root        1: .      \" this is the same as /usr/doc/f77/f77IO.ms, 4.3 version
                      2: .      \" I/O errors split into "help f77 io_err_msgs"
                      3: .      \" LOTS of other formatting changes to get this to work.
                      4: .de UX
                      5: UNIX
                      6: ..
                      7: .      \" .I and .B - put in quotes instead of bold and italic
                      8: .de B
                      9: \&\'\\$1\'\\$2
                     10: ..
                     11: .de I
                     12: \&\'\\$1\'
                     13: ..
                     14: .      \" Sm - in original, made it smaller
                     15: .de Sm
                     16: \\$1
                     17: ..
                     18: .de Nh
                     19: .NH \\$1
                     20: \\$2
                     21: .PP
                     22: ..
                     23: .      \" NH - numbered header - borrowed from -ms
                     24: .de NH
                     25: .SH
                     26: .nr NS \\$1
                     27: .if !\\n(.$ .nr NS 1
                     28: .if !\\n(NS .nr NS 1
                     29: .nr H\\n(NS +1
                     30: .if !\\n(NS-4 .nr H5 0
                     31: .if !\\n(NS-3 .nr H4 0
                     32: .if !\\n(NS-2 .nr H3 0
                     33: .if !\\n(NS-1 .nr H2 0
                     34: .if !\\$1 .if \\n(.$ .nr H1 1
                     35: .ds SN \\n(H1.
                     36: .if \\n(NS-1 .as SN \\n(H2.
                     37: .if \\n(NS-2 .as SN \\n(H3.
                     38: .if \\n(NS-3 .as SN \\n(H4.
                     39: .if \\n(NS-4 .as SN \\n(H5.
                     40: \\*(SN
                     41: ..
                     42: .de Fo
                     43: Fortran\\$1
                     44: ..
                     45: .TI F77/IO_DETAILS "June 15, 1985"
                     46: Introduction to the f77 I/O Library
                     47: .na
                     48: .ce
                     49: David L. Wasley
                     50: .PP
                     51: The f77 I/O library, libI77.a,
                     52: includes routines to perform all of the standard types of
                     53: .Fo
                     54: input and output.
                     55: Several enhancements and extensions to
                     56: .Fo
                     57: I/O have been added.
                     58: The f77 library routines use the C stdio library routines to provide
                     59: efficient buffering for file I/O.
                     60: .sp 1
                     61: .Nh 1 "Fortran I/O"
                     62: The requirements of the
                     63: .Sm ANSI
                     64: standard impose significant overhead
                     65: on programs that do large amounts of I/O. Formatted I/O can be
                     66: very ``expensive'' while direct access binary I/O is usually very efficient.
                     67: Because of the complexity of
                     68: .Fo
                     69: I/O,
                     70: some general concepts deserve clarification.
                     71: .Nh 2 "Types of I/O"
                     72: There are three forms of I/O:
                     73: .B formatted ,
                     74: .B unformatted ,
                     75: and
                     76: .B list-directed .
                     77: The last is
                     78: related to formatted but does not obey all the rules for formatted I/O.
                     79: There are two modes of access to
                     80: .B external
                     81: and
                     82: .B internal
                     83: files:
                     84: .B direct
                     85: and
                     86: .B sequential .
                     87: The definition of a logical record depends upon the
                     88: combination of I/O form and mode specified by the
                     89: .Fo
                     90: I/O statement.
                     91: .Nh 3 "Direct access"
                     92: A logical record in a
                     93: .B direct
                     94: access
                     95: .B external
                     96: file is a string of bytes
                     97: of a length specified when the file is opened.
                     98: Read and write statements must not specify logical records longer than
                     99: the original record size definition. Shorter logical records are allowed.
                    100: .B Unformatted
                    101: direct writes leave the unfilled part of the record undefined.
                    102: .B Formatted
                    103: direct writes cause the unfilled record to be padded with blanks.
                    104: .Nh 3 "Sequential access"
                    105: Logical records in
                    106: .B sequentially
                    107: accessed
                    108: .B external
                    109: files may be of arbitrary
                    110: and variable length.
                    111: Logical record length for
                    112: .B unformatted
                    113: sequential files is determined by
                    114: the size of items in the iolist.
                    115: The requirements of this form of I/O cause the external physical
                    116: record size to be somewhat larger than the logical record size.
                    117: For
                    118: .B formatted
                    119: write statements, logical record length is determined by
                    120: the format statement interacting with the iolist at execution time.
                    121: The ``newline'' character is the logical record delimiter.
                    122: Formatted sequential access causes one or more logical records
                    123: ending with ``newline'' characters to be read or written.
                    124: .Nh 3 "List directed I/O"
                    125: Logical record length for
                    126: .B list-directed
                    127: I/O is relatively meaningless.
                    128: On output, the record length is dependent on the magnitude of the
                    129: data items.
                    130: On input, the record length is determined by the data types and the file
                    131: contents.
                    132: By ANSI definition, a slash, ``/'', terminates execution of a
                    133: list-directed input operation.
                    134: .Nh 3 "Internal I/O"
                    135: The logical record length for an
                    136: .B internal
                    137: read or write is the length of the
                    138: character variable or array element. Thus a simple character variable
                    139: is a single logical record. A character variable array is similar to
                    140: a fixed length direct access file, and obeys the same rules.
                    141: .B Unformatted
                    142: I/O is not allowed on "internal" files.
                    143: .Nh 2 "I/O execution"
                    144: Note that each execution of a
                    145: .Fo
                    146: .B unformatted
                    147: I/O statement causes a single
                    148: logical record to be read or written. Each execution of a
                    149: .Fo
                    150: .B formatted
                    151: I/O statement causes one or more logical records to be read or written.
                    152: .PP
                    153: A slash, ``/'', will terminate assignment of
                    154: values to the input list during
                    155: .B list-directed
                    156: input and the remainder of the current input line is skipped.
                    157: The standard is rather vague on this point but seems to require that
                    158: a new external logical record be found at the start of any formatted
                    159: input. Therefore data following the slash is ignored and may be used
                    160: to comment the data file.
                    161: .PP
                    162: .B "Direct access list-directed"
                    163: I/O is not allowed.
                    164: .B "Unformatted internal"
                    165: I/O is not allowed.
                    166: Both the above will be caught by the compiler.
                    167: All other flavors of I/O are allowed, although some are not part of the
                    168: .Sm ANSI
                    169: standard.
                    170: .PP
                    171: Any I/O statement may include an
                    172: .B err=
                    173: clause to specify an alternative branch to be taken on errors
                    174: and/or an
                    175: .B iostat=
                    176: clause to return the specific error code.
                    177: Any error detected during I/O processing will cause the program to abort
                    178: unless either
                    179: .B err=
                    180: or
                    181: .B iostat=
                    182: has been specificed in the program.
                    183: Read statements may include
                    184: .B end=
                    185: to branch on end-of-file.
                    186: The end-of-file indication for that logical unit may be reset with a
                    187: .B backspace
                    188: statement.
                    189: File position and the value of I/O list items is undefined following an error.
                    190: .sp 1
                    191: .Nh 1 "Implementation details"
                    192: Some details of the current implementation may be useful in understanding
                    193: constraints on
                    194: .Fo
                    195: I/O.
                    196: .Nh 2 "Number of logical units"
                    197: Unit numbers must be in the range 0 \- 99.
                    198: The maximum number of logical units that a program may have open at one
                    199: time is the same as the
                    200: .UX
                    201: system limit, currently 48.
                    202: .Nh 2 "Standard logical units"
                    203: By default, logical units 0, 5, and 6
                    204: are opened to ``stderr'', ``stdin'', and ``stdout'' respectively.
                    205: However they can be re-defined with an 
                    206: .B open
                    207: statement.
                    208: To preserve error reporting, it is an error to close logical unit 0
                    209: although it may be reopened to another file.
                    210: .PP
                    211: If you want to open the default file name for any preconnected logical unit,
                    212: remember to 
                    213: .B close
                    214: the unit first.
                    215: Redefining the standard units may impair normal console I/O.
                    216: An alternative is to
                    217: use shell re-direction to externally re-define the above units.
                    218: To re-define default blank control or format of the standard input or output
                    219: files, use the 
                    220: .B open
                    221: statement specifying the unit number and no
                    222: file name (see section 2.4).
                    223: .PP
                    224: The standard units, 0, 5, and 6, are named internally ``stderr'', ``stdin'',
                    225: and ``stdout'' respectively.
                    226: These are not actual file names and can not be used for opening these units.
                    227: .B Inquire
                    228: will not return these names and will indicate
                    229: that the above units are not named unless they have been opened to real files.
                    230: The names are meant to make error reporting more meaningful.
                    231: .Nh 2 "Vertical format control"
                    232: Simple vertical format control is implemented. The logical unit must be opened
                    233: for sequential access with "form = 'print'"
                    234: (see section 3.2).
                    235: Control codes ``0'' and ``1'' are replaced in the output file
                    236: with ``\\n'' and ``\\f'' respectively.
                    237: The control character ``+'' is not implemented and, like
                    238: any other character in the first position of a record
                    239: written to a ``print'' file, is dropped.
                    240: .PP
                    241: An alternative is to use
                    242: the filter 'fpr'(1) for vertical format control.
                    243: It replaces ``0'' and ``1'' by
                    244: ``\\n'' and ``\\f'' respectively, and implements the ``+'' control code.
                    245: Unlike "form = 'print'"
                    246: which drops unrecognized form control characters, 'fpr' copies those
                    247: characters to the output file.
                    248: .PP
                    249: No vertical format control is recognized for
                    250: .B "direct formatted"
                    251: output or
                    252: .B "list directed"
                    253: output.
                    254: .Nh 2 "File names and the open statement"
                    255: A file name may be specified in an
                    256: .B open
                    257: statement for the
                    258: logical unit.
                    259: If a logical unit is opened by an
                    260: .B open
                    261: statement which does
                    262: not specify a file name, or it is opened implicitly by the execution
                    263: of a
                    264: .B read ,
                    265: .B write ,
                    266: .B backspace
                    267: or
                    268: .B rewind
                    269: statement, then the default file name is ``fort.N'' where N is
                    270: the logical unit number.
                    271: Before opening the file, the library checks for an environment
                    272: variable with a name identical to the tail of the
                    273: file name with periods removed.
                    274: If it finds such an environment variable, it uses its value
                    275: as the actual name of the file.
                    276: For example, a program containing:
                    277: .nf
                    278: 
                    279:      open(32,file="/usr/guest/census/data.d")
                    280:      read(32,100) vec
                    281:      write(44) vec
                    282: 
                    283: .fi
                    284: normally will read from '/usr/guest/census/data.d' and write to
                    285: .B fort.44
                    286: in the current directory.
                    287: If the environment variables 'datad' and 'fort44' are set,
                    288: e.g.:
                    289: .nf
                    290: 
                    291:    % setenv datad mydata
                    292:    % setenv fort44 myout
                    293: 
                    294: .fi
                    295: in the C shell or:
                    296: .nf
                    297: 
                    298:    $ datad=mydata
                    299:    $ fort44=myout
                    300:    $ export datad fort44
                    301: 
                    302: .fi
                    303: in the Bourne shell, then the program will read from 'mydata' and
                    304: write to 'myout'.
                    305: .PP
                    306: An
                    307: .B open
                    308: statement need not specify a file name. If it refers to a logical
                    309: unit that is already open, the 
                    310: .B blank=
                    311: and 
                    312: .B form=
                    313: specifiers may be
                    314: redefined without affecting the current file position.
                    315: Otherwise, if 'status = "scratch"'
                    316: is specified, a temporary file with a
                    317: name of the form ``tmp.FXXXXXX'' will be opened,
                    318: and, by default, will be deleted when closed or during
                    319: termination of program execution.
                    320: .PP
                    321: It is an error to try to open an existing file with 'status = "new"'.
                    322: It is an error to try to open a nonexistent file with 'status = "old"'.
                    323: By default, 'status = "unknown"'
                    324: will be assumed, and a file will be created if necessary.
                    325: .PP
                    326: By default, files are positioned
                    327: at their beginning upon opening, but see 'fseek'(3f)
                    328: and 'ioinit'(3f) for alternatives.
                    329: Existing files are never truncated on opening.
                    330: Sequentially accessed external files are truncated to the current file
                    331: position on
                    332: .B close ,
                    333: .B backspace
                    334: , or
                    335: .B rewind
                    336: only if the last
                    337: access to the file was a write.
                    338: An
                    339: .B endfile
                    340: always causes such files to be truncated to the current
                    341: file position.
                    342: .Nh 2 "Format interpretation"
                    343: Formats which are in format statements are parsed by the compiler;
                    344: formats in
                    345: .B read ,
                    346: .B write
                    347: , and
                    348: .B print
                    349: statements
                    350: are parsed during execution by the
                    351: .Sm I/O
                    352: library.
                    353: Upper as well as lower case characters are recognized in format statements
                    354: and all the alphabetic arguments to the I/O library routines.
                    355: .PP
                    356: If the external representation of a datum
                    357: is too large for the field width specified, the specified
                    358: field is filled with asterisks (\(**).
                    359: On
                    360: .B Ew.dEe
                    361: output,
                    362: the exponent field will be filled with asterisks if the
                    363: exponent representation is too large.
                    364: This will only happen if ``e'' is zero.
                    365: .PP
                    366: On output, a real value that is truly zero will display as ``0.'' to
                    367: distinguish it from a very small non-zero value.
                    368: If this causes problems for other input systems, the
                    369: .B BZ
                    370: edit descriptor may be used to cause the field
                    371: following the decimal point to be filled with zero's.
                    372: .PP
                    373: Non-destructive tabbing is implemented for both internal and external
                    374: formatted I/O.
                    375: Tabbing left or right on output
                    376: does not affect previously written portions of a record.
                    377: Tabbing right on output
                    378: causes unwritten portions of a record to be filled with blanks.
                    379: Tabbing right off the end of an input logical record is an error.
                    380: Tabbing left beyond the beginning of an input logical record leaves
                    381: the input pointer at the beginning of the record.
                    382: The format specifier
                    383: .B T
                    384: must be followed by a positive non-zero number.
                    385: If it is not, it will have a different meaning (see section 3.1).
                    386: .PP
                    387: Tabbing left requires seek ability on the logical unit.
                    388: Therefore it is not allowed in I/O to a terminal or pipe.
                    389: Likewise, nondestructive tabbing in either direction is possible
                    390: only on a unit that can seek. Otherwise tabbing right or spacing with
                    391: .B X
                    392: will write blanks on the output.
                    393: .Nh 2 "List directed output"
                    394: In formatting list directed output, the I/O system tries to prevent
                    395: output lines longer than 80 characters.
                    396: Each external datum will be separated by two spaces.
                    397: List-directed output of
                    398: .B complex
                    399: values includes an appropriate comma.
                    400: List-directed output distinguishes between
                    401: .B real
                    402: and
                    403: .B "double precision"
                    404: values and formats them differently.
                    405: Output of a character string that includes ``\\n''
                    406: is interpreted reasonably by the output system.
                    407: .Nh 2 "I/O errors"
                    408: If I/O errors are not trapped by the user's program an appropriate
                    409: error message will be written to ``stderr'' before aborting.
                    410: An error number will be printed in ``[ ]'' along with a brief error message
                    411: showing the logical unit and I/O state.
                    412: Error numbers < 100 refer to
                    413: .UX
                    414: errors, and are described in the
                    415: introduction to chapter 2 of the
                    416: .UX
                    417: Programmer's Manual.
                    418: Error numbers \(>= 100 come from the I/O library, and are described
                    419: on-line in "help f77 io_err_msgs".
                    420: For internal I/O, part of the string will be printed with ``|'' at the
                    421: current position in the string.
                    422: For external I/O, part of the current record will be displayed if
                    423: the error was caused during reading from a file that can backspace.
                    424: .sp 1
                    425: .Nh 1 "Non-``ANSI Standard'' extensions"
                    426: Several extensions have been added to the I/O system to provide
                    427: for functions omitted or poorly defined in the standard.
                    428: Programmers should be aware that these are non-portable.
                    429: .Nh 2 "Format specifiers"
                    430: .B B
                    431: is an acceptable edit control specifier. It causes return to the
                    432: default mode of blank interpretation.
                    433: This is consistent with
                    434: .B S
                    435: which returns to default sign control.
                    436: .PP
                    437: .B P
                    438: by itself is equivalent to
                    439: .B 0P .
                    440: It resets the scale factor to the
                    441: default value, 0.
                    442: .PP
                    443: The form of the
                    444: .B Ew.dEe
                    445: format specifier has been extended to
                    446: .B D
                    447: also.
                    448: The form
                    449: .B Ew.d.e
                    450: is allowed but is not standard.
                    451: The ``e'' field specifies the minimum number of digits or spaces in the
                    452: exponent field on output.
                    453: If the value of the exponent is too large, the exponent notation
                    454: .B e
                    455: or
                    456: .B d
                    457: will be dropped from the output to allow one
                    458: more character position.
                    459: If this is still not adequate, the ``e'' field will be filled with
                    460: asterisks (\(**).
                    461: The default value for ``e'' is 2.
                    462: .PP
                    463: An additional form of tab control specification has been added.
                    464: The
                    465: .Sm ANSI
                    466: standard forms 'TRn', 'TLn', and 'Tn' are supported
                    467: where 'n'
                    468: is a positive non-zero number.
                    469: If 'T' or 'nT' is specified, tabbing will
                    470: be to the next (or n-th) 8-column tab stop.
                    471: Thus columns of alphanumerics can be lined up without counting.
                    472: .PP
                    473: A format control specifier has been added to suppress the newline
                    474: at the end of the last record of a formatted sequential write. The
                    475: specifier is a dollar sign ($). It is constrained by the same rules
                    476: as the colon (:). It is used typically for console prompts.
                    477: For example:
                    478: .nf
                    479: 
                    480:       write (\(**, "(\(fmenter value for x: \(fm,$)")
                    481:       read (\(**,\(**) x
                    482: .fi
                    483: .PP
                    484: Radices other than 10 can be specified for formatted integer I/O
                    485: conversion. The specifier is patterned after
                    486: .B P ,
                    487: the scale factor for
                    488: floating point conversion. It remains in effect until another radix is
                    489: specified or format interpretation is complete. The specifier is defined
                    490: as '[n]R' where 2 \(<= n \(<= 36. If
                    491: .I n
                    492: is omitted,
                    493: the default decimal radix is restored.
                    494: .PP
                    495: The format specifier 'Om.n' may be used for an octal conversion;
                    496: it is equivalent to '8R,Im.n,10R'.
                    497: Similarly, 'Zm.n' is equivalent to '16R,Im.n,10R' and
                    498: may be used for an hexadecimal conversion;
                    499: .PP
                    500: In conjunction with the above, a sign control specifier has been added
                    501: to cause integer values to be interpreted as unsigned during output
                    502: conversion. The specifier is
                    503: .B SU
                    504: and remains in effect until another
                    505: sign control specifier is encountered, or format interpretation is
                    506: complete.
                    507: Radix and ``unsigned'' specifiers could be used to format
                    508: a hexadecimal dump, as follows:
                    509: 
                    510: .nf
                    511: 2000  format ( SU, 8Z10.8 )
                    512: .fi
                    513: 
                    514: (Note: Unsigned integer values greater than (2\(**\(**31 - 1),
                    515: can be read and written using \fBSU\fP.
                    516: However they can not be used in
                    517: computations because
                    518: .Fo
                    519: uses signed arithmetic and such values appear to the arithmetic unit
                    520: as negative numbers.)
                    521: .Nh 2 "Print files"
                    522: The
                    523: .Sm ANSI
                    524: standard is ambiguous regarding the definition of a ``print'' file.
                    525: Since
                    526: .UX
                    527: has no default ``print'' file, an additional
                    528: .B form=
                    529: specifier
                    530: is now recognized in the
                    531: .B open
                    532: statement.
                    533: Specifying
                    534: .B "form = \(fmprint\(fm"
                    535: implies
                    536: .B formatted
                    537: and enables vertical format
                    538: control for that logical unit (see section 2.3).
                    539: Vertical format control is interpreted only on sequential formatted writes
                    540: to a ``print'' file.
                    541: .PP
                    542: The
                    543: .B inquire
                    544: statement will return
                    545: .B print
                    546: in the
                    547: .B form=
                    548: string variable
                    549: for logical units opened as ``print'' files.
                    550: It will return -1 for the unit number of an unconnected file.
                    551: .PP
                    552: If a logical unit is already open, an
                    553: .B open
                    554: statement including the
                    555: .B form=
                    556: option or the
                    557: .B blank=
                    558: option will do nothing but re-define those options.
                    559: This instance of the
                    560: .B open
                    561: statement need not include the file name, and
                    562: must not include a file name if
                    563: .B unit=
                    564: refers to a standard input or output.
                    565: Therefore, to re-define the standard output as a ``print'' file, use:
                    566: .nf
                    567: 
                    568:       open (unit=6, form=\(fmprint\(fm)
                    569: .fi
                    570: .Nh 2 "Scratch files"
                    571: A
                    572: .B close
                    573: statement with 'status = "keep"'
                    574: may be specified for temporary files.
                    575: This is the default for all other files.
                    576: Remember to get the scratch file's real name,
                    577: using
                    578: .B inquire ,
                    579: if you want to re-open it later.
                    580: .Nh 2 "List directed I/O"
                    581: List directed read has been modified to allow
                    582: tab characters wherever blanks are allowed.
                    583: It also allows input of a string not enclosed in quotes.
                    584: The string must not start with a digit or quote,
                    585: and can not contain any separators ( ``,'', ``/'', blank or tab ).
                    586: A newline will terminate the string unless escaped with \\.
                    587: Any string not meeting the above restrictions
                    588: must be enclosed in quotes (`` " '' or `` \(fm '').
                    589: .PP
                    590: Internal list-directed I/O has been implemented. During internal list reads,
                    591: bytes are consumed until the iolist is satisfied, or the ``end-of-file''
                    592: is reached.
                    593: During internal list writes, records are filled until the iolist is satisfied.
                    594: The length of an internal array element should be at least 20 bytes to
                    595: avoid logical record overflow when writing double precision values.
                    596: Internal list read was implemented to make command line decoding easier.
                    597: Internal list write should be avoided.
                    598: .sp 1
                    599: .Nh 1 "Running older programs"
                    600: Traditional
                    601: .Fo
                    602: environments usually assume carriage control on all logical units,
                    603: usually interpret blank spaces on input as ``0''s, and often provide
                    604: attachment of global file names to logical units at run time.
                    605: There are several routines in the I/O library to provide these functions.
                    606: .Nh 2 "Traditional unit control parameters"
                    607: If a program reads and writes only units 5 and 6, then including
                    608: .B \-lI66
                    609: in the f77 command will cause carriage control to be interpreted on
                    610: output and cause blanks to be zeros on input without further
                    611: modification of the program.
                    612: If this is not adequate,
                    613: the routine 'ioinit'(3f) can be called to specify control parameters
                    614: separately, including whether files should be positioned at their
                    615: beginning or end upon opening.
                    616: .Nh 2 "Ioinit()"
                    617: \&'Ioinit'(3f) can be used to attach logical units
                    618: to specific files at run time, and to set global parameters for the
                    619: .Sm I/O
                    620: system.
                    621: It will look for names of a user specified form in the environment
                    622: and open the corresponding logical unit for
                    623: .B "sequential formatted"
                    624: I/O.
                    625: Names must be of the form
                    626: .B PREFIXnn
                    627: where
                    628: .B PREFIX
                    629: is specified in the call to
                    630: .I ioinit
                    631: and
                    632: .I nn
                    633: is the logical unit to be opened. Unit numbers < 10 must include
                    634: the leading ``0''.
                    635: .PP
                    636: .I Ioinit
                    637: should prove adequate for most programs as written.
                    638: However, it
                    639: is written in
                    640: .Fo \-77
                    641: specifically so that it may serve as an example for similar
                    642: user-supplied routines.
                    643: A copy may be retrieved by ``ar x /usr/lib/libU77.a ioinit.f''.
                    644: See section 2.4 for another way to override program file names
                    645: through environment variables.
                    646: .sp 1
                    647: .Nh 1 "Magnetic tape I/O"
                    648: Because the I/O library uses stdio buffering, reading or writing
                    649: magnetic tapes should be done with great caution, or avoided if possible.
                    650: A set of routines has been provided to read and write arbitrary sized buffers
                    651: to or from tape directly. The buffer must be a
                    652: .B character
                    653: object.
                    654: .B Internal
                    655: I/O can be used to fill or interpret the buffer.
                    656: These routines do not use normal
                    657: .Fo
                    658: I/O processing and do not obey
                    659: .Fo
                    660: I/O rules.
                    661: See 'topen'(3f).
                    662: .sp 1
                    663: .Nh 1 "Caveat Programmer"
                    664: The I/O library is extremely complex yet we believe there are few bugs left.
                    665: We've tried to make the system as correct as possible according to
                    666: the
                    667: .Sm ANSI
                    668: X3.9\-1978 document and keep it compatible with the
                    669: .UX
                    670: file system.
                    671: .LP
                    672: .ce 1
                    673: Exceptions to the ANSI Standard
                    674: .sp 1
                    675: .PP
                    676: A few exceptions to the
                    677: .Sm ANSI
                    678: standard remain.
                    679: .LP
                    680: 1) Vertical format control
                    681: .PP
                    682: The ``+'' carriage control specifier is not fully implemented
                    683: (see section 2.3).
                    684: It would be difficult to implement it correctly and still
                    685: provide
                    686: .UX -like
                    687: file I/O.
                    688: .PP
                    689: Furthermore, the carriage control implementation is asymmetrical.
                    690: A file written with carriage control interpretation can not be
                    691: read again with the same characters in column 1.
                    692: .PP
                    693: An alternative to interpreting carriage control internally is to
                    694: run the output file through a ``Fortran output filter''
                    695: before printing. This filter could recognize a much broader range
                    696: of carriage control and include terminal dependent processing.
                    697: One such filter is 'fpr'(1).
                    698: .sp 1
                    699: .LP
                    700: 2) Default files
                    701: .PP
                    702: Files created by default use of
                    703: .B rewind
                    704: or
                    705: .B endfile
                    706: statements are opened for
                    707: .B "sequential formatted"
                    708: access. There is no way to redefine such a file to allow
                    709: .B direct
                    710: or
                    711: .B unformatted
                    712: access.
                    713: .sp 1
                    714: .LP
                    715: 3) Lower case strings
                    716: .PP
                    717: It is not clear if the
                    718: .Sm ANSI
                    719: standard requires internally generated strings to be upper case or not.
                    720: As currently written, the
                    721: .B inquire
                    722: statement will return lower case strings for any alphanumeric data.
                    723: .sp 1
                    724: .LP
                    725: 4) Exponent representation on Ew.dEe output
                    726: .PP
                    727: If the field width for the exponent is too small, the standard
                    728: allows dropping the exponent character but only if the exponent
                    729: is > 99. This system does not enforce that restriction.
                    730: Further, the standard implies that the entire field, `w', should be
                    731: filled with asterisks if the exponent can not be displayed.
                    732: This system fills only the exponent field in the above case since
                    733: that is more diagnostic.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.