Annotation of 43BSDReno/share/doc/ps1/04.pascal/puman5.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: .\"    @(#)puman5.n    6.2 (Berkeley) 5/7/86
                      6: .\"
                      7: .if !\n(xx \{\
                      8: .so tmac.p \}
                      9: .ND
                     10: .nr H1 4
                     11: .NH
                     12: Details on the components of the system
                     13: .NH 2
                     14: Options
                     15: .PP
                     16: The programs
                     17: .PI ,
                     18: .PC ,
                     19: and
                     20: .XP
                     21: take a number of options.\*(dg
                     22: .FS
                     23: \*(dgAs
                     24: .IX
                     25: uses
                     26: .PI
                     27: to translate Pascal programs,
                     28: it takes the options of
                     29: .PI
                     30: also.
                     31: We refer to them here, however, as
                     32: .PI
                     33: options.
                     34: .FE
                     35: There is a standard
                     36: .UX
                     37: convention for passing options to programs on the command line,
                     38: and this convention is followed by the
                     39: .UP
                     40: system programs.
                     41: As we saw in the examples above,
                     42: option related arguments consisted of the character `\-' followed
                     43: by a single character option name.
                     44: .PP
                     45: Except for the
                     46: .B b
                     47: option
                     48: which takes a single digit value,
                     49: each option may be set on (enabled)
                     50: or off (disabled.)
                     51: When an on/off valued option appears on the command line of
                     52: .PI
                     53: or
                     54: .PX
                     55: it inverts the default setting of that option.
                     56: Thus
                     57: .LS
                     58: % \*bpi -l foo.p\fR
                     59: .LE
                     60: enables the listing option
                     61: .B l ,
                     62: since it defaults off, while
                     63: .LS
                     64: % \*bpi -t foo.p\fR
                     65: .LE
                     66: disables the run time tests option
                     67: .B t ,
                     68: since it defaults on.
                     69: .PP
                     70: In additon to inverting the default settings of
                     71: .PI
                     72: options on the command line, it is also possible to control the
                     73: .PI
                     74: options 
                     75: within the body of the program by using comments of a special
                     76: form illustrated by
                     77: .LS
                     78: {$l-}
                     79: .LE
                     80: .PP
                     81: Here we see that the opening comment delimiter (which could also be a `(*')
                     82: is immediately followed by the character `$'.
                     83: After this `$', which signals the start of the option list,
                     84: we can place a sequence of letters and option controls, separated by `,'
                     85: characters\*(dd.
                     86: .FS
                     87: \*(ddThis format was chosen because it is used by Pascal 6000-3.4.
                     88: In general the options common to both implementations are controlled
                     89: in the same way so that comment control in options is mostly
                     90: portable.
                     91: It is recommended, however, that only one control be put per comment for
                     92: maximum portability, as the Pascal 6000-3.4
                     93: implementation will ignore controls
                     94: after the first one which it does not recognize.
                     95: .FE
                     96: The most basic actions for options are to set them, thus
                     97: .LS
                     98: {$l+ Enable listing}
                     99: .LE
                    100: or to clear them
                    101: .LS
                    102: {$t-,p- No run-time tests, no post mortem analysis}
                    103: .LE
                    104: Notice that `+' always enables an option and `\-' always disables it,
                    105: no matter what the default is.
                    106: Thus `\-' has a different meaning in an option comment than it has on the
                    107: command line.
                    108: As shown in the examples,
                    109: normal comment text may follow the option list.
                    110: .NH 2
                    111: Options common to Pi, Pc, and Pix
                    112: .PP
                    113: The following options are common to both the compiler
                    114: and the interpreter.
                    115: With each option we give its default setting,
                    116: the setting it would have if it appeared on the command line,
                    117: and a sample command using the option.
                    118: Most options are on/off valued,
                    119: with the
                    120: .B b
                    121: option
                    122: taking a single digit value.
                    123: .SH
                    124: Buffering of the file output \- b
                    125: .PP
                    126: The
                    127: .B b
                    128: option controls the buffering of the file
                    129: .I output .
                    130: The default is line buffering, with flushing at
                    131: each reference to the file
                    132: .I input
                    133: and under certain other circumstances detailed in section 5
                    134: below.
                    135: Mentioning
                    136: .B b
                    137: on the command line, e.g.
                    138: .LS
                    139: % \*bpi -b assembler.p\fR
                    140: .LE
                    141: causes standard output to be block buffered,
                    142: where a block is some system\-defined number of characters.
                    143: The
                    144: .B b
                    145: option may also be controlled in comments.
                    146: It, unique among the
                    147: .UP
                    148: options,
                    149: takes a single digit value rather than an on or off setting.
                    150: A value of 0, e.g.
                    151: .LS
                    152:        {$b0}
                    153: .LE
                    154: causes the file
                    155: .I output
                    156: to be unbuffered.
                    157: Any value 2 or greater causes block buffering and is equivalent
                    158: to the flag on the command line.
                    159: The option control comment setting
                    160: .B b
                    161: must precede the
                    162: .B program
                    163: statement.
                    164: .SH
                    165: Include file listing \- i
                    166: .PP
                    167: The
                    168: .B i
                    169: option takes the name of an
                    170: .B include
                    171: file,
                    172: .B procedure
                    173: or
                    174: .B function
                    175: name and causes it
                    176: to be listed while translating\*(dg.
                    177: .FS
                    178: \*(dg\*bInclude\fR files are discussed in section 5.9.
                    179: .FE
                    180: Typical uses would be
                    181: .LS
                    182: % \*bpix -i scanner.i compiler.p\fR
                    183: .LE
                    184: to make a listing of the routines in the file scanner.i, and
                    185: .LS
                    186: % \*bpix -i scanner compiler.p\fR
                    187: .LE
                    188: to make a listing of only the routine
                    189: .I scanner .
                    190: This option is especially useful for conservation-minded programmers making
                    191: partial program listings.
                    192: .SH
                    193: Make a listing \- l
                    194: .PP
                    195: The
                    196: .B l
                    197: option enables a listing of the program.
                    198: The
                    199: .B l
                    200: option defaults off.
                    201: When specified on the command line, it causes
                    202: a header line identifying the version of the translator in use
                    203: and a line giving the modification time of the file being translated
                    204: to appear before the actual program listing.
                    205: The
                    206: .B l
                    207: option is pushed and popped by the
                    208: .B i
                    209: option at appropriate points in the program.
                    210: .SH
                    211: Standard Pascal only \- s
                    212: .PP
                    213: The
                    214: .B s
                    215: option causes many of the features of the
                    216: .SM UNIX
                    217: implementation which are not found in standard Pascal
                    218: to be diagnosed as `s' warning errors.
                    219: This option defaults off and is enabled when mentioned on the command line.
                    220: Some of the features which are diagnosed are:
                    221: non-standard
                    222: .B procedure s
                    223: and
                    224: .B function s,
                    225: extensions to the
                    226: .B procedure
                    227: .I write ,
                    228: and the padding of constant strings with blanks.
                    229: In addition, all letters are mapped to lower case except in
                    230: strings and characters so that the case of keywords and identifiers
                    231: is effectively ignored.
                    232: The
                    233: .B s
                    234: option is most useful when a program is to be transported, thus
                    235: .LS
                    236: % \*bpi -s isitstd.p\fR
                    237: .LE
                    238: will produce warnings unless the program meets the standard.
                    239: .SH
                    240: Runtime tests \- t and C
                    241: .PP
                    242: These
                    243: options control the generation of tests that subrange variable
                    244: values are within bounds at run time.
                    245: .PI
                    246: defaults to generating tests and uses the option
                    247: .B t
                    248: to disable them.
                    249: .PC
                    250: defaults to not generating tests,
                    251: and uses the option
                    252: .B C
                    253: to enable them.
                    254: Disabling runtime tests also causes
                    255: .B assert
                    256: statements to be treated as comments.\*(dd
                    257: .FS
                    258: \*(ddSee section A.1 for a description of
                    259: .B assert
                    260: statements.
                    261: .FE
                    262: .SH
                    263: Suppress warning diagnostics \- w
                    264: .PP
                    265: The
                    266: .B w
                    267: option, which defaults on,
                    268: allows the translator to print a number of warnings about inconsistencies
                    269: it finds in the input program.
                    270: Turning this option off with a comment of the form
                    271: .LS
                    272: {$w-}
                    273: .LE
                    274: or on the command line
                    275: .LS
                    276: % \*bpi -w tryme.p\fR
                    277: .LE
                    278: suppresses these usually useful diagnostics.
                    279: .SH
                    280: Generate counters for a pxp execution profile \- z
                    281: .PP
                    282: The
                    283: .B z
                    284: option, which defaults off,
                    285: enables the production of execution profiles.
                    286: By specifying
                    287: .B z
                    288: on the command line, i.e.
                    289: .LS
                    290: % \*bpi -z foo.p\fR
                    291: .LE
                    292: or by enabling it in a comment before the
                    293: .B program
                    294: statement causes
                    295: .PI
                    296: and
                    297: .PC
                    298: to insert operations in the interpreter code to
                    299: count the number of times each statement was executed.
                    300: An example of using
                    301: .XP
                    302: was given in section 2.6;
                    303: its options are described in section 5.6.
                    304: Note that the
                    305: .B z
                    306: option cannot be used on separately compiled programs.
                    307: .NH 2
                    308: Options available in Pi
                    309: .SH
                    310: Post-mortem dump \- p
                    311: .PP
                    312: The
                    313: .B p
                    314: option defaults on,
                    315: and causes the runtime system to initiate a post-mortem
                    316: backtrace when an error occurs.
                    317: It also cause
                    318: .X
                    319: to count statements in the executing program,
                    320: enforcing a statement limit to prevent infinite loops.
                    321: Specifying
                    322: .B p
                    323: on the command line disables these checks and the ability
                    324: to give this post-mortem analysis.
                    325: It does make smaller and faster programs, however.
                    326: It is also possible to control the
                    327: .B p
                    328: option in comments.
                    329: To prevent the post-mortem backtrace on error,
                    330: .B p
                    331: must be off at the end of the
                    332: .B program
                    333: statement.
                    334: Thus, the Pascal cross-reference program was translated with
                    335: .LS
                    336: % \*bpi -pbt pxref.p\fR
                    337: .LE
                    338: .NH 2
                    339: Options available in Px
                    340: .PP
                    341: The first argument to
                    342: .X
                    343: is the name of the file containing the program to be interpreted.
                    344: If no arguments are given, then the file
                    345: .I obj
                    346: is executed.
                    347: If more arguments are given, they are available to the Pascal
                    348: program by using the built-ins
                    349: .I argc
                    350: and
                    351: .I argv
                    352: as described in section 4.6.
                    353: .ne 7
                    354: .PP
                    355: .I Px
                    356: may also be invoked automatically.
                    357: In this case, whenever a Pascal object file name is given as a command,
                    358: the command will be executed with
                    359: .X
                    360: prepended to it; that is
                    361: .LS
                    362: % \*bobj primes\fR
                    363: .LE
                    364: will be converted to read
                    365: .LS
                    366: % \*bpx obj primes\fR
                    367: .LE
                    368: .NH 2
                    369: Options available in Pc
                    370: .SH
                    371: Generate assembly language \- S
                    372: .PP
                    373: The program is compiled and the assembly language
                    374: output is left in file appended .s.
                    375: Thus
                    376: .LS
                    377: % \*bpc -S foo.p\fR
                    378: .LE
                    379: creates a file
                    380: .I foo.s .
                    381: No executable file is created.
                    382: .SH
                    383: Symbolic Debugger Information \- g
                    384: .PP
                    385: The
                    386: .B g
                    387: option causes the compiler to generate information
                    388: needed by
                    389: .I sdb (1)
                    390: the symbolic debugger.
                    391: For a complete description of
                    392: .I sdb
                    393: see Volume 2c of the
                    394: .UX
                    395: Reference Manual.
                    396: .SH
                    397: Redirect the output file \- o
                    398: .PP
                    399: The
                    400: .I name
                    401: argument after the
                    402: .B -o
                    403: is used as the name of the output file instead of
                    404: .I a.out .
                    405: Its typical use is to name the compiled program using
                    406: the root of the file name.
                    407: Thus:
                    408: .LS
                    409: % \*bpc -o myprog myprog.p\fR
                    410: .LE
                    411: causes the compiled program to be called
                    412: .I myprog .
                    413: .SH
                    414: Generate counters for a \*iprof\fP execution profile \- p
                    415: .PP
                    416: The compiler produces code which counts the number of times each
                    417: routine is called.
                    418: The profiling is based on a periodic sample taken by the
                    419: system rather than by inline counters used by
                    420: .XP .
                    421: This results in less degradation in execution,
                    422: at somewhat of a loss in accuracy.
                    423: See
                    424: .I prof (1)
                    425: for a more complete description.
                    426: .SH
                    427: Run the object code optimizer \- O
                    428: .PP
                    429: The output of the compiler is run through
                    430: the object code optimizer.
                    431: This provides an increase in compile time in
                    432: exchange for a decrease in compiled code size
                    433: and execution time.
                    434: .NH 2
                    435: Options available in Pxp
                    436: .PP
                    437: .I Pxp
                    438: takes, on its command line, a list of options followed by the program file
                    439: name, which must end in `.p' as it must for
                    440: .PI ,
                    441: .PC ,
                    442: and
                    443: .IX .
                    444: .I Pxp
                    445: will produce an execution profile if any of the
                    446: .B z ,
                    447: .B t
                    448: or
                    449: .B c
                    450: options is specified on the command line.
                    451: If none of these options is specified, then
                    452: .XP
                    453: functions as a program reformatter.
                    454: .PP
                    455: It is important to note that only the
                    456: .B z
                    457: and
                    458: .B w
                    459: options of
                    460: .XP ,
                    461: which are common to
                    462: .PI ,
                    463: .PC ,
                    464: and
                    465: .XP
                    466: can be controlled in comments.
                    467: All other options must be specified on the command line to have any effect.
                    468: .PP
                    469: The following options are relevant to profiling with
                    470: .XP :
                    471: .SH
                    472: Include the bodies of all routines in the profile \- a
                    473: .PP
                    474: .I Pxp
                    475: normally suppresses printing the bodies of routines
                    476: which were never executed, to make the profile more compact.
                    477: This option forces all routine bodies to be printed.
                    478: .SH
                    479: Suppress declaration parts from a profile \- d
                    480: .PP
                    481: Normally a profile includes declaration parts.
                    482: Specifying
                    483: .B d
                    484: on the command line suppresses declaration parts.
                    485: .SH
                    486: Eliminate include directives \- e
                    487: .PP
                    488: Normally,
                    489: .XP
                    490: preserves
                    491: .B include
                    492: directives to the output when reformatting a program,
                    493: as though they were comments.
                    494: Specifying
                    495: .B \-e
                    496: causes the contents of the specified files to be reformatted
                    497: into the output stream instead.
                    498: This is an easy way to eliminate
                    499: .B include
                    500: directives, e.g. before transporting a program.
                    501: .SH
                    502: Fully parenthesize expressions \- f
                    503: .PP
                    504: Normally
                    505: .XP
                    506: prints expressions with the minimal parenthesization necessary to
                    507: preserve the structure of the input.
                    508: This option causes
                    509: .I pxp
                    510: to fully parenthesize expressions.
                    511: Thus the statement which prints as
                    512: .LS
                    513: d := a + b mod c / e
                    514: .LE
                    515: with minimal parenthesization, the default, will print as
                    516: .LS
                    517: d := a + ((b mod c) / e)
                    518: .LE
                    519: with the
                    520: .B f
                    521: option specified on the command line.
                    522: .SH
                    523: Left justify all procedures and functions \- j
                    524: .PP
                    525: Normally, each
                    526: .B procedure
                    527: and
                    528: .B function
                    529: body is indented to reflect its static nesting depth.
                    530: This option prevents this nesting and can be used if the indented
                    531: output would be too wide.
                    532: .SH
                    533: Print a table summarizing procedure and function calls \- t
                    534: .PP
                    535: The
                    536: .B t
                    537: option causes
                    538: .XP
                    539: to print a table summarizing the number of calls to each
                    540: .B procedure
                    541: and
                    542: .B function
                    543: in the program.
                    544: It may be specified in combination with the
                    545: .B z
                    546: option, or separately.
                    547: .SH
                    548: Enable and control the profile \- z
                    549: .PP
                    550: The
                    551: .B z
                    552: profile option is very similar to the
                    553: .B i
                    554: listing control option of
                    555: .PI .
                    556: If
                    557: .B z
                    558: is specified on the command line, then all arguments up to the
                    559: source file argument which ends in `.p' are taken to be the names of
                    560: .B procedure s
                    561: and
                    562: .B function s
                    563: or
                    564: .B include
                    565: files which are to be profiled.
                    566: If this list is null, then the whole file is to be profiled.
                    567: A typical command for extracting a profile of part of a large program
                    568: would be
                    569: .LS
                    570: % \*bpxp -z test parser.i compiler.p\fR
                    571: .LE
                    572: This specifies that profiles of the routines in the file
                    573: .I parser.i
                    574: and the routine
                    575: .I test
                    576: are to be made.
                    577: .NH 2
                    578: Formatting programs using pxp
                    579: .PP
                    580: The program
                    581: .XP
                    582: can be used to reformat programs, by using a command of the form
                    583: .LS
                    584: % \*bpxp dirty.p > clean.p\fR
                    585: .LE
                    586: Note that since the shell creates the output file `clean.p' before
                    587: .XP
                    588: executes, so `clean.p' and `dirty.p' must not be the same file.
                    589: .PP
                    590: .I Pxp
                    591: automatically paragraphs the program, performing housekeeping
                    592: chores such as comment alignment, and
                    593: treating blank lines, lines containing exactly one blank
                    594: and lines containing only a form-feed character as though they
                    595: were comments, preserving their vertical spacing effect in the output.
                    596: .I Pxp
                    597: distinguishes between four kinds of comments:
                    598: .HP
                    599: .RS
                    600: .IP 1)
                    601: Left marginal comments, which begin in the first column of the
                    602: input line and are placed in the first column of an output line.
                    603: .IP 2)
                    604: Aligned comments, which are preceded by no input tokens on the
                    605: input line.
                    606: These are aligned in the output with the running program text.
                    607: .IP 3)
                    608: Trailing comments, which are preceded in the input line by a token with
                    609: no more than two spaces separating the token from the comment.
                    610: .IP 4)
                    611: Right marginal comments, which are preceded in the input line
                    612: by a token from which they are separated by at least three spaces or a tab.
                    613: These are aligned down the right margin of the output,
                    614: currently to the first tab stop after the 40th column from the current
                    615: ``left margin''.
                    616: .RE
                    617: .LP
                    618: Consider the following program.
                    619: .LS
                    620: % \*bcat comments.p\fR
                    621: .so comments1.p
                    622: .LE
                    623: When formatted by
                    624: .XP
                    625: the following output is produced.
                    626: .LS
                    627: % \*bpxp comments.p\fR
                    628: .so commentsout
                    629: %
                    630: .LE
                    631: The following formatting related options are currently available in
                    632: .XP .
                    633: The options
                    634: .B f
                    635: and
                    636: .B j
                    637: described in the previous section may also be of interest.
                    638: .SH
                    639: Strip comments \-s
                    640: .PP
                    641: The
                    642: .B s
                    643: option causes
                    644: .XP
                    645: to remove all comments from the input text.
                    646: .SH
                    647: Underline keywords \- \_
                    648: .PP
                    649: A command line argument of the form
                    650: .B \-\_
                    651: as in
                    652: .LS
                    653: % \*bpxp -_ dirty.p\fR
                    654: .LE
                    655: can be used to cause
                    656: .XP
                    657: to underline all keywords in the output for enhanced readability.
                    658: .SH
                    659: Specify indenting unit \- [23456789]
                    660: .PP
                    661: The normal unit which
                    662: .XP
                    663: uses to indent a structure statement level is 4 spaces.
                    664: By giving an argument of the form
                    665: \fB\-\fId\fR
                    666: with
                    667: .I d
                    668: a digit,
                    669: 2 \(<=
                    670: .I d
                    671: \(<= 9
                    672: you can specify that
                    673: .I d
                    674: spaces are to be used per level instead.
                    675: .NH 2
                    676: Pxref
                    677: .PP
                    678: The cross-reference program
                    679: .I pxref
                    680: may be used to make cross-referenced listings of Pascal
                    681: programs.
                    682: To produce a cross-reference of the program in the file
                    683: `foo.p'
                    684: one can execute the command:
                    685: .LS
                    686: % \*bpxref foo.p\fR
                    687: .LE
                    688: The cross-reference is, unfortunately, not block structured.
                    689: Full details on
                    690: .I pxref
                    691: are given in its manual section
                    692: .I pxref
                    693: (1).
                    694: .NH 2
                    695: Multi-file programs
                    696: .PP
                    697: A text inclusion facility is available with
                    698: .UP .
                    699: This facility allows the interpolation of source text from other
                    700: files into the source stream of the translator.
                    701: It can be used to divide large programs into more manageable pieces
                    702: for ease in editing, listing, and maintenance.
                    703: .PP
                    704: The
                    705: .B include
                    706: facility is based on that of the
                    707: .SM
                    708: UNIX
                    709: .NL
                    710: C compiler.
                    711: To trigger it you can place the character `#' in the first portion of
                    712: a line and then, after an arbitrary number of blanks or tabs,
                    713: the word
                    714: `include'
                    715: followed by a filename enclosed in single `\(aa' or double `"' quotation
                    716: marks.
                    717: The file name may be followed by a semicolon `;' if you wish to treat
                    718: this as a pseudo-Pascal statement.
                    719: The filenames of included files must end in `.i'.
                    720: An example of the use of included files in a main program would be:
                    721: .LS
                    722: \*bprogram\fR compiler(input, output, obj);
                    723: 
                    724: #\*binclude\fR "globals.i"
                    725: #\*binclude\fR "scanner.i"
                    726: #\*binclude\fR "parser.i"
                    727: #\*binclude\fR "semantics.i"
                    728: 
                    729: \*bbegin\fR
                    730:     { main program }
                    731: \*bend\fR.
                    732: .LE
                    733: .PP
                    734: At the point the
                    735: .B include
                    736: pseudo-statement is encountered in the input, the lines from
                    737: the included file are interpolated into the input stream.
                    738: For the purposes of translation and runtime diagnostics and
                    739: statement numbers in the listings and post-mortem backtraces,
                    740: the lines in the included file are numbered from 1.
                    741: Nested includes are possible up to 10 deep.
                    742: .PP
                    743: See the descriptions of the
                    744: .B i
                    745: option of
                    746: .PI
                    747: in section 5.2
                    748: above;
                    749: this can be used to control listing when
                    750: .B include
                    751: files are present.
                    752: .PP
                    753: When a non-trivial line is encountered in the source text after an
                    754: .B include
                    755: finishes, the
                    756: `popped' filename is printed, in the same manner as above.
                    757: .PP
                    758: For the purposes of error diagnostics when not making a listing, the filename
                    759: will be printed before each diagnostic if the current
                    760: filename has changed since the last
                    761: filename was printed.
                    762: .NH 2
                    763: Separate Compilation with Pc
                    764: .PP
                    765: A separate compilation facility is provided with the Berkeley Pascal compiler,
                    766: .PC .
                    767: This facility allows programs to be divided into a number of files and 
                    768: the pieces to be compiled individually,
                    769: to be linked together at some later time.
                    770: This is especially useful for large programs,
                    771: where small changes would otherwise require
                    772: time-consuming re-compilation of the entire program.
                    773: .PP
                    774: Normally,
                    775: .PC
                    776: expects to be given entire Pascal programs.
                    777: However, if given the
                    778: .B \-c
                    779: option on the command line, it will accept a sequence of definitions and
                    780: declarations, and compile them into a
                    781: .B .o
                    782: file, to be linked with a Pascal program at a later time.
                    783: In order that procedures and functions be available across
                    784: separately compiled files, they must be declared with the directive
                    785: .B external .
                    786: This directive is similar to the directive
                    787: .B forward
                    788: in that it must precede the resolution of the function or procedure,
                    789: and formal parameters and function result types must be specified
                    790: at the
                    791: .B external
                    792: declaration and may not be specified at the resolution.
                    793: .PP
                    794: Type checking is performed across separately compiled files.
                    795: Since Pascal type defintions define unique types,
                    796: any types which are shared between separately compiled files
                    797: must be the same definition.
                    798: This seemingly impossible problem is solved using a facility similar
                    799: to the
                    800: .B include
                    801: facility discussed above.
                    802: Definitions may be placed in files with the extension
                    803: .B .h
                    804: and the files included by separately compiled files.
                    805: Each definition from a 
                    806: .B .h
                    807: file defines a unique type, and all uses of a definition from the same 
                    808: .B .h
                    809: file define the same type.
                    810: Similarly, the facility is extended to allow the definition of 
                    811: .B const s
                    812: and the declaration of
                    813: .B label s,
                    814: .B var s,
                    815: and
                    816: .B external
                    817: .B function s
                    818: and
                    819: .B procedure s.
                    820: Thus
                    821: .B procedure s
                    822: and
                    823: .B function s
                    824: which are used between separately compiled files must be declared
                    825: .B external ,
                    826: and must be so declared in a
                    827: .B .h
                    828: file included by any file which calls or resolves the 
                    829: .B function
                    830: or 
                    831: .B procedure .
                    832: Conversely,
                    833: .B function s
                    834: and
                    835: .B procedure s
                    836: declared
                    837: .B external
                    838: may only be so declared in 
                    839: .B .h
                    840: files.
                    841: These files may be included only at the outermost level,
                    842: and thus define or declare global objects.
                    843: Note that since only
                    844: .B external
                    845: .B function
                    846: and
                    847: .B procedure
                    848: declarations (and not resolutions) are allowed in
                    849: .B .h
                    850: files, statically nested
                    851: .B function s
                    852: and
                    853: .B procedure s
                    854: can not be declared
                    855: .B external .
                    856: .PP
                    857: An example of the use of included
                    858: .B .h
                    859: files in a program would be:
                    860: .LS
                    861: \*bprogram\fR compiler(input, output, obj);
                    862: 
                    863: #\*binclude\fR "globals.h"
                    864: #\*binclude\fR "scanner.h"
                    865: #\*binclude\fR "parser.h"
                    866: #\*binclude\fR "semantics.h"
                    867: 
                    868: \*bbegin\fR
                    869:     { main program }
                    870: \*bend\fR.
                    871: .LE
                    872: .PP
                    873: This might include in the main program
                    874: the definitions and declarations of all the global 
                    875: .B label s,
                    876: .B const s,
                    877: .B type s and
                    878: .B var s
                    879: from the file globals.h,
                    880: and the
                    881: .B external
                    882: .B function
                    883: and
                    884: .B procedure
                    885: declarations for each of the
                    886: separately compiled files for the scanner, parser and semantics.
                    887: The header file
                    888: .I scanner.h
                    889: would contain declarations of the form:
                    890: .LS
                    891: \*btype\fR
                    892:     token = \*brecord\fR
                    893:        { token fields }
                    894:     \*bend\fR;
                    895: 
                    896: \*bfunction\fR scan(\*bvar\fR inputfile: text): token;
                    897:     \*bexternal\fR;
                    898: .LE
                    899: .ne 15
                    900: Then the scanner might be in a separately compiled file containing:
                    901: .LS
                    902: #\*binclude\fR "globals.h"
                    903: #\*binclude\fR "scanner.h"
                    904: 
                    905: \*bfunction\fR scan;
                    906: \*bbegin\fR
                    907:     { scanner code }
                    908: \*bend\fR;
                    909: .LE
                    910: which includes the same global definitions and declarations
                    911: and resolves the scanner functions and procedures declared
                    912: .B external
                    913: in the file scanner.h.

unix.superglobalmegacorp.com

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