Annotation of 43BSDReno/share/doc/ps1/04.pascal/pumanA.n, revision 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: .\"    @(#)pumanA.n    6.2 (Berkeley) 5/7/86
        !             6: .\"
        !             7: .if !\n(xx \{\
        !             8: .so tmac.p \}
        !             9: .ND
        !            10: .nr H1 0
        !            11: .af H1 A
        !            12: .NH 
        !            13: Appendix to Wirth's Pascal Report
        !            14: .PP
        !            15: This section is an appendix to
        !            16: the definition of the Pascal language in Niklaus Wirth's
        !            17: .I "Pascal Report"
        !            18: and, with that Report, precisely defines the
        !            19: Berkeley
        !            20: implementation.
        !            21: This appendix includes a summary of extensions to the language,
        !            22: gives the ways in which the undefined specifications were resolved,
        !            23: gives limitations and restrictions of the current implementation,
        !            24: and lists the added functions and procedures available.
        !            25: It concludes with a list of differences with the commonly available
        !            26: Pascal 6000\-3.4 implementation,
        !            27: and some comments on standard and portable Pascal.
        !            28: .NH 2
        !            29: Extensions to the language Pascal
        !            30: .PP
        !            31: This section defines non-standard language constructs available in
        !            32: .UP .
        !            33: The
        !            34: .B s
        !            35: standard Pascal option of the translators
        !            36: .PI
        !            37: and
        !            38: .PC
        !            39: can be used to detect these extensions in programs which are to be transported.
        !            40: .SH
        !            41: String padding
        !            42: .PP
        !            43: .UP
        !            44: will pad constant strings with blanks in expressions and as
        !            45: value parameters to make them as long as is required.
        !            46: The following is a legal
        !            47: .UP
        !            48: program:
        !            49: .LS
        !            50: \*bprogram\fP x(output);
        !            51: \*bvar\fP z : \*bpacked\fP \*barray\fP [ 1 .. 13 ] \*bof\fP char;
        !            52: \*bbegin\fP
        !            53:     z := 'red';
        !            54:     writeln(z)
        !            55: \*bend\fP;
        !            56: .LE
        !            57: The padded blanks are added on the right.
        !            58: Thus the assignment above is equivalent to:
        !            59: .LS
        !            60: z := 'red          '
        !            61: .LE
        !            62: which is standard Pascal.
        !            63: .SH
        !            64: Octal constants, octal and hexadecimal write
        !            65: .PP
        !            66: Octal constants may be given as a sequence of octal digits followed
        !            67: by the character `b' or `B'.
        !            68: The forms
        !            69: .LS
        !            70: write(a:n \*boct\fP)
        !            71: .LE
        !            72: and
        !            73: .LS
        !            74: write(a:n \*bhex\fP)
        !            75: .LE
        !            76: cause the internal representation of
        !            77: expression
        !            78: .I a,
        !            79: which must be Boolean, character, integer, pointer, or a user-defined enumerated
        !            80: type,
        !            81: to be written in octal or hexadecimal respectively.
        !            82: .SH
        !            83: Assert statement
        !            84: .PP
        !            85: An
        !            86: .B assert
        !            87: statement causes a
        !            88: .I Boolean
        !            89: expression to be evaluated
        !            90: each time the statement is executed.
        !            91: A runtime error results if any of the expressions evaluates to be 
        !            92: .I false .
        !            93: The
        !            94: .B assert
        !            95: statement is treated as a comment if run-time tests are disabled.
        !            96: The syntax for
        !            97: .B assert
        !            98: is:
        !            99: .LS
        !           100: \*bassert\fP <expr>
        !           101: .LE
        !           102: .SH
        !           103: Enumerated type input-output
        !           104: .PP
        !           105: Enumerated types may be read and written.
        !           106: On output the string name associated with the enumerated
        !           107: value is output.
        !           108: If the value is out of range,
        !           109: a runtime error occurs.
        !           110: On input an identifier is read and looked up
        !           111: in a table of names associated with the
        !           112: type of the variable, and
        !           113: the appropriate internal value is assigned to the variable being
        !           114: read.
        !           115: If the name is not found in the table
        !           116: a runtime error occurs.
        !           117: .SH
        !           118: Structure returning functions
        !           119: .PP
        !           120: An extension has been added which allows functions 
        !           121: to return arbitrary sized structures rather than just
        !           122: scalars as in the standard.
        !           123: .SH
        !           124: Separate compilation
        !           125: .PP
        !           126: The compiler
        !           127: .PC
        !           128: has been extended to allow separate compilation of programs.
        !           129: Procedures and functions declared at the global level
        !           130: may be compiled separately.
        !           131: Type checking of calls to separately compiled routines is performed
        !           132: at load time to insure that the program as a whole
        !           133: is consistent.
        !           134: See section 5.10 for details.
        !           135: .NH 2
        !           136: Resolution of the undefined specifications
        !           137: .SH
        !           138: File name \- file variable associations
        !           139: .PP
        !           140: Each Pascal file variable is associated with a named
        !           141: .UX
        !           142: file.
        !           143: Except for
        !           144: .I input
        !           145: and
        !           146: .I output,
        !           147: which are
        !           148: exceptions to some of the rules, a name can become associated
        !           149: with a file in any of three ways:
        !           150: .IP "\ \ \ \ \ 1)" 10
        !           151: If a global Pascal file variable appears in the
        !           152: .B program
        !           153: statement
        !           154: then it is associated with
        !           155: .UX
        !           156: file of the same name.
        !           157: .IP "\ \ \ \ \ 2)"
        !           158: If a file was reset or rewritten using the
        !           159: extended two-argument form of
        !           160: .I reset
        !           161: or
        !           162: .I rewrite
        !           163: then the given name
        !           164: is associated.
        !           165: .IP "\ \ \ \ \ 3)"
        !           166: If a file which has never had
        !           167: .UX
        !           168: name associated
        !           169: is reset or rewritten without specifying a name
        !           170: via the second argument, then a temporary name
        !           171: of the form `tmp.x'
        !           172: is associated with the file.
        !           173: Temporary names start with
        !           174: `tmp.1' and continue by incrementing the last character in the
        !           175: .SM
        !           176: USASCII
        !           177: .NL
        !           178: ordering.
        !           179: Temporary files are removed automatically
        !           180: when their scope is exited.
        !           181: .SH
        !           182: The program statement
        !           183: .PP
        !           184: The syntax of the
        !           185: .B program
        !           186: statement is:
        !           187: .LS
        !           188: \*bprogram\fP <id> ( <file id> { , <file id > } ) ;
        !           189: .LE
        !           190: The file identifiers (other than
        !           191: .I input
        !           192: and
        !           193: .I output )
        !           194: must be declared as variables of
        !           195: .B file
        !           196: type in the global declaration part.
        !           197: .SH
        !           198: The files input and output
        !           199: .PP
        !           200: The formal parameters
        !           201: .I input
        !           202: and
        !           203: .I output
        !           204: are associated with the
        !           205: .UX
        !           206: standard input and output and have a
        !           207: somewhat special status.
        !           208: The following rules must be noted:
        !           209: .IP "\ \ \ \ \ 1)" 10
        !           210: The program heading
        !           211: .B must
        !           212: contains the formal parameter
        !           213: .I output.
        !           214: If
        !           215: .I input
        !           216: is used, explicitly or implicitly, then it must
        !           217: also be declared here.
        !           218: .IP "\ \ \ \ \ 2)"
        !           219: Unlike all other files, the
        !           220: Pascal files
        !           221: .I input
        !           222: and
        !           223: .I output
        !           224: must not be defined in a declaration,
        !           225: as their declaration is automatically:
        !           226: .LS
        !           227: \*bvar\fP input, output: text
        !           228: .LE
        !           229: .IP "\ \ \ \ \ 3)"
        !           230: The procedure
        !           231: .I reset
        !           232: may be used on
        !           233: .I input.
        !           234: If no
        !           235: .UX
        !           236: file name has ever been associated with
        !           237: .I input,
        !           238: and no file name is given, then an attempt will be made
        !           239: to `rewind'
        !           240: .I input.
        !           241: If this fails, a run time
        !           242: error will occur.
        !           243: .I Rewrite
        !           244: calls to output act as for any other file, except that
        !           245: .I output
        !           246: initially has no associated file.
        !           247: This means that a simple
        !           248: .LS
        !           249: rewrite(output)
        !           250: .LE
        !           251: associates a temporary name with
        !           252: .I output.
        !           253: .SH
        !           254: Details for files
        !           255: .PP
        !           256: If a file other than
        !           257: .I input
        !           258: is to be read,
        !           259: then reading must be initiated by a call to the
        !           260: procedure
        !           261: .I reset
        !           262: which causes the Pascal system to attempt to open the
        !           263: associated
        !           264: .UX
        !           265: file for reading.
        !           266: If this fails, then a runtime error occurs.
        !           267: Writing of a file other than
        !           268: .I output
        !           269: must be initiated by a
        !           270: .I rewrite
        !           271: call,
        !           272: which causes the Pascal system to create the associated
        !           273: .UX
        !           274: file and
        !           275: to then open the file for writing only.
        !           276: .SH
        !           277: Buffering
        !           278: .PP
        !           279: The buffering for
        !           280: .I output
        !           281: is determined by the value of the
        !           282: .B b
        !           283: option
        !           284: at the end of the
        !           285: .B program
        !           286: statement.
        !           287: If it has its default value 1,
        !           288: then
        !           289: .I output
        !           290: is
        !           291: buffered in blocks of up to 512 characters,
        !           292: flushed whenever a writeln occurs
        !           293: and at each reference to the file
        !           294: .I input.
        !           295: If it has the value 0,
        !           296: .I output
        !           297: is unbuffered.
        !           298: Any value of
        !           299: 2 or more gives block buffering without line or
        !           300: .I input
        !           301: reference flushing.
        !           302: All other output files are always buffered in blocks of 512 characters.
        !           303: All output buffers are flushed when the files are closed at scope exit,
        !           304: whenever the procedure
        !           305: .I message
        !           306: is called, and can be flushed using the
        !           307: built-in procedure
        !           308: .I flush.
        !           309: .PP
        !           310: An important point for an interactive implementation is the definition
        !           311: of `input\(ua'.
        !           312: If
        !           313: .I input
        !           314: is a teletype, and the Pascal system reads a character at the beginning
        !           315: of execution to define `input\(ua', then no prompt could be printed
        !           316: by the program before the user is required to type some input.
        !           317: For this reason, `input\(ua' is not defined by the system until its definition
        !           318: is needed, reading from a file occurring only when necessary.
        !           319: .SH
        !           320: The character set
        !           321: .PP
        !           322: Seven bit
        !           323: .SM USASCII
        !           324: is the character set used on
        !           325: .UX .
        !           326: The standard Pascal
        !           327: symbols `and', 'or', 'not', '<=', '>=', '<>',
        !           328: and the uparrow `\(ua' (for pointer qualification)
        !           329: are recognized.\*(dg
        !           330: .FS
        !           331: \*(dgOn many terminals and printers, the up arrow is represented
        !           332: as a circumflex `^'.
        !           333: These are not distinct characters, but rather different graphic
        !           334: representations of the same internal codes.
        !           335: .FE
        !           336: Less portable are the 
        !           337: synonyms tilde `~'
        !           338: for
        !           339: .B not ,
        !           340: `&' for
        !           341: .B and ,
        !           342: and `|' for
        !           343: .B or .
        !           344: .PP
        !           345: Upper and lower case are considered to be distinct.\*(st
        !           346: .FS
        !           347: \*(stThe proposed standard for Pascal considers them to be the same.
        !           348: .FE
        !           349: Keywords and built-in
        !           350: .B procedure
        !           351: and
        !           352: .B function
        !           353: names are
        !           354: composed of all lower case letters.
        !           355: Thus the identifiers GOTO and GOto are distinct both from each other and
        !           356: from the keyword
        !           357: \*bgoto\fP.
        !           358: The standard type `boolean' is also available as `Boolean'.
        !           359: .PP
        !           360: Character strings and constants may be delimited by the character
        !           361: `\''
        !           362: or by the character `#';
        !           363: the latter is sometimes convenient when programs are to be transported.
        !           364: Note that the `#' character has special meaning 
        !           365: .up
        !           366: when it is the first character on a line \- see
        !           367: .I "Multi-file programs"
        !           368: below.
        !           369: .SH
        !           370: The standard types
        !           371: .PP
        !           372: The standard type
        !           373: .I integer
        !           374: is conceptually defined as
        !           375: .LS
        !           376: \*btype\fP integer = minint .. maxint;
        !           377: .LE
        !           378: .I Integer
        !           379: is implemented with 32 bit twos complement arithmetic.
        !           380: Predefined constants of type
        !           381: .I integer
        !           382: are:
        !           383: .LS
        !           384: \*bconst\fP maxint = 2147483647; minint = -2147483648;
        !           385: .LE
        !           386: .PP
        !           387: The standard type
        !           388: .I char
        !           389: is conceptually defined as
        !           390: .LS
        !           391: \*btype\fP char = minchar .. maxchar;
        !           392: .LE
        !           393: Built-in character constants are `minchar' and `maxchar', `bell' and `tab';
        !           394: ord(minchar) = 0, ord(maxchar) = 127.
        !           395: .PP
        !           396: The type
        !           397: .I real
        !           398: is implemented using 64 bit floating point arithmetic.
        !           399: The floating point arithmetic is done in `rounded' mode, and
        !           400: provides approximately 17 digits of precision
        !           401: with numbers as small as 10 to the negative 38th power and as large as
        !           402: 10 to the 38th power.
        !           403: .SH
        !           404: Comments
        !           405: .PP
        !           406: Comments can be delimited by either `{' and `}' or by `(*' and `*)'.
        !           407: If the character `{' appears in a comment delimited by `{' and `}',
        !           408: a warning diagnostic is printed.
        !           409: A similar warning will be printed if the sequence `(*' appears in
        !           410: a comment delimited by `(*' and `*)'.
        !           411: The restriction implied by this warning is not part of standard Pascal,
        !           412: but detects many otherwise subtle errors.
        !           413: .SH
        !           414: Option control
        !           415: .PP
        !           416: Options of the translators may be controlled
        !           417: in two distinct ways.
        !           418: A number of options may appear on the command line invoking the translator.
        !           419: These options are given as one or more strings of letters preceded by the
        !           420: character `\-' and cause the default setting of
        !           421: each given option to be changed.
        !           422: This method of communication of options is expected to predominate
        !           423: for
        !           424: .UX .
        !           425: Thus the command
        !           426: .LS
        !           427: % \*bpi \-l \-s foo.p\fR
        !           428: .LE
        !           429: translates the file foo.p with the listing option enabled (as it normally
        !           430: is off), and with only standard Pascal features available.
        !           431: .PP
        !           432: If more control over the portions of the program where options are enabled is
        !           433: required, then option control in comments can and should be used.
        !           434: The
        !           435: format for option control in comments is identical to that used in Pascal
        !           436: 6000\-3.4.
        !           437: One places the character `$' as the first character of the comment
        !           438: and follows it by a comma separated list of directives.
        !           439: Thus an equivalent to the command line example given above would be:
        !           440: .LS
        !           441: {$l+,s+ listing on, standard Pascal}
        !           442: .LE
        !           443: as the first line of the program.
        !           444: The `l'
        !           445: option is more appropriately specified on the command line,
        !           446: since it is extremely unlikely in an interactive environment
        !           447: that one wants a listing of the program each time it is translated.
        !           448: .PP
        !           449: Directives consist of a letter designating the option,
        !           450: followed either by a `+' to turn the option on, or by a `\-' to turn the
        !           451: option off.
        !           452: The
        !           453: .B b
        !           454: option takes a single digit instead of
        !           455: a `+' or `\-'.
        !           456: .SH
        !           457: Notes on the listings
        !           458: .PP
        !           459: The first page of a listing
        !           460: includes a banner line indicating the version and date of generation of
        !           461: .PI
        !           462: or
        !           463: .PC .
        !           464: It also
        !           465: includes the
        !           466: .UX
        !           467: path name supplied for the source file and the date of
        !           468: last modification of that file.
        !           469: .PP
        !           470: Within the body of the listing, lines are numbered consecutively and
        !           471: correspond to the line numbers for the editor.
        !           472: Currently, two special
        !           473: kinds of lines may be used to format the listing:
        !           474: a line consisting of a form-feed
        !           475: character, control-l, which causes a page
        !           476: eject in the listing, and a line with
        !           477: no characters which causes the line number to be suppressed in the listing,
        !           478: creating a truly blank line.
        !           479: These lines thus correspond to `eject' and `space' macros found in many
        !           480: assemblers.
        !           481: Non-printing characters are printed as the character `?' in the listing.\*(dg
        !           482: .FS
        !           483: \*(dgThe character generated by a control-i indents
        !           484: to the next `tab stop'.
        !           485: Tab stops are set every 8 columns in
        !           486: .UX .
        !           487: Tabs thus provide a quick way of indenting in the program.
        !           488: .FE
        !           489: .SH
        !           490: The standard procedure write
        !           491: .PP
        !           492: If no minimum field length parameter is specified
        !           493: for a
        !           494: .I write,
        !           495: the following default
        !           496: values are assumed:
        !           497: .KS
        !           498: .TS
        !           499: center;
        !           500: l n.
        !           501: integer        10
        !           502: real   22
        !           503: Boolean        length of `true' or `false'
        !           504: char   1
        !           505: string length of the string
        !           506: oct    11
        !           507: hex    8
        !           508: .TE
        !           509: .KE
        !           510: The end of each line in a text file should be explicitly
        !           511: indicated by `writeln(f)', where `writeln(output)' may be written
        !           512: simply as `writeln'.
        !           513: For
        !           514: .UX ,
        !           515: the built-in function `page(f)' puts a single
        !           516: .SM ASCII
        !           517: form-feed character on the output file.
        !           518: For programs which are to be transported the filter
        !           519: .I pcc
        !           520: can be used to interpret carriage control, as
        !           521: .UX
        !           522: does not normally do so.
        !           523: .NH 2
        !           524: Restrictions and limitations
        !           525: .SH
        !           526: Files
        !           527: .PP
        !           528: Files cannot be members of files or members of dynamically
        !           529: allocated structures.
        !           530: .SH
        !           531: Arrays, sets and strings
        !           532: .PP
        !           533: The calculations involving array subscripts and set elements
        !           534: are done with 16 bit arithmetic.
        !           535: This
        !           536: restricts the types over which arrays and sets may be defined.
        !           537: The lower bound of such a range must be greater than or equal to
        !           538: \-32768, and the upper bound less than 32768.
        !           539: In particular, strings may have any length from 1 to 65535 characters,
        !           540: and sets may contain no more than 65535 elements.
        !           541: .SH
        !           542: Line and symbol length
        !           543: .PP
        !           544: There is no intrinsic limit on the length of identifiers.
        !           545: Identifiers
        !           546: are considered to be distinct if they differ
        !           547: in any single position over their entire length.
        !           548: There is a limit, however, on the maximum input
        !           549: line length.
        !           550: This limit is quite generous however, currently exceeding 160
        !           551: characters.
        !           552: .SH
        !           553: Procedure and function nesting and program size
        !           554: .PP
        !           555: At most 20 levels of 
        !           556: .B procedure 
        !           557: and 
        !           558: .B function 
        !           559: nesting are allowed.
        !           560: There is no fundamental, translator defined limit on the size of the
        !           561: program which can be translated.
        !           562: The ultimate limit is supplied by the
        !           563: hardware and thus, on the \s-2PDP\s0-11,
        !           564: by the 16 bit address space.
        !           565: If
        !           566: one runs up against the `ran out of memory' diagnostic the program may yet
        !           567: translate if smaller procedures are used, as a lot of space is freed
        !           568: by the translator at the completion of each 
        !           569: .B procedure
        !           570: or
        !           571: .B function
        !           572: in the current
        !           573: implementation.
        !           574: .PP
        !           575: On the \s-2VAX\s0-11, there is an implementation defined limit
        !           576: of 65536 bytes per variable.
        !           577: There is no limit on the number of variables.
        !           578: .SH
        !           579: Overflow
        !           580: .PP
        !           581: There is currently no checking for overflow on arithmetic operations at
        !           582: run-time on the \s-2PDP\s0-11.
        !           583: Overflow checking is performed on the \s-2VAX\s0-11 by the hardware.
        !           584: .br
        !           585: .ne 15
        !           586: .NH 2
        !           587: Added types, operators, procedures and functions
        !           588: .SH
        !           589: Additional predefined types
        !           590: .PP
        !           591: The type
        !           592: .I alfa
        !           593: is predefined as:
        !           594: .LS
        !           595: \*btype\fP alfa = \*bpacked\fP \*barray\fP [ 1..10 ] \*bof\fP \*bchar\fP
        !           596: .LE
        !           597: .PP
        !           598: The type
        !           599: .I intset
        !           600: is predefined as:
        !           601: .LS
        !           602: \*btype\fP intset = \*bset of\fP 0..127
        !           603: .LE
        !           604: In most cases the context of an expression involving a constant
        !           605: set allows the translator to determine the type of the set, even though the
        !           606: constant set itself may not uniquely determine this type.
        !           607: In the
        !           608: cases where it is not possible to determine the type of the set from
        !           609: local context, the expression type defaults to a set over the entire base
        !           610: type unless the base type is integer\*(dg.
        !           611: .FS
        !           612: \*(dgThe current translator makes a special case of the construct
        !           613: `if ... in [ ... ]' and enforces only the more lax restriction
        !           614: on 16 bit arithmetic given above in this case.
        !           615: .FE
        !           616: In the latter case the type defaults to the current
        !           617: binding of
        !           618: .I intset,
        !           619: which must be ``type set of (a subrange of) integer'' at that point.
        !           620: .PP
        !           621: Note that if 
        !           622: .I intset 
        !           623: is redefined via:
        !           624: .LS
        !           625: \*btype\fP intset = \*bset of\fP 0..58;
        !           626: .LE
        !           627: then the default integer set is the implicit
        !           628: .I intset 
        !           629: of
        !           630: Pascal 6000\-3.4
        !           631: .SH
        !           632: Additional predefined operators
        !           633: .PP
        !           634: The relationals `<' and `>' of proper set
        !           635: inclusion are available.
        !           636: With
        !           637: .I a
        !           638: and
        !           639: .I b
        !           640: sets, note that
        !           641: .LS
        !           642: (\*bnot\fR (\fIa\fR < \fIb\fR)) <> (\fIa\fR >= \fIb\fR)
        !           643: .LE
        !           644: As an example consider the sets
        !           645: .I a
        !           646: = [0,2]
        !           647: and
        !           648: .I b
        !           649: = [1].
        !           650: The only relation true between these sets is `<>'.
        !           651: .SH
        !           652: Non-standard procedures
        !           653: .IP argv(i,a) 25
        !           654: where
        !           655: .I i 
        !           656: is an integer and
        !           657: .I a
        !           658: is a string variable
        !           659: assigns the (possibly truncated or blank padded)
        !           660: .I i \|'th
        !           661: argument
        !           662: of the invocation of the current
        !           663: .UX
        !           664: process to the variable
        !           665: .I a .
        !           666: The range of valid
        !           667: .I i
        !           668: is
        !           669: .I 0
        !           670: to
        !           671: .I argc\-1 .
        !           672: .IP date(a) 
        !           673: assigns the current date to the alfa variable 
        !           674: .I a
        !           675: in the format `dd mmm yy ', where `mmm' is the first
        !           676: three characters of the month, i.e. `Apr'.
        !           677: .IP flush(f) 
        !           678: writes the output buffered for Pascal file
        !           679: .I f
        !           680: into the associated
        !           681: .UX
        !           682: file.
        !           683: .IP halt 
        !           684: terminates the execution of the program with
        !           685: a control flow backtrace.
        !           686: .IP linelimit(f,x)\*(dd
        !           687: .FS
        !           688: \*(ddCurrently ignored by pdp-11
        !           689: .X .
        !           690: .FE
        !           691: with
        !           692: .I f 
        !           693: a textfile and
        !           694: .I x 
        !           695: an integer expression
        !           696: causes
        !           697: the program to be abnormally terminated if more than
        !           698: .I x 
        !           699: lines are
        !           700: written on file
        !           701: .I f .
        !           702: If
        !           703: .I x 
        !           704: is less than 0 then no limit is imposed.
        !           705: .IP message(x,...) 
        !           706: causes the parameters, which have the format of those
        !           707: to the
        !           708: built-in
        !           709: .B procedure
        !           710: .I write,
        !           711: to be written unbuffered on the diagnostic unit 2,
        !           712: almost always the user's terminal.
        !           713: .IP null
        !           714: a procedure of no arguments which does absolutely nothing.
        !           715: It is useful as a place holder,
        !           716: and is generated by
        !           717: .XP
        !           718: in place of the invisible empty statement.
        !           719: .IP remove(a) 
        !           720: where
        !           721: .I a 
        !           722: is a string causes the
        !           723: .UX
        !           724: file whose
        !           725: name is
        !           726: .I a, 
        !           727: with trailing blanks eliminated, to be removed.
        !           728: .IP reset(f,a) 
        !           729: where
        !           730: .I a 
        !           731: is a string causes the file whose name
        !           732: is
        !           733: .I a 
        !           734: (with blanks trimmed) to be associated with
        !           735: .I f 
        !           736: in addition
        !           737: to the normal function of
        !           738: .I reset.
        !           739: .IP rewrite(f,a) 
        !           740: is analogous to `reset' above.
        !           741: .IP stlimit(i)
        !           742: where
        !           743: .I i 
        !           744: is an integer sets the statement limit to be
        !           745: .I i 
        !           746: statements.
        !           747: Specifying the
        !           748: .B p
        !           749: option to
        !           750: .I pc
        !           751: disables statement limit counting.
        !           752: .IP time(a) 
        !           753: causes the current time in the form `\ hh:mm:ss\ ' to be
        !           754: assigned to the alfa variable
        !           755: .I a.
        !           756: .SH
        !           757: Non-standard functions
        !           758: .IP argc 25
        !           759: returns the count of arguments when the Pascal program
        !           760: was invoked.
        !           761: .I Argc
        !           762: is always at least 1.
        !           763: .IP card(x) 
        !           764: returns the cardinality of the set
        !           765: .I x, 
        !           766: i.e. the
        !           767: number of elements contained in the set.
        !           768: .IP clock 
        !           769: returns an integer which is the number of central processor
        !           770: milliseconds of user time used by this process.
        !           771: .IP expo(x) 
        !           772: yields the integer valued exponent of the floating-point
        !           773: representation of
        !           774: .I x ;
        !           775: expo(\fIx\fP) = entier(log2(abs(\fIx\fP))).
        !           776: .IP random(x) 
        !           777: where
        !           778: .I x 
        !           779: is a real parameter, evaluated but otherwise
        !           780: ignored, invokes a linear congruential random number generator.
        !           781: Successive seeds are generated as (seed*a + c) mod m and
        !           782: the new random number is a normalization of the seed to the range 0.0 to 1.0;
        !           783: a is 62605, c is 113218009, and m is
        !           784: 536870912.
        !           785: The initial seed
        !           786: is 7774755.
        !           787: .IP seed(i) 
        !           788: where
        !           789: .I i 
        !           790: is an integer sets the random number generator seed
        !           791: to
        !           792: .I i 
        !           793: and returns the previous seed.
        !           794: Thus seed(seed(i))
        !           795: has no effect except to yield value
        !           796: .I i.
        !           797: .IP sysclock
        !           798: an integer function of no arguments returns the number of central processor
        !           799: milliseconds of system time used by this process.
        !           800: .IP undefined(x) 
        !           801: a Boolean function.
        !           802: Its argument is a real number and
        !           803: it always returns false.
        !           804: .IP wallclock 
        !           805: an integer function of no arguments returns the time
        !           806: in seconds since 00:00:00 GMT January 1, 1970.
        !           807: .NH 2
        !           808: Remarks on standard and portable Pascal
        !           809: .PP
        !           810: It is occasionally desirable to prepare Pascal programs which will be
        !           811: acceptable at other Pascal installations.
        !           812: While certain system dependencies are bound to creep in,
        !           813: judicious design and programming practice can usually eliminate
        !           814: most of the non-portable usages.
        !           815: Wirth's
        !           816: .I "Pascal Report"
        !           817: concludes with a standard for implementation and program exchange.
        !           818: .PP
        !           819: In particular, the following differences may cause trouble when attempting
        !           820: to transport programs between this implementation and Pascal 6000\-3.4.
        !           821: Using the
        !           822: .B s
        !           823: translator option may serve to indicate many problem areas.\*(dg
        !           824: .FS
        !           825: \*(dgThe
        !           826: .B s
        !           827: option does not, however, check that identifiers differ
        !           828: in the first 8 characters.
        !           829: .I Pi
        !           830: and
        !           831: .PC
        !           832: also do not check the semantics of
        !           833: .B packed .
        !           834: .FE
        !           835: .SH
        !           836: Features not available in Berkeley Pascal
        !           837: .IP
        !           838: Segmented files and associated functions and procedures.
        !           839: .IP
        !           840: The function
        !           841: .I trunc 
        !           842: with two arguments.
        !           843: .IP
        !           844: Arrays whose indices exceed the capacity of 16 bit arithmetic.
        !           845: .SH
        !           846: Features available in Berkeley Pascal but not in Pascal 6000-3.4
        !           847: .IP
        !           848: The procedures
        !           849: .I  reset 
        !           850: and
        !           851: .I  rewrite 
        !           852: with file names.
        !           853: .IP
        !           854: The functions
        !           855: .I argc,
        !           856: .I seed,
        !           857: .I sysclock,
        !           858: and
        !           859: .I wallclock.
        !           860: .IP
        !           861: The procedures
        !           862: .I argv,
        !           863: .I flush,
        !           864: and
        !           865: .I remove.
        !           866: .IP
        !           867: .I Message
        !           868: with arguments other than character strings.
        !           869: .IP
        !           870: .I Write
        !           871: with keyword
        !           872: .B hex .
        !           873: .IP
        !           874: The
        !           875: .B assert
        !           876: statement.
        !           877: .IP
        !           878: Reading and writing of enumerated types.
        !           879: .IP
        !           880: Allowing functions to return structures.
        !           881: .IP
        !           882: Separate compilation of programs.
        !           883: .IP
        !           884: Comparison of records.
        !           885: .SH
        !           886: Other problem areas
        !           887: .PP
        !           888: Sets and strings are more general in \*
        !           889: .UP ;
        !           890: see the restrictions given in
        !           891: the 
        !           892: Jensen-Wirth
        !           893: .I "User Manual"
        !           894: for details on the 6000\-3.4 restrictions.
        !           895: .PP
        !           896: The character set differences may cause problems,
        !           897: especially the use of the function
        !           898: .I chr,
        !           899: characters as arguments to
        !           900: .I ord,
        !           901: and comparisons of characters,
        !           902: since the character set ordering
        !           903: differs between the two machines.
        !           904: .PP
        !           905: The Pascal 6000\-3.4 compiler uses a less strict notion of type equivalence.
        !           906: In
        !           907: .UP ,
        !           908: types are considered identical only if they are represented
        !           909: by the same type identifier.
        !           910: Thus, in particular, unnamed types are unique
        !           911: to the variables/fields declared with them.
        !           912: .PP
        !           913: Pascal 6000\-3.4 doesn't recognize our option
        !           914: flags, so it is wise to
        !           915: put the control of
        !           916: .UP
        !           917: options to the end of option lists or, better
        !           918: yet, restrict the option list length to one.
        !           919: .PP
        !           920: For Pascal 6000\-3.4 the ordering of files in the program statement has
        !           921: significance.
        !           922: It is desirable to place
        !           923: .I input 
        !           924: and
        !           925: .I output 
        !           926: as the first two files in the
        !           927: .B program
        !           928: statement.
        !           929: .sp 2
        !           930: .SH
        !           931: Acknowledgments
        !           932: .PP
        !           933: The financial support of William Joy and Susan Graham by
        !           934: the National Science Foundation under grants
        !           935: MCS74-07644-A04, MCS78-07291, and MCS80-05144,
        !           936: and the William Joy by an
        !           937: .SM IBM
        !           938: Graduate Fellowship are gratefully acknowledged.

unix.superglobalmegacorp.com

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