home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 2 / FFMCD02.bin / new / dev / misc / p2c / src / p2c.cat < prev    next >
Text File  |  1993-12-21  |  84KB  |  1,365 lines

  1.  
  2.  
  3.  
  4.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  5.  
  6.  
  7.  
  8.      NNNNAAAAMMMMEEEE
  9.           p2c - Pascal to C translator, version 1.20
  10.  
  11.      SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.           pppp2222cccc [ options ] [ file [ module ] ]
  13.  
  14.      DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  15.           _P_2_c is a tool for translating Pascal programs into C.  The
  16.           input consists of a set of source files in any of the
  17.           following Pascal dialects: HP Pascal, Turbo/UCSD Pascal, DEC
  18.           VAX Pascal, Oregon Software Pascal/2, Macintosh Programmer's
  19.           Workshop Pascal, Sun/Berkeley Pascal.  Modula-2 syntax is
  20.           also supported.  Output is a set of ....cccc and ....hhhh files that
  21.           comprise an equivalent program in any of several dialects of
  22.           C.  Output code may be kept machine- and dialect-
  23.           independent, or it may be targeted to a specific machine and
  24.           compiler.  Most reasonable Pascal programs are converted
  25.           into fully functional C which will compile and run with no
  26.           further modifications, although _p_2_c sometimes chooses to
  27.           generate readable code at the expense of absolute
  28.           generality. _P_2_c endeavors to insert notes and warning
  29.           messages into the output code to point out areas which may
  30.           require human intervention.  Output code is arranged to be
  31.           readable and efficient, and to make use of C idioms wherever
  32.           possible.  The main goal of the translation is to produce C
  33.           files which are pleasant and "natural" enough to be
  34.           acceptable as the new source files for a program.  In a
  35.           pinch, _p_2_c will also serve as an ad hoc Pascal compiler.
  36.  
  37.           Code generated by _p_2_c normally does not assume characters
  38.           are signed or unsigned.  Also, it assumes iiiinnnntttt is the same as
  39.           either sssshhhhoooorrrrtttt or lllloooonnnngggg but does not depend on which.  However,
  40.           if iiiinnnntttt is not the same as lllloooonnnngggg it is best to use a modern C
  41.           compiler which supports prototypes.  Generated code does not
  42.           require an ANSI-compatible compiler (unless ANSI-style code
  43.           is requested), but it does use various ANSI-standard library
  44.           routines.
  45.  
  46.           All generated code includes the file <_p_2_c/_p_2_c._h> which in
  47.           turn includes <_s_t_d_i_o._h> and various other common resources.
  48.           Also, many translated programs will need to be linked with
  49.           the run-time library, typically -_l_p_2_c.
  50.  
  51.           Given a file name, _p_2_c reads from the specified file and
  52.           outputs to a file with a ....cccc suffix added or substituted.
  53.           For example,
  54.  
  55.                p2c myfile.pas
  56.  
  57.           reads from _m_y_f_i_l_e._p_a_s to produce the file _m_y_f_i_l_e._c. The
  58.           input file may contain a Pascal main program or a single
  59.           Pascal module (or "unit" in Turbo and UCSD Pascal
  60.  
  61.  
  62.  
  63.                                    - 1 - Formatted:  February 28, 1991
  64.  
  65.  
  66.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  67.  
  68.  
  69.  
  70.           nomenclature), or it may just contain a number of procedures
  71.           and declarations.  _P_2_c is designed to work for correct input
  72.           programs.  That is, it will accept partial programs but may
  73.           occasionally core dump if the input refers to undefined
  74.           symbols.
  75.  
  76.           If the input is a module, the translator will also produce a
  77.           file _m_o_d_u_l_e....hhhh containing a translation of the module's
  78.           interface section.  The implementation section may be
  79.           omitted in which case only the ....hhhh file will be interesting.
  80.           If the program or module has include files, these may cause
  81.           additional ....cccc files to be generated depending on the value
  82.           of the EEEExxxxppppaaaannnnddddIIIInnnncccclllluuuuddddeeeessss option (see below).
  83.  
  84.           If no file name is given, _p_2_c reads Pascal from the standard
  85.           input and writes the resulting C to standard output (though
  86.           a ....hhhh file may still be produced).  If a file name and module
  87.           name are given, the file may include several modules (or
  88.           units).  The specified module is translated; any others are
  89.           skipped.  The output files will be named _m_o_d_u_l_e....cccc and
  90.           _m_o_d_u_l_e....hhhh.  _P_2_c never translates more than one module per
  91.           run.
  92.  
  93.           Before starting, _p_2_c reads the file /_u_s_r/_l_i_b/_p_2_c/_p_2_c_r_c for a
  94.           number of configuration parameters.  (The actual path used
  95.           on your system may vary.  The ----iiii option is a handy way to
  96.           examine this file.) If the P2CRC environment variable is
  97.           set, it gives the name of a file to read instead of the
  98.           system file; this file can start with IIIInnnncccclllluuuuddddeeee %%%%HHHH////pppp2222ccccrrrrcccc to
  99.           include the system file.  Next, _p_2_c attempts to read the
  100.           file _p_2_c_r_c in your directory for further configuration.  If
  101.           this file does not exist, _p_2_c looks for ._p_2_c_r_c instead.
  102.  
  103.      OOOOPPPPTTTTIIIIOOOONNNNSSSS
  104.           ----oooo _c_f_i_l_e
  105.                Use _c_f_i_l_e in place of _f_i_l_e....cccc or _m_o_d_u_l_e....cccc as the primary
  106.                output file.  A single dash (`-o -') says to write the
  107.                C code to the standard output.
  108.  
  109.           ----hhhh _h_f_i_l_e
  110.                Use _h_f_i_l_e in place of _m_o_d_u_l_e....hhhh as the output file for
  111.                interface text.  This only has effect if the input is
  112.                an HP Pascal module or a Turbo Pascal unit.
  113.  
  114.           ----ssss _s_f_i_l_e
  115.                Read interface text from _s_f_i_l_e before beginning the
  116.                translation.  This file typically contains one or more
  117.                modules, often with interface sections omitted for
  118.                speed, which the program or module being translated
  119.                will use.  (Typically the IIIImmmmppppoooorrrrttttFFFFrrrroooommmm and IIIImmmmppppoooorrrrttttDDDDiiiirrrr
  120.                parameters in _p_2_c_r_c are set up to allow _p_2_c to locate
  121.                interface text without needing any ----ssss options.)  If
  122.  
  123.  
  124.  
  125.                                    - 2 - Formatted:  February 28, 1991
  126.  
  127.  
  128.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  129.  
  130.  
  131.  
  132.                there are several ----ssss options in the command, the _s_f_i_l_e_s
  133.                are read from left to right.
  134.  
  135.           ----pppp_n  Display progress of translation in the form of a line
  136.                number/file name display.  This is refreshed every _n
  137.                lines, 25 by default.
  138.  
  139.           ----cccc _r_c_f_i_l_e
  140.                Read local configuration commands from _r_c_f_i_l_e instead
  141.                of _p_2_c_r_c or ._p_2_c_r_c. A dash (`-c -') in place of _r_c_f_i_l_e
  142.                causes no local configuration file to be used.
  143.  
  144.           ----vvvv   ("Vanilla.")  Do not read from the system configuration
  145.                file /_u_s_r/_l_i_b/_p_2_c/_p_2_c_r_c. Since some of the parameters
  146.                in this file are required, your local configuration
  147.                file must include those parameters instead.  This also
  148.                suppresses the file named by the P2CRC environment
  149.                variable.
  150.  
  151.           ----HHHH _h_o_m_e_d_i_r
  152.                Use _h_o_m_e_d_i_r instead of /_u_s_r/_l_i_b/_p_2_c as the _p_2_c home
  153.                directory.  The system _p_2_c_r_c file will be searched for
  154.                in this directory.
  155.  
  156.           ----IIII_p_a_t_t_e_r_n
  157.                Add _p_a_t_t_e_r_n to the IIIImmmmppppoooorrrrttttDDDDiiiirrrr search list of places to
  158.                find modules which are imported.  The pattern should
  159.                include a %_s to represent the module name, and should
  160.                evaluate to a potential file name for that module's
  161.                source code.  For example, ........////%%%%ssss....ppppaaaassss looks for
  162.                _m_o_d_u_l_e_n_a_m_e....ppppaaaassss in the parent of the current directory.
  163.  
  164.           ----iiii   This special option (which must be the only argument on
  165.                the command line if used) simply copies the system
  166.                configuration file /_u_s_r/_l_i_b/_p_2_c/_p_2_c_r_c to the standard
  167.                output in its entirety.  (It may be used with ----HHHH, but
  168.                ----iiii is most useful precisely when you don't know the
  169.                location of the home directory.)
  170.  
  171.           ----qqqq   Quiet mode.  Suppresses output of status messages
  172.                during translation.
  173.  
  174.           ----EEEE_n  Abort translation after _n errors.  If _n is omitted it
  175.                defaults to zero, which means unlimited errors are
  176.                allowed.  Use ----EEEE1111 to make _p_2_c halt after the first
  177.                error.
  178.  
  179.           ----eeee   Echo the Pascal source into the output file, surrounded
  180.                by #ifdefs.  This is the same as the CCCCooooppppyyyySSSSoooouuuurrrrcccceeee
  181.                parameter in the _p_2_c_r_c file.
  182.  
  183.           ----aaaa   Produce modern ANSI C.  This is a convenient override
  184.  
  185.  
  186.  
  187.                                    - 3 - Formatted:  February 28, 1991
  188.  
  189.  
  190.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  191.  
  192.  
  193.  
  194.                for the AAAAnnnnssssiiiiCCCC parameter in the _p_2_c_r_c file.
  195.  
  196.           ----LLLL _l_a_n_g_u_a_g_e
  197.                Select input language name, such as VAX or TURBO.  This
  198.                is a convenient override for the LLLLaaaannnngggguuuuaaaaggggeeee parameter.
  199.  
  200.           ----VVVV   Verbose mode.  This causes _p_2_c to generate an
  201.                additional ".log" file with further details of the
  202.                translation, such as a list of warnings and notes
  203.                including those which are suppressed in the regular
  204.                output.
  205.  
  206.           ----MMMM0000  Disable memory conservation.  This prevents _p_2_c from
  207.                freeing various data structures after translating each
  208.                function, in case this new conservation feature causes
  209.                unforseen problems.
  210.  
  211.           ----RRRR   Regression testing mode.  Formats notes and warning
  212.                messages in a way that makes it easier to run _d_i_f_f(1)
  213.                on the output of _p_2_c.
  214.  
  215.           _P_2_c also understands a few debugging options which may
  216.           occasionally be useful when tracking down translation
  217.           problems.  The ----dddd_n option sets the "debug level" to _n, a
  218.           small integer which is normally zero.  Debugging output is
  219.           written into the regular output file along with the C code;
  220.           the higher your _n, the more "wallpaper" you get.  Also, ----tttt
  221.           prints debugging information at every Pascal token, ----BBBB_n
  222.           enables line-breaker debugging, and ----CCCC_n enables comment
  223.           placement debugging.
  224.  
  225.      CCCCHHHHOOOOIIIICCCCEEEE OOOOFFFF SSSSOOOOUUUURRRRCCCCEEEE LLLLAAAANNNNGGGGUUUUAAAAGGGGEEEE
  226.           The LLLLaaaannnngggguuuuaaaaggggeeee configuration parameter or ----LLLL command-line
  227.           option tells _p_2_c which Pascal dialect to expect in the input
  228.           file.  Any language features which do not overlap between
  229.           dialects are supported all of the time.  The LLLLaaaannnngggguuuuaaaaggggeeee
  230.           parameter is consulted when a syntax or usage is detected
  231.           that has different meanings in two different dialects, and
  232.           also to determine default values for various other
  233.           translation parameters as described below.
  234.  
  235.           The following language words are supported by _p_2_c. Names are
  236.           case-insensitive.
  237.  
  238.           HHHHPPPP      HP Pascal.  This is the default language.  All
  239.                   features of HP Standard Pascal, the Pascal
  240.                   Workstation version, are supported except as noted
  241.                   in BUGS below.  Some features of MODCAL, HP's
  242.                   extended Pascal, are also supported.  This is a
  243.                   superset of ISO standard Pascal, including
  244.                   conformant arrays and procedural parameters.
  245.  
  246.  
  247.  
  248.  
  249.                                    - 4 - Formatted:  February 28, 1991
  250.  
  251.  
  252.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  253.  
  254.  
  255.  
  256.           HHHHPPPP----UUUUXXXX   HP Pascal, HP-UX version.  Almost identical to the
  257.                   "HP" dialect.
  258.  
  259.           TTTTuuuurrrrbbbboooo   Turbo Pascal 5.0 for the IBM PC.  Few conflicts with
  260.                   HP Pascal, so the LLLLaaaannnngggguuuuaaaaggggeeee parameter is not often
  261.                   needed for Turbo.  (Most important is that the Turbo
  262.                   and HP dialects use 16 and 32 bit integers,
  263.                   respectively.)
  264.  
  265.           UUUUCCCCSSSSDDDD    UCSD Pascal.  Similar to Turbo in many ways.
  266.  
  267.           MMMMPPPPWWWW     Macintosh Programmer's Workshop Pascal 2.0.  Should
  268.                   also do a pretty good job for Lightspeed Pascal.
  269.                   Object Pascal features are not supported, nor is the
  270.                   fact that cccchhhhaaaarrrr variables are sometimes stored in 16
  271.                   bits.
  272.  
  273.           VVVVAAAAXXXX     VAX/VMS Pascal version 3.5.  Most but not all
  274.                   language features supported.  This has not yet been
  275.                   tested on large programs.
  276.  
  277.           OOOOrrrreeeeggggoooonnnn  Oregon Software Pascal/2.  All features implemented.
  278.  
  279.           BBBBeeeerrrrkkkk    Berkeley Pascal with Sun extensions.
  280.  
  281.           MMMMoooodddduuuullllaaaa  Modula-2.  Based on Wirth's _P_r_o_g_r_a_m_m_i_n_g _i_n _M_o_d_u_l_a-_2,
  282.                   3rd edition.  Proper setting of the LLLLaaaannnngggguuuuaaaaggggeeee
  283.                   parameter is _n_o_t optional.  Translation will be
  284.                   incomplete in most cases, but should be good enough
  285.                   to work with.  Structure of local sub-modules is
  286.                   essentially ignored; like-named identifiers may be
  287.                   confused.  Type WORD is translated as an integer,
  288.                   but type ADDRESS is translated as char * or void *;
  289.                   this may cause inconsistencies in the output code.
  290.  
  291.                   Modula-2 modules have two parts in separate files.
  292.                   Suppose these are called _f_o_o._d_e_f (definition part)
  293.                   and _f_o_o._m_o_d (implementation part) for module _f_o_o.
  294.                   Then a pattern like %%%%ssss....ddddeeeeffff must be included in the
  295.                   IIIImmmmppppoooorrrrttttDDDDiiiirrrr list, and LLLLiiiibbbbrrrraaaarrrryyyyFFFFiiiilllleeee must be changed to
  296.                   refer to _s_y_s_t_e_m._m_2 instead of _s_y_s_t_e_m._i_m_p. To
  297.                   translate the definition part, give the command
  298.  
  299.                        p2c foo.def
  300.  
  301.                   to translate the definition part into files _f_o_o._h
  302.                   and _f_o_o._c; the latter will usually be empty.  The
  303.                   command
  304.  
  305.                        p2c -s foo.def foo.mod
  306.  
  307.                   will translate the implementation part into file
  308.  
  309.  
  310.  
  311.                                    - 5 - Formatted:  February 28, 1991
  312.  
  313.  
  314.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  315.  
  316.  
  317.  
  318.                   _f_o_o._c.
  319.  
  320.           Even if all language features are supported for a dialect,
  321.           some predefined functions may be omitted.  In these cases,
  322.           the function call will be translated literally into C with a
  323.           warning.  Some hand modification may be required.
  324.  
  325.      CCCCOOOONNNNFFFFIIIIGGGGUUUURRRRAAAATTTTIIIIOOOONNNN PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
  326.           _P_2_c is highly configurable.  The defaults are suitable for
  327.           most applications, but customizing these parameters will
  328.           help you get the best possible translation.  Since the
  329.           output of _p_2_c is intended to be used as human-maintainable
  330.           source code, there are many parameters for describing the
  331.           coding style and conventions you prefer.  Others give hints
  332.           about your program that help _p_2_c to generate more correct,
  333.           efficient, or readable code.
  334.  
  335.           The _p_2_c_r_c files contain a list of parameters, one per line.
  336.           The system configuration file, which may be viewed using the
  337.           ----iiii option to _p_2_c, serves as an example of the proper format.
  338.           Parameter names are case-insensitive.  If a parameter name
  339.           occurs exactly once in the system _p_2_c_r_c, this indicates that
  340.           it must have a unique value and the last value given to it
  341.           by the configuration files is used.  Other parameters are
  342.           written several times in a row; these are lists to which
  343.           each configuration line adds an entry.
  344.  
  345.           Many _p_2_c_r_c options take a numeric value of 0 or 1, roughly
  346.           corresponding to "no" or "yes."  Sometimes a blank value or
  347.           the value "ddddeeeeffff" corresponds to an intermediate "maybe"
  348.           state.  For example, the stylistic option EEEExxxxttttrrrraaaaPPPPaaaarrrreeeennnnssss
  349.           switches between copious or minimal parentheses in
  350.           expressions, with the default being a nice compromise
  351.           intended to be best for readers with an average knowledge of
  352.           C operator precedences.
  353.  
  354.           Configuration options may also be embedded in the source
  355.           file in the form of Pascal comments:
  356.  
  357.                {ShortOpt=0} {AvoidName=fred}
  358.                {FuncMacro slope(x,y)=atan2(y,x)*RadDeg}
  359.  
  360.           disables automatic short-circuiting of aaaannnndddd and oooorrrr
  361.           expressions, adds "_f_r_e_d" to the list of names to avoid using
  362.           in generated C code, and defines a special translation for
  363.           the Pascal program's _s_l_o_p_e function using the standard C
  364.           _a_t_a_n_2 function and a constant _R_a_d_D_e_g presumably defined in
  365.           the program.  Whitespace is generally not allowed in
  366.           embedded parameters.  The `=' sign is required for embedded
  367.           parameters, though it is optional in _p_2_c_r_c files.  Comments
  368.           within embedded parameters are delimited by `##'.  Numeric
  369.           parameters may replace `=' with `+' or `-' to increase or
  370.  
  371.  
  372.  
  373.                                    - 6 - Formatted:  February 28, 1991
  374.  
  375.  
  376.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  377.  
  378.  
  379.  
  380.           decrease the parameter; list-based parameters may use `-' to
  381.           remove a name from a list rather than adding it.  Also, the
  382.           parameter name by itself in comment braces means to restore
  383.           the parameter's value that was current before the last
  384.           change:
  385.  
  386.                {VarFiles=0  ## Pass FILE *'s params by value even if
  387.           VAR}
  388.                _s_o_m_e _d_e_c_l_a_r_a_t_i_o_n_s
  389.                {VarFiles    ## Back to original FILE * passing}
  390.  
  391.           causes the parameter VVVVaaaarrrrFFFFiiiilllleeeessss to have the value 0 for those
  392.           few declarations, without affecting the parameter's value
  393.           elsewhere in the file.
  394.  
  395.           If an embedded parameter appears in an include file or in
  396.           interface text for a module, the effect of the assignment
  397.           normally carries over to any programs that included that
  398.           file.  If the parameter name is preceded by a `*', then the
  399.           assignment is automatically undone after the source file
  400.           that contains it ends:
  401.  
  402.                {IncludeFrom strings=<p2c/strings.h>}
  403.                {*ExportSymbol=pascal_%s}
  404.                module strings;
  405.  
  406.           will record the location of the _s_t_r_i_n_g_s module's include
  407.           file for the rest of the translation, but the assignment of
  408.           EEEExxxxppppoooorrrrttttSSSSyyyymmmmbbbboooollll pertains only to the module itself.
  409.  
  410.           For the complete list of _p_2_c_r_c parameters, run _p_2_c with the
  411.           ----iiii option.  Here are some additional comments on selected
  412.           parameters:
  413.  
  414.           IIIImmmmppppoooorrrrttttAAAAllllllll      Because Turbo Pascal only allows one unit per
  415.                          source file, _p_2_c normally stops reading past
  416.                          the word _i_m_p_l_e_m_e_n_t_a_t_i_o_n in a file being
  417.                          scanned for interface text.  But HP Pascal
  418.                          allows several modules per file and so this
  419.                          would not be safe to do.  The IIIImmmmppppoooorrrrttttAAAAllllllll
  420.                          option lets you override the default behavior
  421.                          for your Pascal dialect.
  422.  
  423.           AAAAnnnnssssiiiiCCCC          This parameter selects which dialect of C to
  424.                          use.  If 1, all conventions of ANSI C such as
  425.                          prototypes, vvvvooooiiiidddd **** pointers, etc. are used.
  426.                          If 0, only strict K&R (first edition) C is
  427.                          used.  The default is to use "traditional
  428.                          UNIX C," which includes eeeennnnuuuummmm and vvvvooooiiiidddd but not
  429.                          vvvvooooiiiidddd **** or prototypes.  Once again there are a
  430.                          number of other parameters which may be used
  431.                          to control the individual features if just
  432.  
  433.  
  434.  
  435.                                    - 7 - Formatted:  February 28, 1991
  436.  
  437.  
  438.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  439.  
  440.  
  441.  
  442.                          setting AAAAnnnnssssiiiiCCCC is not enough.
  443.  
  444.           CCCC++++++++            At present _p_2_c does not use much of C++ at
  445.                          all.  The default action is to generate code
  446.                          that will compile in either language.
  447.  
  448.           UUUUsssseeeeVVVVEEEExxxxtttteeeerrrrnnnn     Many non-UNIX linkers prohibit variables from
  449.                          being defined (not declared) by more than one
  450.                          source file.  One module must declare, e.g.,
  451.                          "int foo;", and all others must declare
  452.                          "extern int foo;".  _P_2_c accomplishes this by
  453.                          declaring public variables "vvvveeeexxxxtttteeeerrrrnnnn" in
  454.                          header files, and arranging for the macro
  455.                          vvvveeeexxxxtttteeeerrrrnnnn to expand to eeeexxxxtttteeeerrrrnnnn or to nothing
  456.                          when appropriate.  If you set UUUUsssseeeeVVVVEEEExxxxtttteeeerrrrnnnn=0
  457.                          _p_2_c will instead declare variables in a
  458.                          simpler way that works only on UNIX-style
  459.                          linkers.
  460.  
  461.           UUUUsssseeeeAAAAnnnnyyyyppppttttrrrrMMMMaaaaccccrrrroooossss
  462.                          Certain C reserved words have meanings which
  463.                          may vary from one C implementation to
  464.                          another.  _P_2_c uses special capitalized names
  465.                          for these words; these names are defined as
  466.                          macros in the file _p_2_c._h which all translated
  467.                          programs include.  You can set
  468.                          UUUUsssseeeeAAAAnnnnyyyyppppttttrrrrMMMMaaaaccccrrrroooossss=0 to disable the use of these
  469.                          macros.  Note that the functions of many of
  470.                          these macros can also be had directly using
  471.                          other parameters; for example, UUUUsssseeeeCCCCoooonnnnssssttttssss
  472.                          allows you to specify whether your target
  473.                          language recognizes the word ccccoooonnnnsssstttt in
  474.                          constant declarations.  The default is to use
  475.                          the CCCCoooonnnnsssstttt macro instead, so that your code
  476.                          will be portable to either kind of
  477.                          implementation.
  478.  
  479.                          SSSSiiiiggggnnnneeeedddd expands to the reserved word ssssiiiiggggnnnneeeedddd if
  480.                          that word is available, otherwise it is given
  481.                          a null definition.  Similarly, CCCCoooonnnnsssstttt expands
  482.                          to ccccoooonnnnsssstttt if that feature is available.  The
  483.                          words VVVVoooollllaaaattttiiiilllleeee and RRRReeeeggggiiiisssstttteeeerrrr are also defined
  484.                          in _p_2_c._h, although _p_2_c does not use them at
  485.                          present.  The word CCCChhhhaaaarrrr expands to cccchhhhaaaarrrr by
  486.                          default, but might need to be redefined to
  487.                          ssssiiiiggggnnnneeeedddd cccchhhhaaaarrrr or uuuunnnnssssiiiiggggnnnneeeedddd cccchhhhaaaarrrr in a particular
  488.                          implementation.  This is used for the Pascal
  489.                          character type; lowercase cccchhhhaaaarrrr is used when
  490.                          the desired meaning is "byte," not
  491.                          "character."
  492.  
  493.                          The word SSSSttttaaaattttiiiicccc always expands to ssssttttaaaattttiiiicccc by
  494.  
  495.  
  496.  
  497.                                    - 8 - Formatted:  February 28, 1991
  498.  
  499.  
  500.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  501.  
  502.  
  503.  
  504.                          default.  This is used in situations where a
  505.                          function or variable is declared static to
  506.                          make it local to the source file; lowercase
  507.                          ssssttttaaaattttiiiicccc is used for static local variables.
  508.                          Thus you can redefine SSSSttttaaaattttiiiicccc to be null if
  509.                          you want to force private names to be public
  510.                          for purposes of debugging.
  511.  
  512.                          The word VVVVooooiiiidddd expands to vvvvooooiiiidddd in all cases;
  513.                          it is used when declaring a function with no
  514.                          return value.  The word AAAAnnnnyyyyppppttttrrrr is a typedef
  515.                          for vvvvooooiiiidddd **** or cccchhhhaaaarrrr **** as necessary; it
  516.                          represents a generic pointer.
  517.  
  518.           UUUUsssseeeePPPPPPPPMMMMaaaaccccrrrroooossss    The _p_2_c._h header also declares two macros for
  519.                          function prototyping, PPPPPPPP(x) and PPPPVVVV().  These
  520.                          macros are used as follows:
  521.  
  522.                               Void foo  PP( (int x, int y, Char *z) );
  523.                               Char *bar PV( );
  524.  
  525.                          If prototypes are available, these macros
  526.                          will expand to
  527.  
  528.                               Void foo  (int x, int y, Char *z);
  529.                               Char *bar (void);
  530.  
  531.                          but if only old-style declarations are
  532.                          supported, you instead get
  533.  
  534.                               Void foo  ();
  535.                               Char *bar ();
  536.  
  537.                          By default, _p_2_c uses these macros for all
  538.                          function declarations, but function
  539.                          _d_e_f_i_n_i_t_i_o_n_s are written in old-style C.  The
  540.                          UUUUsssseeeePPPPPPPPMMMMaaaaccccrrrroooossss parameter can be set to 0 to
  541.                          disable all use of PPPPPPPP and PPPPVVVV, or it can be
  542.                          set to 1 to use the macros even when defining
  543.                          a function.  (This is accomplished by
  544.                          preceding each old-style definition with a
  545.                          PPPPPPPP-style declaration.)  If you know your code
  546.                          will always be compiled on systems that
  547.                          support prototyping, it is prettier to set
  548.                          PPPPrrrroooottttoooottttyyyyppppeeeessss=1 or simply AAAAnnnnssssiiiiCCCC=1 to get true
  549.                          function prototypes.
  550.  
  551.           EEEEaaaattttNNNNooootttteeeessss       Notes and warning messages containing any of
  552.                          these strings as sub-strings are not omitted.
  553.                          Each type of message includes an identifier
  554.                          like [[[[111144445555]]]]; you can add this identifier to
  555.                          the EEEEaaaattttNNNNooootttteeeessss list to suppress that message.
  556.  
  557.  
  558.  
  559.                                    - 9 - Formatted:  February 28, 1991
  560.  
  561.  
  562.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  563.  
  564.  
  565.  
  566.                          Another useful form is to use a variable name
  567.                          or other identifier to suppress warnings
  568.                          about that variable.  The strings are a
  569.                          space-separated list, and thus may not
  570.                          contain embedded spaces.  To suppress notes
  571.                          around a section of code, use, e.g.,
  572.                          {_E_a_t_N_o_t_e_s+[_1_4_5]} and {_E_a_t_N_o_t_e_s-[_1_4_5]}. Most
  573.                          notes are generated during parsing, but to
  574.                          suppress those generated during output the
  575.                          string may need to remain in the list far
  576.                          beyond the point where it appears to be
  577.                          generated.  Use the string "1" or "0" to
  578.                          disable or enable all notes, respectively.
  579.  
  580.           EEEExxxxppppaaaannnnddddIIIInnnncccclllluuuuddddeeeessss The default action is to expand Pascal
  581.                          include files in-line.  This may not be
  582.                          desirable if include files are being used to
  583.                          simulate modules.  With EEEExxxxppppaaaannnnddddIIIInnnncccclllluuuuddddeeeessss=0, _p_2_c
  584.                          attempts to convert include files containing
  585.                          only whole procedures and global declarations
  586.                          into analogous C include files.  This may not
  587.                          always work, though; if you get error
  588.                          messages, don't use this option.  By
  589.                          combining this option with SSSSttttaaaattttiiiiccccFFFFuuuunnnnccccttttiiiioooonnnnssss=0,
  590.                          then doing some fairly minor editing on the
  591.                          result, you can convert a pseudo-modular
  592.                          Pascal program into a truly modular
  593.                          collection of C source files.
  594.  
  595.           EEEElllliiiimmmmDDDDeeeeaaaaddddCCCCooooddddeeee   Some transformations that _p_2_c does on the
  596.                          program may result in unreachable or "dead"
  597.                          code.  By default _p_2_c removes such code, but
  598.                          sometimes it removes more than it should.  If
  599.                          you have "if false" segments which you wish
  600.                          to retain in C, you may have to set
  601.                          EEEElllliiiimmmmDDDDeeeeaaaaddddCCCCooooddddeeee=0.
  602.  
  603.           SSSSkkkkiiiippppIIIInnnnddddiiiicccceeeessss    Normally Pascal arrays not based at zero are
  604.                          "shifted" down for C, preserving the total
  605.                          size of the array.  A Pascal array a[2..10]
  606.                          is translated to a C array a[9] with
  607.                          references like "a[i]" changed to "a[i-2]"
  608.                          everywhere.  If SSSSkkkkiiiippppIIIInnnnddddiiiicccceeeessss is set to a value
  609.                          of 2 or higher, this array would instead be
  610.                          translated to a[11] with the first two
  611.                          elements never used.  This arrangement may
  612.                          generate incorrect code, though, for tricky
  613.                          source programs.
  614.  
  615.           FFFFoooollllddddCCCCoooonnnnssssttttaaaannnnttttssss  Pascal non-structured constants generally
  616.                          translate to ####ddddeeeeffffiiiinnnneeee's in C.  Set this to 1
  617.                          to have constants instantiated directly into
  618.  
  619.  
  620.  
  621.                                   - 10 - Formatted:  February 28, 1991
  622.  
  623.  
  624.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  625.  
  626.  
  627.  
  628.                          the code.  This may be turned on or off
  629.                          around specific constant declarations.  Set
  630.                          this to 0 to force _p_2_c to make absolutely no
  631.                          assumptions about the constant's value in
  632.                          generated code, so that you can change the
  633.                          constant later in the C code without
  634.                          invalidating the translation.  The default is
  635.                          to allow _p_2_c to take advantage of its
  636.                          knowledge of a constant's value, such as by
  637.                          generating code that assumes the constant is
  638.                          positive.
  639.  
  640.           CCCChhhhaaaarrrrCCCCoooonnnnssssttttssss     This governs whether single-character string
  641.                          literals in Pascal ccccoooonnnnsssstttt declarations should
  642.                          be interpreted as characters or strings.  In
  643.                          other words, _c_o_n_s_t _a='_x'; will translate to
  644.                          #_d_e_f_i_n_e _a '_x' if CCCChhhhaaaarrrrCCCCoooonnnnssssttttssss=1 (the default),
  645.                          or to #_d_e_f_i_n_e _a _x if CCCChhhhaaaarrrrCCCCoooonnnnssssttttssss=0.  Note that
  646.                          if _p_2_c guesses wrong, the generated code will
  647.                          not be wrong, just uglier.  For example, if _a
  648.                          is written as a character constant but it
  649.                          turns out to be used as a string, _p_2_c will
  650.                          have to write char-to-string conversion code
  651.                          each time the constant is used.
  652.  
  653.           VVVVaaaarrrrSSSSttttrrrriiiinnnnggggssss     In HP Pascal, a parameter of the form "var s
  654.                          : string" will match a string variable of any
  655.                          size; a hidden size parameter is passed which
  656.                          may be accessed by the Pascal _s_t_r_m_a_x
  657.                          function.  You can prevent _p_2_c from creating
  658.                          a hidden size parameter by setting
  659.                          VVVVaaaarrrrSSSSttttrrrriiiinnnngggg=0.  (Note that each function uses
  660.                          the value of VVVVaaaarrrrSSSSttttrrrriiiinnnnggggssss as of the _f_i_r_s_t
  661.                          declaration of the function that is parsed,
  662.                          which is often in the interface section of a
  663.                          module.)
  664.  
  665.           PPPPrrrroooottttoooottttyyyyppppeeeessss     Control whether ANSI C function prototypes
  666.                          are used.  Default is according to AAAAnnnnssssiiiiCCCC.
  667.                          This also controls whether to include
  668.                          parameter names or just their types in
  669.                          situations where names are optional.  The
  670.                          FFFFuuuullllllllPPPPrrrroooottttoooottttyyyyppppiiiinnnngggg parameter allows prototypes
  671.                          to be generated for declarations but not for
  672.                          definitions (older versions of Lightspeed C
  673.                          required this).  If you use a mixture of
  674.                          prototypes and old-style definitions, types
  675.                          like short and float will be promoted to int
  676.                          and double as required by the ANSI standard,
  677.                          unless PPPPrrrroooommmmooootttteeeeAAAArrrrggggssss is used to override this.
  678.                          The CCCCaaaassssttttAAAArrrrggggssss parameter controls whether
  679.                          type-casts are used in function arguments; by
  680.  
  681.  
  682.  
  683.                                   - 11 - Formatted:  February 28, 1991
  684.  
  685.  
  686.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  687.  
  688.  
  689.  
  690.                          default they are used only if prototypes are
  691.                          not available.
  692.  
  693.           SSSSttttaaaattttiiiiccccLLLLiiiinnnnkkkkssss    HP Pascal and Turbo Pascal each include the
  694.                          concept of procedure or function pointers,
  695.                          though with somewhat different syntaxes.  _P_2_c
  696.                          recognizes both notational styles.  Another
  697.                          difference is that HP's procedure pointers
  698.                          can point to nested procedures, while Turbo's
  699.                          can point only to global procedures.  In HP
  700.                          Pascal a procedure pointer must be stored as
  701.                          a ssssttttrrrruuuucccctttt containing both a pure C function
  702.                          pointer and a "static link," a pointer to the
  703.                          parent procedure's locals.  (The static link
  704.                          is NULL for global procedures.)  This
  705.                          notation can be forced by setting
  706.                          SSSSttttaaaattttiiiiccccLLLLiiiinnnnkkkkssss=1.  In Turbo, the default
  707.                          (SSSSttttaaaattttiiiiccccLLLLiiiinnnnkkkkssss=0) is to use plain C function
  708.                          pointers with no static links.  A third
  709.                          option (SSSSttttaaaattttiiiiccccLLLLiiiinnnnkkkkssss=2) uses structures with
  710.                          static links, but assumes the links are
  711.                          always NULL when calling through a pointer
  712.                          (if you need compatibility with the HP format
  713.                          but know your procedures are global).
  714.  
  715.           SSSSmmmmaaaallllllllSSSSeeeettttCCCCoooonnnnsssstttt  Pascal sets are translated into one of two
  716.                          formats, depending on the size of the set.
  717.                          If all elements have ordinal values in the
  718.                          range 0..31, the set is translated as a
  719.                          single integer variable using bit operations.
  720.                          (The SSSSeeeettttBBBBiiiittttssss parameter may be used to change
  721.                          the upper limit of 31.) The SSSSmmmmaaaallllllllSSSSeeeettttCCCCoooonnnnsssstttt
  722.                          parameter controls whether these small-sets
  723.                          are used, and, if so, how constant sets
  724.                          should be represented in C.   For larger
  725.                          sets, an array of lllloooonnnngggg is used.  The _s[0]
  726.                          element contains the number of succeeding
  727.                          array elements which are in use.  Set
  728.                          elements in the range 0..31 are stored in the
  729.                          _s[1] array element, and so on.  Sets are
  730.                          normalized so that _s[_s[0]] is nonzero for any
  731.                          nonempty set.  The standard run-time library
  732.                          includes all the necessary procedures for
  733.                          operating on sets.
  734.  
  735.           RRRReeeettttuuuurrrrnnnnVVVVaaaalllluuuueeeeNNNNaaaammmmeeee
  736.                          This is one of many "naming conventions"
  737.                          parameters.  Most of these take the form of a
  738.                          _p_r_i_n_t_f-like string containing a %_s where the
  739.                          relevant information should go.  In the case
  740.                          of RRRReeeettttuuuurrrrnnnnVVVVaaaalllluuuueeeeNNNNaaaammmmeeee, the %_s refers to a
  741.                          function name and the resulting string gives
  742.  
  743.  
  744.  
  745.                                   - 12 - Formatted:  February 28, 1991
  746.  
  747.  
  748.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  749.  
  750.  
  751.  
  752.                          the name of the variable to use to hold the
  753.                          function's return value.  Such a variable
  754.                          will be made if a function contains
  755.                          assignments to its return value buried within
  756.                          the body, so that _r_e_t_u_r_n statements cannot
  757.                          conveniently be used.  Some parameters
  758.                          (RRRReeeettttuuuurrrrnnnnVVVVaaaalllluuuueeeeNNNNaaaammmmeeee included) do not require the
  759.                          %_s to be present in the format string; for
  760.                          example, the standard _p_2_c_r_c file stores every
  761.                          function's return value in a variable called
  762.                          _R_e_s_u_l_t.
  763.  
  764.           AAAAlllltttteeeerrrrnnnnaaaatttteeeeNNNNaaaammmmeeee  _P_2_c normally translates Pascal names into C
  765.                          names verbatim, but occasionally this is not
  766.                          possible.  A Pascal name may be a C reserved
  767.                          word or traditional C name like _p_u_t_c, or
  768.                          there may be several like-named things that
  769.                          are hidden from each other by Pascal's
  770.                          scoping rules but must be global in C.  In
  771.                          these situations _p_2_c uses the parameter
  772.                          AAAAlllltttteeeerrrrnnnnaaaatttteeeeNNNNaaaammmmeeee1111 to generate an alternative
  773.                          name for the symbol.  The default is to add
  774.                          an underscore to the name.  There is also an
  775.                          AAAAlllltttteeeerrrrnnnnaaaatttteeeeNNNNaaaammmmeeee2222 parameter for a second
  776.                          alternate name, and an AAAAlllltttteeeerrrrnnnnaaaatttteeeeNNNNaaaammmmeeee
  777.                          parameter for the _nth alternate name.  (The
  778.                          value for this parameter should include both
  779.                          a %_s and a %_d, in either order.)  If these
  780.                          latter parameters are not defined, _p_2_c
  781.                          applies AAAAlllltttteeeerrrrnnnnaaaatttteeeeNNNNaaaammmmeeee1111 many times over.
  782.  
  783.           EEEExxxxppppoooorrrrttttSSSSyyyymmmmbbbboooollll   Symbols in the interface section for a Pascal
  784.                          module are formatted according to the value
  785.                          of EEEExxxxppppoooorrrrttttSSSSyyyymmmmbbbboooollll, if any.  It is not uncommon
  786.                          to use _m_o_d_u_l_e_n_a_m_e_%_s for this symbol; the
  787.                          default is %_s, i.e., no special treatment for
  788.                          exported symbols.  If you also define the
  789.                          EEEExxxxppppoooorrrrtttt____SSSSyyyymmmmbbbboooollll parameter, that format is used
  790.                          instead for exported symbols which contain an
  791.                          underscore character.  If %_S (with a capital
  792.                          "S") appears in the format string it stands
  793.                          for the current module name.
  794.  
  795.           AAAAlllliiiiaaaassss          If the value of this parameter contains a %_s,
  796.                          it is a format string applied to the names of
  797.                          external functions or variables.  If the
  798.                          value does not contain a %_s, it becomes the
  799.                          name of the next external symbol which is
  800.                          declared (after which the parameter is
  801.                          cleared).
  802.  
  803.           SSSSyyyynnnnoooonnnnyyyymmmm        This creates a synonym for another Pascal
  804.  
  805.  
  806.  
  807.                                   - 13 - Formatted:  February 28, 1991
  808.  
  809.  
  810.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  811.  
  812.  
  813.  
  814.                          symbol or keyword.  The format is
  815.  
  816.                               SSSSyyyynnnnoooonnnnyyyymmmm _o_l_d-_n_a_m_e = _n_e_w-_n_a_m_e
  817.  
  818.                          All occurrences of _o_l_d-_n_a_m_e in the input text
  819.                          are treated as if they were _n_e_w-_n_a_m_e by the
  820.                          parser.  If _n_e_w-_n_a_m_e is a keyword, _o_l_d-_n_a_m_e
  821.                          will be an equivalent keyword.  If _n_e_w-_n_a_m_e
  822.                          is the name of a predefined function, _o_l_d-
  823.                          _n_a_m_e will behave in the same way as that
  824.                          function, and so on.  If _n_e_w-_n_a_m_e is omitted,
  825.                          then occurrences of _o_l_d-_n_a_m_e are entirely
  826.                          ignored in the input file.  Synonyms allow
  827.                          you to skip over a keyword in your dialect of
  828.                          Pascal that is not understood by _p_2_c, or to
  829.                          simulate a keyword or predefined identifier
  830.                          of your dialect with a similar one that _p_2_c
  831.                          recognizes.  Note that all predefined
  832.                          functions are available at all times; if you
  833.                          have a library routine that behaves like,
  834.                          e.g., Turbo Pascal's _g_e_t_m_e_m procedure, you
  835.                          can make your routine a synonym for _g_e_t_m_e_m
  836.                          even if you are not translating in Turbo
  837.                          mode.
  838.  
  839.           NNNNaaaammmmeeeeOOOOffff         This defines the name to use in C for a
  840.                          specific symbol.  It must appear before the
  841.                          symbol is declared in the Pascal code; it is
  842.                          usually placed in the local _p_2_c_r_c file for
  843.                          the project.  The format is
  844.  
  845.                               NNNNaaaammmmeeeeOOOOffff _p_a_s_c_a_l-_n_a_m_e = _C-_n_a_m_e
  846.  
  847.                          By default, Pascal names map directly onto C
  848.                          names with no change (except for the various
  849.                          kinds of formatting outlined above).  If the
  850.                          _p_a_s_c_a_l-_n_a_m_e is of the form _m_o_d_u_l_e._n_a_m_e or
  851.                          _p_r_o_c_e_d_u_r_e._n_a_m_e then the command applies only
  852.                          to the instance of the Pascal name that is
  853.                          global to that module, or local to that
  854.                          procedure.  Otherwise, it applies to all
  855.                          usages of the name.
  856.  
  857.           VVVVaaaarrrrMMMMaaaaccccrrrroooo       This is analogous to NNNNaaaammmmeeeeOOOOffff, but specifically
  858.                          for use with Pascal variables.  The righthand
  859.                          side can be most any C expression; all
  860.                          references to the variable are expanded into
  861.                          that C expression.  Names used in the C
  862.                          expression are taken verbatim.  There is also
  863.                          a CCCCoooonnnnssssttttMMMMaaaaccccrrrroooo parameter for translating
  864.                          constants as arbitrary expressions.  Note
  865.                          that the variable on the lefthand side must
  866.  
  867.  
  868.  
  869.                                   - 14 - Formatted:  February 28, 1991
  870.  
  871.  
  872.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  873.  
  874.  
  875.  
  876.                          actually be declared in the program or in a
  877.                          module that it uses.  The declaration for the
  878.                          variable will be omitted from the generated
  879.                          code unless the Pascal-name appears in the
  880.                          expression:  If you ask to replace _i with
  881.                          _i+_1, the variable _i will still be declared
  882.                          but its value will be shifted accordingly.
  883.                          Note that if _i appears on the lefthand side
  884.                          of an assignment, _p_2_c will use algebra to
  885.                          "solve" for _i.
  886.  
  887.                          In all cases where _p_2_c parses C expressions,
  888.                          all C operators are recognized except
  889.                          compound assignments like `+='.  (Increment
  890.                          and decrement operators are allowed.) All
  891.                          variable and function names are assumed to
  892.                          have integer type, even if they are names
  893.                          that occur in the actual program.  A type-
  894.                          specification operator `::' has been
  895.                          introduced; it has the same precedence as `.'
  896.                          or `->' but the righthand side must be a
  897.                          Pascal type identifier (built-in or defined
  898.                          by your program previously to when the macro
  899.                          definition was parsed), or an arbitrary
  900.                          Pascal type expression in parentheses.  The
  901.                          lefthand argument is then considered to have
  902.                          the specified type.  This may be necessary if
  903.                          your macro is used in situations where the
  904.                          exact type of the expression must be known
  905.                          (say, as the argument to a _w_r_i_t_e_l_n).
  906.  
  907.           FFFFiiiieeeellllddddMMMMaaaaccccrrrroooo     Here the lefthand side must have the form
  908.                          _r_e_c_o_r_d._f_i_e_l_d, where _r_e_c_o_r_d is the Pascal type
  909.                          or variable name for a record, and _f_i_e_l_d is a
  910.                          field in that record.  The righthand side
  911.                          must be a C expression generally including
  912.                          the name _r_e_c_o_r_d. All instances of that name
  913.                          are replaced by the actual record being
  914.                          "dotted." For example,
  915.  
  916.                               FieldMacro Rect.topLeft = topLeft(Rect)
  917.  
  918.                          translates _a[_i]._t_o_p_L_e_f_t into _t_o_p_L_e_f_t(_a[_i]),
  919.                          where _a is an array of _R_e_c_t.
  920.  
  921.           FFFFuuuunnnnccccMMMMaaaaccccrrrroooo      The lefthand side must be any Pascal function
  922.                          or procedure name plus a parameter list.  The
  923.                          number of parameters must match the number in
  924.                          the function's uses and declaration.  Calls
  925.                          to the function are replaced by the C
  926.                          expression on the righthand side.  For
  927.                          example,
  928.  
  929.  
  930.  
  931.                                   - 15 - Formatted:  February 28, 1991
  932.  
  933.  
  934.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  935.  
  936.  
  937.  
  938.                               FuncMacro PtInRect(p,r) = PtInRect(p,&r)
  939.  
  940.                          causes the second argument of _P_t_I_n_R_e_c_t to be
  941.                          passed by reference, even though the
  942.                          declaration says it's not.  If the function
  943.                          in question is actually defined in the
  944.                          program or module being translated, the
  945.                          FFFFuuuunnnnccccMMMMaaaaccccrrrroooo will not affect the definition but
  946.                          it will affect all calls to the function
  947.                          elsewhere in the module.  FFFFuuuunnnnccccMMMMaaaaccccrrrroooossss can also
  948.                          be applied to predefined or never-defined
  949.                          functions.
  950.  
  951.           IIIInnnncccclllluuuuddddeeeeFFFFrrrroooommmm    This specifies that a given module's header
  952.                          should be included from a given place.  The
  953.                          second argument may be surrounded by " " or
  954.                          < > as necessary; if the second argument is
  955.                          omitted, no include directive will be
  956.                          generated for the module.
  957.  
  958.           IIIImmmmppppoooorrrrttttFFFFrrrroooommmm     This specifies that a given module's Pascal
  959.                          interface text can be found in the given
  960.                          file.  The named file should be either the
  961.                          source file for the module, or a specially
  962.                          prepared file with the implementation section
  963.                          removed for speed.  If no IIIImmmmppppoooorrrrttttFFFFrrrroooommmm entry is
  964.                          found for a module, the path defined by the
  965.                          IIIImmmmppppoooorrrrttttDDDDiiiirrrr list is searched.  Each entry in
  966.                          the path may contain a %_s, which expands to
  967.                          the name of the module.  The default path
  968.                          looks for %_s._p_a_s and %_s._t_e_x_t in the current
  969.                          directory, then for /_u_s_r/_l_i_b/_p_2_c/%_s._i_m_p.
  970.                          (where /usr/lib/p2c is the _p_2_c home
  971.                          directory.)
  972.  
  973.           SSSSttttrrrruuuuccccttttFFFFuuuunnnnccccttttiiiioooonnnn This parameter is a list of functions which
  974.                          follow the _p_2_c semantics for structure-valued
  975.                          functions (functions returning arrays, sets,
  976.                          and strings, and structs in primitive C
  977.                          dialects).  For these functions, a pointer to
  978.                          a return-value area is passed to the function
  979.                          as a special first parameter.  The function
  980.                          stores the result in this area, then returns
  981.                          a copy of the pointer.  (The standard C
  982.                          function _s_t_r_c_p_y is an example of this
  983.                          concept.  _S_p_r_i_n_t_f also behaves this way in
  984.                          some dialects; it always appears on the
  985.                          SSSSttttrrrruuuuccccttttFFFFuuuunnnnccccttttiiiioooonnnn list regardless of the type of
  986.                          implementation.)  The system configuration
  987.                          file includes a list of common structured
  988.                          functions so that _p_2_c's optimizer will know
  989.                          how to manipulate them.
  990.  
  991.  
  992.  
  993.                                   - 16 - Formatted:  February 28, 1991
  994.  
  995.  
  996.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  997.  
  998.  
  999.  
  1000.           SSSSttttrrrrllllaaaappppFFFFuuuunnnnccccttttiiiioooonnnn Functions on this list are structured
  1001.                          functions as above, but with the ability to
  1002.                          work in-place; that is, the same pointer may
  1003.                          be passed as both the return value area and a
  1004.                          regular parameter.
  1005.  
  1006.           DDDDeeeetttteeeerrrrmmmmiiiinnnniiiissssttttiiiicccc  Functions on this list have no side effects
  1007.                          or side dependencies.  An example is the _s_i_n
  1008.                          function in the standard math library; two
  1009.                          calls with the same parameter values produce
  1010.                          the same result, and have no effects other
  1011.                          than returning a value.  _P_2_c can make use of
  1012.                          this knowledge when optimizing code for
  1013.                          efficiency or readability.  Functions on this
  1014.                          list are also assumed to be relatively fast,
  1015.                          so that it is acceptable to duplicate a call
  1016.                          to the function.
  1017.  
  1018.           LLLLeeeeaaaavvvveeeeAAAAlllloooonnnneeee     Functions on this list are not subjected to
  1019.                          the normal built-in translation rules that
  1020.                          _p_2_c would otherwise use.  For example, adding
  1021.                          _w_r_i_t_e_l_n to this list would translate _w_r_i_t_e_l_n
  1022.                          statements blindly into calls to a C
  1023.                          _w_r_i_t_e_l_n() function, rather than being
  1024.                          translated into equivalent _p_r_i_n_t_f calls.  The
  1025.                          built-in translation is also suppressed if
  1026.                          the function has a FFFFuuuunnnnccccMMMMaaaaccccrrrroooo.
  1027.  
  1028.           BBBBuuuuffffffffeeeerrrreeeeddddFFFFiiiilllleeee   _P_2_c normally assumes binary files will use
  1029.                          _r_e_a_d/_w_r_i_t_e, not _g_e_t/_p_u_t/^ notation.  A file
  1030.                          buffer variable will only be created for a
  1031.                          file if buffer notation is used for it.  For
  1032.                          global file variables this may be detected
  1033.                          too late (a declaration without buffers may
  1034.                          already have been written).  Such files can
  1035.                          be listed in BBBBuuuuffffffffeeeerrrreeeeddddFFFFiiiilllleeee to force _p_2_c to
  1036.                          allocate buffers for them; do this if you get
  1037.                          a warning message that says it is necessary.
  1038.                          Set BBBBuuuuffffffffeeeerrrreeeeddddFFFFiiiilllleeee=1 to buffer all files, in
  1039.                          which case UUUUnnnnBBBBuuuuffffffffeeeerrrreeeeddddFFFFiiiilllleeee allows you to force
  1040.                          certain files _n_o_t to have buffers.
  1041.  
  1042.           SSSSttttrrrruuuuccccttttFFFFiiiilllleeeessss    If _p_2_c still can't translate your file
  1043.                          operations correctly, you can set
  1044.                          SSSSttttrrrruuuuccccttttFFFFiiiilllleeeessss=1 to cause Pascal files to
  1045.                          translate into structs which include the
  1046.                          usual C _F_I_L_E pointer, as well as file buffer
  1047.                          and file name fields.  While the resulting
  1048.                          code doesn't look as much like native C, the
  1049.                          file structs will allow _p_2_c to do a correct
  1050.                          translation in many more cases.
  1051.  
  1052.  
  1053.  
  1054.  
  1055.                                   - 17 - Formatted:  February 28, 1991
  1056.  
  1057.  
  1058.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  1059.  
  1060.  
  1061.  
  1062.           CCCChhhheeeecccckkkkFFFFiiiilllleeeeEEEEOOOOFFFF   Normally only file-open operations are
  1063.                          checked for errors.  Additional error
  1064.                          checking, such as read-past-end-of-file, can
  1065.                          be enabled with parameters like CCCChhhheeeecccckkkkFFFFiiiilllleeeeEEEEOOOOFFFF.
  1066.                          These checks can make the code very ugly!  If
  1067.                          I/O checking is enabled by the program
  1068.                          ($$$$iiiioooocccchhhheeeecccckkkk oooonnnn$$$$ in HP Pascal; {{{{$$$$IIII++++}}}} in Turbo;
  1069.                          this is always the default state), these
  1070.                          checks will generate fatal errors unless
  1071.                          enclosed in an HP Pascal ttttrrrryyyy-rrrreeeeccccoooovvvveeeerrrr
  1072.                          construct.  If I/O checking is disabled,
  1073.                          these will cause the global variable
  1074.                          _P__i_o_r_e_s_u_l_t to be set zero or nonzero
  1075.                          according to the outcome.  The default for
  1076.                          most of these options is to check only when
  1077.                          I/O checking is disabled.
  1078.  
  1079.      IIIISSSSSSSSUUUUEEEESSSS
  1080.           IIIInnnntttteeeeggggeeeerrrr ssssiiiizzzzeeee.... _P_2_c normally generates code to work with
  1081.           either 16 or 32 bit ints.  If you know your C integers will
  1082.           be 16 or 32 bits, set IIIInnnnttttSSSSiiiizzzzeeee appropriately.  In particular
  1083.           setting IIIInnnnttttSSSSiiiizzzzeeee=32 will generate much cleaner code: _p_2_c no
  1084.           longer must carefully cast function arguments between int
  1085.           and long.  These casts also will be unnecessary if ANSI
  1086.           prototypes are available.  To disable int/long casting
  1087.           because you know at least one of these cases will hold, set
  1088.           CCCCaaaassssttttLLLLoooonnnnggggAAAArrrrggggssss=0.  (The CCCCaaaassssttttAAAArrrrggggssss parameter similarly controls
  1089.           other types of casts, such as between ints and doubles.) The
  1090.           IIIInnnntttteeeeggggeeeerrrr11116666 parameter controls whether Pascal integers are
  1091.           interpreted as 16 or 32 bits, or translated as native C
  1092.           integers.  The default value depends on the LLLLaaaannnngggguuuuaaaaggggeeee
  1093.           selected.
  1094.  
  1095.           SSSSiiiiggggnnnneeeedddd////uuuunnnnssssiiiiggggnnnneeeedddd cccchhhhaaaarrrrssss.... Pascal characters are normally
  1096.           "weakly" interpreted as unsigned; this is controlled by
  1097.           UUUUnnnnssssiiiiggggnnnneeeeddddCCCChhhhaaaarrrr.  The default is "either," so that C's native
  1098.           cccchhhhaaaarrrr type may be used even if its signed-ness is unknown.
  1099.           Code that uses characters outside of the range 0-127 may
  1100.           need a different setting.  Alternatively, you can use the
  1101.           types {{{{SSSSIIIIGGGGNNNNEEEEDDDD}}}} cccchhhhaaaarrrr and {{{{UUUUNNNNSSSSIIIIGGGGNNNNEEEEDDDD}}}} cccchhhhaaaarrrr in the few cases
  1102.           where it really matters.  These comments are controlled by
  1103.           the SSSSiiiiggggnnnneeeeddddCCCCoooommmmmmmmeeeennnntttt and UUUUnnnnssssiiiiggggnnnneeeeddddCCCCoooommmmmmmmeeeennnntttt parameters.  (The type
  1104.           {{{{UUUUNNNNSSSSIIIIGGGGNNNNEEEEDDDD}}}} iiiinnnntttteeeeggggeeeerrrr is also recognized.)  The SSSSiiiiggggnnnneeeeddddCCCChhhhaaaarrrr
  1105.           parameter tells whether C characters are signed or unsigned
  1106.           (default is "unknown").  The HHHHaaaassssSSSSiiiiggggnnnneeeeddddCCCChhhhaaaarrrr parameter tells
  1107.           whether the phrase "signed char" is legal in the output.  If
  1108.           it is not, _p_2_c may have to translate Pascal signed bytes
  1109.           into C shorts.
  1110.  
  1111.           SSSSppppeeeecccciiiiaaaallll ttttyyyyppppeeeessss.... _P_2_c understands the following predefined
  1112.           Pascal type names: iiiinnnntttteeeeggggeeeerrrr, signed integers depending on
  1113.           IIIInnnntttteeeeggggeeeerrrr11116666; lllloooonnnnggggiiiinnnntttt, signed 32-bit integers; uuuunnnnssssiiiiggggnnnneeeedddd,
  1114.  
  1115.  
  1116.  
  1117.                                   - 18 - Formatted:  February 28, 1991
  1118.  
  1119.  
  1120.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  1121.  
  1122.  
  1123.  
  1124.           unsigned 32-bit integers; sssswwwwoooorrrrdddd, signed 16-bit integers;
  1125.           wwwwoooorrrrdddd, unsigned 16-bit integers; cccc____iiiinnnntttt, signed native C
  1126.           integers; cccc____uuuuiiiinnnntttt, unsigned native C integers; ssssbbbbyyyytttteeee, signed
  1127.           8-bit integers; bbbbyyyytttteeee, unsigned 8-bit integers; rrrreeeeaaaallll,
  1128.           floating-point numbers depending on DDDDoooouuuubbbblllleeeeRRRReeeeaaaallllssss; ssssiiiinnnngggglllleeee,
  1129.           single-precision floats; lllloooonnnnggggrrrreeeeaaaallll, ddddoooouuuubbbblllleeee, and eeeexxxxtttteeeennnnddddeeeedddd,
  1130.           double-precision floats; ppppooooiiiinnnntttteeeerrrr and aaaannnnyyyyppppttttrrrr, generic
  1131.           pointers (assignment-compatible with any pointer type);
  1132.           ssssttttrrrriiiinnnngggg, generic string of length SSSSttttrrrriiiinnnnggggDDDDeeeeffffaaaauuuulllltttt (normally
  1133.           255); also, the usual Pascal types cccchhhhaaaarrrr, bbbboooooooolllleeeeaaaannnn, and tttteeeexxxxtttt.
  1134.           (If your Pascal uses different names for these concepts, the
  1135.           SSSSyyyynnnnoooonnnnyyyymmmm option will come in handy.)
  1136.  
  1137.           EEEEmmmmbbbbeeeeddddddddeeeedddd ccccooooddddeeee.... It is possible to write a Pascal comment
  1138.           containing C code to be embedded into the output.  See the
  1139.           descriptions of EEEEmmmmbbbbeeeeddddCCCCoooommmmmmmmeeeennnntttt and its relatives in the system
  1140.           _p_2_c_r_c file.  These techniques are helpful if you plan to do
  1141.           repeated translations of code that is still being maintained
  1142.           in Pascal.
  1143.  
  1144.           CCCCoooommmmmmmmeeeennnnttttssss aaaannnndddd bbbbllllaaaannnnkkkk lllliiiinnnneeeessss.... _P_2_c collects the comments in a
  1145.           procedure into a list.  All comments and statements are
  1146.           stamped with serial numbers which are used to reattach
  1147.           comments to statements even after code has been added,
  1148.           removed, or rearranged during translation.  "Orphan"
  1149.           comments attached to statements that have been lost are
  1150.           attached to nearby statements or emitted at the end of the
  1151.           procedure.  Blank lines are treated as a kind of comment, so
  1152.           _p_2_c will also reproduce your usage of blank lines.  If the
  1153.           comment mechanism goes awry, you can disable comments with
  1154.           EEEEaaaattttCCCCoooommmmmmmmeeeennnnttttssss or disable their being attached to code with
  1155.           SSSSppppiiiittttCCCCoooommmmmmmmeeeennnnttttssss.
  1156.  
  1157.           IIIInnnnddddeeeennnnttttaaaattttiiiioooonnnn.... _P_2_c has a number of parameters to govern
  1158.           indentation of code.  The default values produce the GNU
  1159.           Emacs standard indentation style, although _p_2_c can do a
  1160.           better job since it knows more about the code it is
  1161.           indenting.  Indentation works by applying "indentation
  1162.           deltas," which are either absolute numbers (which override
  1163.           the previous indentation), or signed relative numbers (which
  1164.           augment the previous indentation).  A delta of "+0"
  1165.           specifies no change in indentation.  All of the indentation
  1166.           options are described in the standard _p_2_c_r_c file.
  1167.  
  1168.           LLLLiiiinnnneeee bbbbrrrreeeeaaaakkkkiiiinnnngggg.... _P_2_c uses an algorithm similar to the TeX
  1169.           typesetter's paragraph formatter for breaking long
  1170.           statements into multiple lines.  A "penalty" is assigned to
  1171.           various undesirable aspects of all possible line breaks; the
  1172.           "badness" of a set of line breaks is approximately the sum
  1173.           of all the penalties.  Chief among these are serious
  1174.           penalties for overrunning the desired maximum line length
  1175.           (default 78 columns), an infinite penalty for overrunning
  1176.  
  1177.  
  1178.  
  1179.                                   - 19 - Formatted:  February 28, 1991
  1180.  
  1181.  
  1182.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  1183.  
  1184.  
  1185.  
  1186.           the absolute maximum line length (default 90), and
  1187.           progressively greater penalties for breaking at operators
  1188.           deeply nested in expressions.  Parameters such as
  1189.           OOOOppppBBBBrrrreeeeaaaakkkkPPPPeeeennnnaaaallllttttyyyy control the relative weights of various
  1190.           choices.  BBBBrrrreeeeaaaakkkkAAAArrrriiiitttthhhh and its neighbors control whether the
  1191.           operator at a line break should be placed at the end of the
  1192.           previous line or at the beginning of the next.  If you don't
  1193.           want any oversize lines, define MMMMaaaaxxxxLLLLiiiinnnneeeeWWWWiiiiddddtttthhhh=78.
  1194.  
  1195.           Unlike TeX, _p_2_c's line breaker must actually try all
  1196.           possible sets of break points.  To avoid excessive
  1197.           computation, the total penalty contributed at each decision
  1198.           point must sum to a nonnegative value; negative values are
  1199.           clipped up to zero.  This allows _p_2_c to prune away obviously
  1200.           undesirable alternatives in advance.  The MMMMaaaaxxxxLLLLiiiinnnneeeeBBBBrrrreeeeaaaakkkkTTTTrrrriiiieeeessss
  1201.           parameter (default 5000) controls how many alternatives to
  1202.           try before giving up and using the best so far.
  1203.  
  1204.           PPPPAAAASSSSCCCCAAAALLLL____MMMMAAAAIIIINNNN.... _P_2_c generates a call to this function at the
  1205.           front of the main program.  In the (unmodified) run-time
  1206.           library all this does is save argc and argv away because in
  1207.           both HP and Turbo these are accessed as global variables.
  1208.           If you do not wish to use this feature, define AAAArrrrggggCCCCNNNNaaaammmmeeee to
  1209.           be _a_r_g_c, AAAArrrrggggVVVVNNNNaaaammmmeeee to be _a_r_g_v, and MMMMaaaaiiiinnnnNNNNaaaammmmeeee (normally
  1210.           "PASCAL_MAIN") to be blank.  This will work if argc and argv
  1211.           are never accessed outside of your main program.
  1212.  
  1213.      BBBBUUUUGGGGSSSS
  1214.           _P_2_c was designed with the idea that clean, readable output
  1215.           in most cases is worth more than guaranteed correct output
  1216.           in extreme cases.  _P_2_c is _n_o_t a compiler!  However, ideally
  1217.           the "extreme" cases would include only those which never
  1218.           arise in real life.  Thus if _p_2_c actually generates
  1219.           incorrect code I will consider it a bug, but I will not
  1220.           apologize for it. :-)  Below are the major remaining cases
  1221.           where this is known to occur.
  1222.  
  1223.           Certain kinds of conformant array parameters (including
  1224.           multi-dimensional conformant arrays) produce code that
  1225.           declares variable-length arrays in C.  Only a few C
  1226.           compilers, such as the GNU C compiler, support this language
  1227.           extension.  Otherwise some hand re-coding will be required.
  1228.  
  1229.           HP Pascal ttttrrrryyyy-rrrreeeeccccoooovvvveeeerrrr structures are translated into calls
  1230.           to _T_R_Y and _R_E_C_O_V_E_R macros, which are defined to simulate the
  1231.           construct using _s_e_t_j_m_p and _l_o_n_g_j_m_p. If this emulation does
  1232.           not work, define the symbol FFFFAAAAKKKKEEEE____TTTTRRRRYYYY to cause these macros
  1233.           to become "inert."  (In cases where the error is detected by
  1234.           code physically within the body of the ttttrrrryyyy statement, a C
  1235.           ggggoooottttoooo to the rrrreeeeccccoooovvvveeeerrrr section is always generated.)  Also,
  1236.           local file variables in scopes which are destroyed by an
  1237.           eeeessssccccaaaappppeeee are not closed.
  1238.  
  1239.  
  1240.  
  1241.                                   - 20 - Formatted:  February 28, 1991
  1242.  
  1243.  
  1244.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  1245.  
  1246.  
  1247.  
  1248.           Non-local GOTO's and ttttrrrryyyy-rrrreeeeccccoooovvvveeeerrrr statements are each
  1249.           implemented, but may conflict if both are used at once.
  1250.           Non-local GOTO's are fairly careful about closing files that
  1251.           go out of scope but may fail to do so in the presence of
  1252.           recursion.
  1253.  
  1254.           Arrays containing files are not initialized to NULL as other
  1255.           files are.  In some cases, such as file variables allocated
  1256.           by NEW, the file is initialized but not automatically closed
  1257.           by DISPOSE.
  1258.  
  1259.           LINK variables allowing sub-procedures access to their
  1260.           parents' variables are occasionally omitted by mistake, if
  1261.           the access is too indirect for _p_2_c to notice.  If this
  1262.           happens, you can add an explicit reference to a parent
  1263.           variable in the sub-procedure.  A statement of the form
  1264.           "a:=a" will count as a reference but then be optimized away
  1265.           by _p_2_c.
  1266.  
  1267.           Many aspects of Modula-2 are translated only superficially.
  1268.           For example, the type-compatibility properties of the _W_O_R_D
  1269.           and _A_R_R_A_Y _O_F _W_O_R_D types are only roughly modelled, as are
  1270.           the scope rules concerning modules.
  1271.  
  1272.           Parts of VAX Pascal are still untreated.  In particular, the
  1273.           [_U_N_S_A_F_E] attribute and a few others are not fully supported,
  1274.           nor are the semantics of the _O_P_E_N procedure.
  1275.  
  1276.           Turbo and VAX Pascal's _d_o_u_b_l_e, _q_u_a_d_r_u_p_l_e, and _e_x_t_e_n_d_e_d real
  1277.           types all translate to the C ddddoooouuuubbbblllleeee type.  Turbo's
  1278.           _c_o_m_p_u_t_a_t_i_o_n_a_l type is not supported at all.
  1279.  
  1280.           Because Pascal strings (with length bytes) are translated
  1281.           into C strings (with null terminators), certain Pascal
  1282.           string tricks will not work in the translated code.  For
  1283.           example the assignment _s[_0]:=_c_h_r(_x) is translated to _s[_x]=_0
  1284.           on the assumption that the string is being shortened.  If _x
  1285.           is actually greater than the current length, but not of a
  1286.           recognizable form like _o_r_d(_s[_0])+_n, then the generated code
  1287.           will not work.  In VAX Pascal this corresponds to performing
  1288.           arithmetic on the _L_E_N_G_T_H field of a varying-length string.
  1289.  
  1290.           Turbo Pascal's automatic clipping of strings is not
  1291.           supported.  In Turbo, if a ten character string is assigned
  1292.           to a _s_t_r_i_n_g[_8] variable, the last two characters are
  1293.           silently removed.  The code produced by _p_2_c generally will
  1294.           overrun the target string instead!  The SSSSttttrrrriiiinnnnggggTTTTrrrruuuunnnnccccLLLLiiiimmmmiiiitttt
  1295.           parameter (80 by default if LLLLaaaannnngggguuuuaaaaggggeeee=TTTTuuuurrrrbbbboooo) specifies a
  1296.           string size which should be considered "short"; assignments
  1297.           of potentially-long strings to short string variables will
  1298.           cause a warning but will not automatically truncate.  The
  1299.           cure is to use _c_o_p_y in the Pascal source to truncate the
  1300.  
  1301.  
  1302.  
  1303.                                   - 21 - Formatted:  February 28, 1991
  1304.  
  1305.  
  1306.      PPPP2222CCCC((((1111))))                        ((((llllooooccccaaaallll))))                      PPPP2222CCCC((((1111))))
  1307.  
  1308.  
  1309.  
  1310.           strings explicitly.
  1311.  
  1312.      FFFFIIIILLLLEEEESSSS
  1313.           file._x_x_x               Pascal source files
  1314.           file.c                 resulting C source file
  1315.           module.h               resulting C header file
  1316.           p2crc                  local configuration file
  1317.           .p2crc                 alternate local configuration file
  1318.           /usr/lib/p2c/p2crc     system-wide configuration file
  1319.           /usr/lib/p2c/system.impdeclarations for predefined functions
  1320.           /usr/lib/p2c/system.m2 analogous declarations for Modula-2
  1321.           /usr/lib/p2c/*.imp     interface text for standard modules
  1322.           /usr/include/p2c/p2c.h header file for translated programs
  1323.           /usr/lib/libp2c.a      run-time library
  1324.  
  1325.      AAAAUUUUTTTTHHHHOOOORRRR
  1326.           Dave Gillespie, daveg@csvax.cs.caltech.edu.
  1327.  
  1328.           Many thanks to William Bader, Steven Levi, Rick Koshi, Eric
  1329.           Raymond, Magne Haveraaen, Dirk Grunwald, David Barto, Paul
  1330.           Fisher, Tom Schneider, and others whose suggestions and bug
  1331.           reports have helped improve _p_2_c in countless ways.
  1332.  
  1333.  
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.  
  1347.  
  1348.  
  1349.  
  1350.  
  1351.  
  1352.  
  1353.  
  1354.  
  1355.  
  1356.  
  1357.  
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.                                   - 22 - Formatted:  February 28, 1991