Annotation of 43BSDReno/share/doc/ps1/04.pascal/puman3.n, revision 1.1.1.1

1.1       root        1: .\" Copyright (c) 1980 Regents of the University of California.
                      2: .\" All rights reserved.  The Berkeley software License Agreement
                      3: .\" specifies the terms and conditions for redistribution.
                      4: .\"
                      5: .\"    @(#)puman3.n    6.2 (Berkeley) 5/7/86
                      6: .\"
                      7: .if !\n(xx \{\
                      8: .so tmac.p \}
                      9: .if n 'ND
                     10: .nr H1 2
                     11: .NH
                     12: Error diagnostics
                     13: .PP
                     14: This section of the
                     15: .UM
                     16: discusses the error diagnostics of the programs
                     17: .PI ,
                     18: .PC
                     19: and
                     20: .X .
                     21: .I Pix
                     22: is a simple but useful program which invokes
                     23: .PI
                     24: and
                     25: .X
                     26: to do all the real processing.
                     27: See its manual section
                     28: .IX
                     29: (1)
                     30: and section 5.2 below for more details.
                     31: All the diagnostics given by
                     32: .PI
                     33: will also be given by
                     34: .PC .
                     35: .NH 2
                     36: Translator syntax errors
                     37: .PP
                     38: A few comments on the general nature of the syntax errors usually
                     39: made by Pascal programmers
                     40: and the recovery mechanisms of the current translator may help in using
                     41: the system.
                     42: .SH
                     43: Illegal characters
                     44: .PP
                     45: Characters such as `$', `!', and `@' are not part of the language Pascal.
                     46: If they are found in the source program,
                     47: and are not part of a constant string, a constant character, or a comment,
                     48: they are considered to be
                     49: `illegal characters'.
                     50: This can happen if you leave off an opening string quote `\(aa'.
                     51: Note that the character `"', although used in English to quote strings,
                     52: is not used to quote strings in Pascal.
                     53: Most non-printing characters in your input are also illegal except
                     54: in character constants and character strings.
                     55: Except for the tab and form feed characters,
                     56: which are used to ease formatting of the program,
                     57: non-printing characters in the input file print as the character `?'
                     58: so that they will show in your listing.
                     59: .SH
                     60: String errors
                     61: .PP
                     62: There is no character string of length 0 in Pascal.
                     63: Consequently the input `\(aa\(aa' is not acceptable.
                     64: Similarly, encountering an end-of-line after an opening string quote `\(aa'
                     65: without encountering the matching closing quote yields the diagnostic
                     66: ``Unmatched \(aa for string''.
                     67: It is permissible to use the character `#'
                     68: instead of `\''
                     69: to delimit character and constant strings for portability reasons.
                     70: For this reason, a spuriously placed `#' sometimes causes the diagnostic
                     71: about unbalanced quotes.
                     72: Similarly, a `#' in column one is used when preparing programs which are to
                     73: be kept in multiple files.
                     74: See section 5.11 for details.
                     75: .SH
                     76: Comments in a comment, non-terminated comments
                     77: .PP
                     78: As we saw above, these errors are usually caused by leaving off a comment
                     79: delimiter.
                     80: You can convert parts of your program to comments
                     81: without generating this diagnostic
                     82: since there are two different kinds of comments \- those delimited by
                     83: `{' and `}', and those delimited by `(*' and `*)'.
                     84: Thus consider:
                     85: .LS
                     86: { This is a comment enclosing a piece of program
                     87: a := functioncall;     (* comment within comment *)
                     88: procedurecall;
                     89: lhs := rhs;            (* another comment *)
                     90: }
                     91: .LE
                     92: .PP
                     93: By using one kind of comment exclusively in your program you can use
                     94: the other delimiters when you need to
                     95: ``comment out''
                     96: parts of your program\*(dg.
                     97: .FS
                     98: \*(dgIf you wish to transport your program,
                     99: especially to the 6000-3.4 implementation,
                    100: you should use the character sequence `(*' to delimit comments.
                    101: For transportation over the
                    102: .I rcslink
                    103: to Pascal 6000-3.4, the character `#' should be used to delimit characters
                    104: and constant strings.
                    105: .FE
                    106: In this way you will also allow the translator to help by detecting
                    107: statements accidentally placed within comments.
                    108: .PP
                    109: If a comment does not terminate before the end of the input file,
                    110: the translator will point to the beginning of the comment,
                    111: indicating that the comment is not terminated.
                    112: In this case processing will terminate immediately.
                    113: See the discussion of ``QUIT'' below.
                    114: .SH
                    115: Digits in numbers
                    116: .PP
                    117: This part of the language is a minor nuisance.
                    118: Pascal requires digits in real numbers both before and after the decimal
                    119: point.
                    120: Thus the following statements, which look quite reasonable to
                    121: .SM
                    122: FORTRAN
                    123: .NL
                    124: users, generate diagnostics in Pascal:
                    125: .LS
                    126: .so digitsout
                    127: .LE
                    128: These same constructs are also illegal as input to the Pascal interpreter
                    129: .I px .
                    130: .SH
                    131: Replacements, insertions, and deletions
                    132: .PP
                    133: When a syntax error is encountered in the input text,
                    134: the parser invokes an error recovery procedure.
                    135: This procedure examines the input text immediately after the point
                    136: of error and considers a set of simple corrections to see whether they
                    137: will allow the analysis to continue.
                    138: These corrections involve replacing an input token with a different
                    139: token,
                    140: inserting a token,
                    141: or replacing an input token with a different token.
                    142: Most of these changes will not cause fatal syntax errors.
                    143: The exception is the insertion of or replacement with a symbol
                    144: such as an identifier or a number;
                    145: in this case the recovery makes no attempt to determine
                    146: .I which
                    147: identifier or
                    148: .I what 
                    149: number should be inserted,
                    150: hence these are considered fatal syntax errors.
                    151: .PP
                    152: Consider the following example.
                    153: .LS
                    154: % \*bpix -l synerr.p\fR
                    155: .tr --
                    156: .so synerrout
                    157: %
                    158: .LE
                    159: The only surprise here may be that Pascal does not have an exponentiation
                    160: operator, hence the complaint about `**'.
                    161: This error illustrates that, if you assume that the language has a feature
                    162: which it does not, the translator diagnostic may not indicate this,
                    163: as the translator is unlikely to recognize the construct you supply.
                    164: .SH
                    165: Undefined or improper identifiers
                    166: .PP
                    167: If an identifier is encountered in the input but is undefined,
                    168: the error recovery will replace it with an identifier of the
                    169: appropriate class.
                    170: Further references to this identifier will be summarized at the
                    171: end of the containing
                    172: .B procedure
                    173: or
                    174: .B function
                    175: or at the end of the
                    176: .B program
                    177: if the reference occurred in the main program.
                    178: Similarly,
                    179: if an identifier is used in an inappropriate way,
                    180: e.g. if a
                    181: .B type
                    182: identifier is used in an assignment statement,
                    183: or if a simple variable
                    184: is used where a
                    185: .B record
                    186: variable is required,
                    187: a diagnostic will be produced and an identifier of the appropriate
                    188: type inserted.
                    189: Further incorrect references to this identifier will be flagged only
                    190: if they involve incorrect use in a different way,
                    191: with all incorrect uses being summarized in the same way as undefined
                    192: variable uses are.
                    193: .SH
                    194: Expected symbols, malformed constructs
                    195: .PP
                    196: If none of the above mentioned corrections appear reasonable, the
                    197: error recovery will examine the input 
                    198: to the left of the point of error to see if there is only one symbol
                    199: which can follow this input.
                    200: If this is the case, the recovery will print a diagnostic which
                    201: indicates that the given symbol was `Expected'.
                    202: .PP
                    203: In cases where none of these corrections resolve the problems
                    204: in the input,
                    205: the recovery may issue a diagnostic that indicates that the
                    206: input is ``malformed''.
                    207: If necessary, the translator may then skip forward in the input to
                    208: a place where analysis can continue.
                    209: This process may cause some errors in the text to be missed.
                    210: .PP
                    211: Consider the following example:
                    212: .LS
                    213: % \*bpix -l synerr2.p\fR
                    214: .so synerr2out
                    215: %
                    216: .LE
                    217: Here we misspelled
                    218: .I output
                    219: and gave a
                    220: .SM FORTRAN
                    221: style variable declaration
                    222: which the translator diagnosed as a `Malformed declaration'.
                    223: When, on line 6, we used `(' and `)' for subscripting
                    224: (as in
                    225: .SM FORTRAN )
                    226: rather than the `[' and `]' which are used in Pascal,
                    227: the translator noted that
                    228: .I a
                    229: was not defined as a
                    230: .B procedure .
                    231: This occurred because
                    232: .B procedure
                    233: and
                    234: .B function
                    235: argument lists are delimited by parentheses in Pascal.
                    236: As it is not permissible to assign to procedure calls the translator
                    237: diagnosed a malformed statement at the point of assignment.
                    238: .SH
                    239: Expected and unexpected end-of-file, ``QUIT''
                    240: .PP
                    241: If the translator finds a complete program, but there is more non-comment text
                    242: in the input file, then it will indicate that an end-of-file was expected.
                    243: This situation may occur after a bracketing error, or if too many
                    244: .B end s
                    245: are present in the input.
                    246: The message may appear
                    247: after the recovery says that it
                    248: ``Expected \`.\'\|''
                    249: since `.' is the symbol that terminates a program.
                    250: .PP
                    251: If severe errors in the input prohibit further processing
                    252: the translator may produce a diagnostic followed by ``QUIT''.
                    253: One example of this was given above \-
                    254: a non-terminated comment;
                    255: another example is a line which is longer than 160
                    256: characters.
                    257: Consider also the following example.
                    258: .LS
                    259: % \*bpix -l mism.p\fR
                    260: .so mismout
                    261: %
                    262: .LE
                    263: .NH 2
                    264: Translator semantic errors
                    265: .PP
                    266: The extremely large number of semantic diagnostic messages which the translator
                    267: produces make it unreasonable to discuss each message or group of messages
                    268: in detail.
                    269: The messages are, however, very informative.
                    270: We will here explain the typical formats and the terminology used in the error
                    271: messages so that you will be able to make sense out of them.
                    272: In any case in which a diagnostic is not completely comprehensible you can
                    273: refer to the
                    274: .I "User Manual"
                    275: by Jensen and Wirth for examples.
                    276: .SH
                    277: Format of the error diagnostics
                    278: .PP
                    279: As we saw in the example program above, the error diagnostics from
                    280: the Pascal translator include the number of a line in the text of the program
                    281: as well as the text of the error message.
                    282: While this number is most often the line where the error occurred, it
                    283: is occasionally the number of a line containing a bracketing keyword
                    284: like
                    285: .B end
                    286: or
                    287: .B until .
                    288: In this case, the diagnostic may refer to the previous statement.
                    289: This occurs because of the method the translator uses for sampling line
                    290: numbers.
                    291: The absence of a trailing `;' in the previous statement causes the line
                    292: number corresponding to the
                    293: .B end
                    294: or
                    295: .B until .
                    296: to become associated with the statement.
                    297: As Pascal is a free-format language, the line number associations
                    298: can only be approximate and may seem arbitrary to some users.
                    299: This is the only notable exception, however, to reasonable associations.
                    300: .SH
                    301: Incompatible types
                    302: .PP
                    303: Since Pascal is a strongly typed language, many semantic errors manifest
                    304: themselves as type errors.
                    305: These are called `type clashes' by the translator.
                    306: The types allowed for various operators in the language are summarized on page
                    307: 108 of the
                    308: Jensen-Wirth
                    309: .I "User Manual" .
                    310: It is important to know that the Pascal translator, in its diagnostics,
                    311: distinguishes between the following type `classes':
                    312: .br
                    313: .ne 8
                    314: .TS
                    315: center;
                    316: lew(10) le le le le.
                    317: array  Boolean char    file    integer
                    318: pointer        real    record  scalar  string
                    319: .TE
                    320: These words are plugged into a great number of error messages.
                    321: Thus, if you tried to assign an
                    322: .I integer
                    323: value to a
                    324: .I char
                    325: variable you would receive a diagnostic like the following:
                    326: .LS
                    327: .so clashout
                    328: .LE
                    329: In this case, one error produced a two line error message.
                    330: If the same error occurs more than once, the same explanatory
                    331: diagnostic will be given each time.
                    332: .SH
                    333: Scalar
                    334: .PP
                    335: The only class whose meaning is not self-explanatory is 
                    336: `scalar'.
                    337: Scalar has a precise meaning in the
                    338: Jensen-Wirth
                    339: .I "User Manual"
                    340: where, in fact, it refers to
                    341: .I char ,
                    342: .I integer ,
                    343: .I real ,
                    344: and
                    345: .I Boolean
                    346: types as well as the enumerated types.
                    347: For the purposes of the Pascal translator,
                    348: scalar
                    349: in an error message refers to a user-defined, enumerated
                    350: type, such as
                    351: .I ops
                    352: in the example above or
                    353: .I color
                    354: in
                    355: .LS
                    356: \*btype\fP color = (red, green, blue)
                    357: .LE
                    358: For integers, the more explicit denotation
                    359: .I integer
                    360: is used.
                    361: Although it would be correct, in the context of the
                    362: .I "User Manual"
                    363: to refer to an integer variable as a
                    364: .I scalar
                    365: variable
                    366: .PI
                    367: prefers the more specific identification.
                    368: .SH
                    369: Function and procedure type errors
                    370: .PP
                    371: For built-in procedures and functions, two kinds of errors occur.
                    372: If the routines are called with the wrong number of arguments a message similar to:
                    373: .LS
                    374: .so sinout1
                    375: .LE
                    376: is given.
                    377: If the type of the argument is wrong, a message like
                    378: .LS
                    379: .so sinout2
                    380: .LE
                    381: is produced.
                    382: A few functions and procedures implemented in Pascal 6000-3.4 are
                    383: diagnosed as unimplemented in
                    384: Berkeley
                    385: Pascal, notably those related to
                    386: .B segmented 
                    387: files.
                    388: .SH
                    389: Can't read and write scalars, etc.
                    390: .PP
                    391: The messages which state that scalar (user-defined) types
                    392: cannot be written to and from files are often mysterious.
                    393: It is in fact the case that if you define
                    394: .LS
                    395: \*btype\fP color = (red, green, blue)
                    396: .LE
                    397: ``standard'' Pascal does not associate these constants with the strings
                    398: `red', `green', and `blue' in any way.
                    399: An extension has been added which allows enumerated types
                    400: to be read and written, 
                    401: however if the program is to be portable,
                    402: you will have to write your own routines to perform these functions.
                    403: Standard Pascal only allows the reading of characters, integers and real
                    404: numbers from text files.
                    405: You cannot read strings or Booleans.
                    406: It is possible to make a
                    407: .LS
                    408: \*bfile of\fP color
                    409: .LE
                    410: but the representation is binary rather than string.
                    411: .SH
                    412: Expression diagnostics
                    413: .PP
                    414: The diagnostics for semantically ill-formed expressions are very explicit.
                    415: Consider this sample translation:
                    416: .LS
                    417: % \*bpi -l expr.p\fP
                    418: .so exprout
                    419: %
                    420: .LE
                    421: This example is admittedly far-fetched, but illustrates that the error
                    422: messages are sufficiently clear to allow easy determination of the
                    423: problem in the expressions.
                    424: .SH
                    425: Type equivalence
                    426: .PP
                    427: Several diagnostics produced by the Pascal translator complain about
                    428: `non-equivalent types'.
                    429: In general,
                    430: Berkeley
                    431: Pascal considers variables to have the same type only if they were
                    432: declared with the same constructed type or with the same type identifier.
                    433: Thus, the variables
                    434: .I x
                    435: and
                    436: .I y
                    437: declared as
                    438: .LS
                    439: \*bvar\fP
                    440:     x: ^ integer;
                    441:     y: ^ integer;
                    442: .LE
                    443: do not have the same type.
                    444: The assignment
                    445: .LS
                    446: x := y
                    447: .LE
                    448: thus produces the diagnostics:
                    449: .LS
                    450: .so typequout
                    451: .LE
                    452: Thus it is always necessary to declare a type such as
                    453: .LS
                    454: \*btype\fP intptr = ^ integer;
                    455: .LE
                    456: and use it to declare
                    457: .LS
                    458: \*bvar\fP x: intptr; y: intptr;
                    459: .LE
                    460: Note that if we had initially declared
                    461: .LS
                    462: \*bvar\fP x, y: ^ integer;
                    463: .LE
                    464: then the assignment statement would have worked.
                    465: The statement
                    466: .LS
                    467: x^ := y^
                    468: .LE
                    469: is allowed in either case.
                    470: Since the parameter to a
                    471: .B procedure
                    472: or
                    473: .B function
                    474: must be declared with a
                    475: type identifier rather than a constructed type,
                    476: it is always necessary, in practice,
                    477: to declare any type which will be used in this way.
                    478: .SH
                    479: Unreachable statements
                    480: .PP
                    481: Berkeley
                    482: Pascal flags unreachable statements.
                    483: Such statements usually correspond to errors in the program logic.
                    484: Note that a statement is considered to be reachable
                    485: if there is a potential path of control,
                    486: even if it can never be taken.
                    487: Thus, no diagnostic is produced for the statement:
                    488: .LS
                    489: \*bif\fP false \*bthen\fP
                    490:     writeln('impossible!')
                    491: .LE
                    492: .SH
                    493: Goto's into structured statements
                    494: .PP
                    495: The translator detects and complains about
                    496: .B goto
                    497: statements which transfer control into structured statements (\c
                    498: .B for ,
                    499: .B while ,
                    500: etc.)
                    501: It does not allow such jumps, nor does it allow branching from the
                    502: .B then
                    503: part of an
                    504: .B if
                    505: statement into the
                    506: .B else
                    507: part.
                    508: Such checks are made only within the body of a single procedure or
                    509: function.
                    510: .SH
                    511: Unused variables, never set variables
                    512: .PP
                    513: Although
                    514: .PI
                    515: always clears variables to 0 at
                    516: .B procedure
                    517: and
                    518: .B function
                    519: entry,
                    520: .PC
                    521: does not unless runtime checking is enabled using the
                    522: .B C
                    523: option.
                    524: It is
                    525: .B not
                    526: good programming practice to rely on this initialization.
                    527: To discourage this practice, and to help detect errors in program logic,
                    528: .PI
                    529: flags as a `w' warning error:
                    530: .IP
                    531: .RS
                    532: .HP 1)
                    533: Use of a variable which is never assigned a value.
                    534: .IP 2)
                    535: A variable which is declared but never used, distinguishing
                    536: between those variables for which values are computed but which are never
                    537: used, and those completely unused.
                    538: .RE
                    539: .LP
                    540: In fact, these diagnostics are applied to all declared items.
                    541: Thus a
                    542: .B const
                    543: or a
                    544: .B procedure
                    545: which is declared but never used is flagged.
                    546: The
                    547: .B w
                    548: option of
                    549: .PI
                    550: may be used to suppress these warnings;
                    551: see sections 5.1 and 5.2.
                    552: .NH 2
                    553: Translator panics, i/o errors
                    554: .SH
                    555: Panics
                    556: .PP
                    557: One class of error which rarely occurs, but which causes termination
                    558: of all processing when it does is a panic.
                    559: A panic indicates a translator-detected internal inconsistency.
                    560: A typical panic message is:
                    561: .LS
                    562: snark (rvalue) line=110 yyline=109
                    563: Snark in pi
                    564: .LE
                    565: If you receive such a message, the translation will be quickly and perhaps
                    566: ungracefully terminated.
                    567: You should contact a teaching assistant or a member of the system staff,
                    568: after saving a copy of your program for later inspection.
                    569: If you were making changes to an existing program when the problem
                    570: occurred, you may
                    571: be able to work around the problem by ascertaining which change caused the
                    572: .I snark
                    573: and making a different change or correcting an error in the program.
                    574: A small number of panics are possible in
                    575: .X .
                    576: All panics should be reported to a teaching assistant or systems
                    577: staff so that they can be fixed.
                    578: .SH
                    579: Out of memory
                    580: .PP
                    581: The only other error which will abort translation when no errors are
                    582: detected is running out of memory.
                    583: All tables in the translator, with the exception of the parse stack,
                    584: are dynamically allocated, and can grow to take up the full available
                    585: process space of 64000 bytes on the \s-2PDP\s0-11.  On the \s-2VAX\s0-11,
                    586: table sizes are extremely generous and very large (25000) line programs
                    587: have been easily accommodated.  For the \s-2PDP\s0\-11, it is
                    588: generally true that
                    589: the size of the largest translatable program is directly related to
                    590: .B procedure
                    591: and
                    592: .B function
                    593: size.
                    594: A number of non-trivial Pascal programs, including
                    595: some with more than 2000 lines and 2500 statements
                    596: have been translated and interpreted using
                    597: Berkeley
                    598: Pascal on \s-2PDP\s0-11's.
                    599: Notable among these are the Pascal-S
                    600: interpreter,
                    601: a large set of programs for automated generation of
                    602: code generators,
                    603: and a general context-free parsing program which has been used to
                    604: parse sentences with a grammar for a superset of English.
                    605: In general,
                    606: very large programs should be translated using
                    607: .PC
                    608: and the separate compilation facility.
                    609: .PP
                    610: If you receive an out of space message from the translator 
                    611: during translation of a large
                    612: .B procedure
                    613: or
                    614: .B function
                    615: or one containing a large number of string constants
                    616: you may yet be able
                    617: to translate your program if you break this one
                    618: .B procedure
                    619: or
                    620: .B function
                    621: into several routines.
                    622: .SH
                    623: I/O errors
                    624: .PP
                    625: Other errors which you may encounter when running
                    626: .PI
                    627: relate to input-output.
                    628: If
                    629: .PI
                    630: cannot open the file you specify,
                    631: or if the file is empty,
                    632: you will be so informed.
                    633: .NH 2
                    634: Run-time errors
                    635: .PP
                    636: We saw, in our second example, a run-time error.
                    637: We here give the general description of run-time errors.
                    638: The more unusual interpreter error messages are explained
                    639: briefly in the manual section for
                    640: .I px 
                    641: (1).
                    642: .SH
                    643: Start-up errors
                    644: .PP
                    645: These errors occur when the object file to be executed is not available
                    646: or appropriate.
                    647: Typical errors here are caused by the specified object file not existing,
                    648: not being a Pascal object, or being inaccessible to the user.
                    649: .SH
                    650: Program execution errors
                    651: .PP
                    652: These errors occur when the program interacts with the Pascal runtime
                    653: environment in an inappropriate way.
                    654: Typical errors are values or subscripts out of range,
                    655: bad arguments to built-in functions,
                    656: exceeding the statement limit because of an infinite loop,
                    657: or running out of memory\*(dd.
                    658: .FS
                    659: \*(ddThe checks for running out of memory are not foolproof and there
                    660: is a chance that the interpreter will fault, producing a core image
                    661: when it runs out of memory.
                    662: This situation occurs very rarely.
                    663: .FE
                    664: The interpreter will produce a backtrace after the error occurs,
                    665: showing all the active routine calls,
                    666: unless the
                    667: .B p
                    668: option was disabled when the program was translated.
                    669: Unfortunately, no variable values are given and no way of extracting them
                    670: is available.*
                    671: .FS
                    672: * On the \s-2VAX\s0-11, each variable
                    673: is restricted to allocate at most 65000 bytes of storage (this is a
                    674: \s-2PDP\s0-11ism that has survived to the \s-2VAX\s0.)
                    675: .FE
                    676: .PP
                    677: As an example of such an error, assume that we have accidentally
                    678: declared the constant
                    679: .I n1
                    680: to be 6, instead of 7
                    681: on line 2 of the program primes as given in section 2.6 above.
                    682: If we run this program we get the following response.
                    683: .LS
                    684: % \*bpix primes.p\fP
                    685: .so primeout3
                    686: %
                    687: .LE
                    688: .PP
                    689: Here the interpreter indicates that the program terminated
                    690: abnormally due to a subscript out of range near line 14,
                    691: which is eight lines into the body of the program primes.
                    692: .SH
                    693: Interrupts
                    694: .PP
                    695: If the program is interrupted while executing
                    696: and the
                    697: .B p
                    698: option was not specified,
                    699: then a backtrace will be printed.\*(dg
                    700: .FS
                    701: \*(dgOccasionally, the Pascal system will be in an inconsistent
                    702: state when this occurs,
                    703: e.g. when an interrupt terminates a
                    704: .B procedure
                    705: or
                    706: .B function
                    707: entry or exit.
                    708: In this case, the backtrace will only contain the current line.
                    709: A reverse call order list of procedures will not be given.
                    710: .FE
                    711: The file
                    712: .I pmon.out
                    713: of profile information will be written if the program was translated
                    714: with the
                    715: .B z
                    716: option enabled to
                    717: .PI
                    718: or
                    719: .IX .
                    720: .SH
                    721: I/O interaction errors
                    722: .PP
                    723: The final class of interpreter errors results from inappropriate
                    724: interactions with files, including the user's terminal.
                    725: Included here are bad formats for integer and real numbers (such as
                    726: no digits after the decimal point) when reading.

unix.superglobalmegacorp.com

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