home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume21 / p2c / part32 < prev    next >
Text File  |  1990-04-05  |  53KB  |  1,081 lines

  1. Subject:  v21i077:  Pascal to C translator, Part32/32
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: 41fb3543 d858cf7e 11271833 f9620960
  5.  
  6. Submitted-by: Dave Gillespie <daveg@csvax.caltech.edu>
  7. Posting-number: Volume 21, Issue 77
  8. Archive-name: p2c/part32
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 32 (of 32)."
  17. # Contents:  src/sys.p2crc.1
  18. # Wrapped by rsalz@litchi.bbn.com on Mon Mar 26 14:29:55 1990
  19. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  20. if test -f 'src/sys.p2crc.1' -a "${1}" != "-c" ; then 
  21.   echo shar: Will not clobber existing file \"'src/sys.p2crc.1'\"
  22. else
  23. echo shar: Extracting \"'src/sys.p2crc.1'\" \(49793 characters\)
  24. sed "s/^X//" >'src/sys.p2crc.1' <<'END_OF_FILE'
  25. X# Standard configuration file for "p2c" 1.14, the Pascal to C translator
  26. X#  Copyright (C) 1989 David Gillespie.
  27. X#  Author's address: daveg@csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
  28. X
  29. X# This program is free software; you can redistribute it and/or modify
  30. X# it under the terms of the GNU General Public License as published by
  31. X# the Free Software Foundation (any version).
  32. X
  33. X# This program is distributed in the hope that it will be useful,
  34. X# but WITHOUT ANY WARRANTY; without even the implied warranty of
  35. X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  36. X# GNU General Public License for more details.
  37. X
  38. X# You should have received a copy of the GNU General Public License
  39. X# along with this program; see the file COPYING.  If not, write to
  40. X# the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  41. X
  42. X
  43. X# Note that all options except "Naming Conventions" and certain library
  44. X# functions may be left blank or omitted entirely; the defaults are intended
  45. X# to encompass a wide variety of "reasonable" implementations of C.
  46. X# Option names are case-insensitive.
  47. X
  48. X# The single-valued options can all be overridden by a later line in
  49. X# this file, or in your own "p2crc" or ".p2crc" file, or in comments
  50. X# in the input file.  To override an explicit value with the original
  51. X# default, use the word "def".
  52. X
  53. X# Some options define printf-like format strings.  These support all the
  54. X# usual formatting codes, with additional features for string formatting.
  55. X# The following extra "flag" characters are defined for %s:
  56. X#    _     Convert to lower case
  57. X#    ^     Convert to upper case
  58. X#    _^    Convert to lower except capitalize first char and after non-letters
  59. X#    ~     Insert '_' between lower case and following upper case letters
  60. X#    !     Remove '_' and other non-alphanumeric characters
  61. X#    ?     Negates _ and ^ flags if name contains mixed case
  62. X#    R     Remove file name suffix (e.g., "foo.pas" => "foo")
  63. X#    /     Remove path name (prefix ending in /, \, ], or :)
  64. X# Also, where a format includes several "%" arguments, they may
  65. X# appear in either order in the string.  When two string args are
  66. X# involved, "%s" will refer to one and "%S" to the other.  The
  67. X# notation %H expands to the p2c home directory name, as in "%H/p2crc".
  68. X
  69. X# Many options simply refine defaults controlled by the Language, 
  70. X# AnsiC, and Target options.
  71. X
  72. X
  73. X
  74. X
  75. XDebug                           # Level of debugging output
  76. X
  77. XTokenTrace                      # Additional debugging output
  78. X
  79. X
  80. XInclude                # Additional p2crc files to be included
  81. XInclude                         # %s=program name
  82. X
  83. XCopySource                      # 1=copy Pascal source code into output
  84. X                                # file, #ifdef'd out.
  85. X
  86. X
  87. X
  88. X
  89. X# INPUT LANGUAGE
  90. X
  91. XLanguage                        # Known languages:
  92. X                                #  HP (default; Pascal Workstation version)
  93. X                                #  MODCAL (HP's advanced Pascal)
  94. X                                #  HP-UX (almost same as HP)
  95. X                                #  TURBO (vers 5.0 for IBM PC)
  96. X                #  OREGON (Oregon Software Pascal-2 V2.1)
  97. X                #  VAX (VAX/VMS Pascal)
  98. X                #  MODULA (Modula-2)
  99. X                                #  UCSD (almost same as TURBO)
  100. X                                #  MPW (MPW Pascal 2.0 for the Mac)
  101. X                #  BERK (SUN Berkeley Pascal)
  102. X
  103. XModula2                # 1=Use modula-2 block structure (IF-END)
  104. X                # 0=Use Pascal block structure (IF-BEGIN-END)
  105. X                # default=1 if Language=MODULA, 0 for others
  106. X
  107. XInteger16                       # 1=assume Pascal integers are 16 bits
  108. X                                # 0=assume Pascal integers are 32 bits
  109. X                # 2=use native C "int" for Pascal "integer"
  110. X                                # default=0 for HP/Oregon/VAX, 1 for Turbo/MPW
  111. X
  112. XDoubleReals                     # 1=convert Pascal real to C double
  113. X                                # 0=convert Pascal real to C float
  114. X                                # default=1 for Turbo and HP-UX, 0 for HP
  115. X
  116. XUnsignedChar                    # 1=Pascal char must be unsigned
  117. X                                # 0=Pascal char must be signed
  118. X                                # 2=doesn't matter; use native C "char"
  119. X                                # default=unsigned, but use native "char"
  120. X
  121. XNeedSignedByte                  # 1=use "signed char" even if not available
  122. X                                # 0 or default=use "short" if not sure
  123. X
  124. XPascalEnumSize                  # Size in BITS of a Pascal enum type.
  125. X                                # Default=according to Language.
  126. X
  127. XNestedComments                  # 1=Pascal comments may be nested
  128. X                                # 2=comments don't nest, but { must match }
  129. X                                # 0=comments are unnested, unmatched
  130. X                                # default=0 in HP/MODCAL, 2 in Turbo
  131. X
  132. XExternWords       external    # Words analogous to "forward" for declaring
  133. XExternWords      extern    # procedures or functions external.
  134. XExternWords      fortran
  135. X
  136. XCExternWords      nonpascal     # Words like ExternWords but for which any
  137. XCExternWords            # leading and/or trailing "_" is removed
  138. XCExternWords                    # from the Pascal function/variable names.
  139. X
  140. XImportAll                       # 1=read all of each imported file, in case
  141. X                                #   file contains several modules/units
  142. X                                # 0=read only interface text of first module
  143. X                                # default=1 in HP/MODCAL, 0 in others
  144. X
  145. XImplModules            # 1=MODULE starts a block like PROGRAM.
  146. X                # 0=MODULEs have export/implement sections.
  147. X
  148. XPascalSignif                    # Number of significant characters in Pascal
  149. X                                # identifiers; default=unlimited
  150. X
  151. XPascalCaseSens                  # 1=Pascal idents are case-sensitive,
  152. X                #   keywords and predef words are u.c. or l.c.
  153. X                # 2=case-sens, keywords and predef words u.c.
  154. X                # 3=case-sens, keywords and predef words l.c.
  155. X                                # 0=not case-sensitive
  156. X                # default=2 in Modula-2, otherwise 0
  157. X
  158. XDollarIdents            # 1='$' is legal in Pascal and C identifiers
  159. X                # 2=convert '$' (and '%') in idents into C '_'
  160. X                # 0='$' is for HP directives/Turbo hex consts
  161. X                # default=1 for Oregon & VAX Pascal only
  162. X
  163. XIgnoreNonAlpha            # 1=ignore _, $, % in Pascal identifiers
  164. X                # 0=retain them (subject to DollarIdents)
  165. X                # default=1 for UCSD, 0 otherwise
  166. X
  167. XInputTabSize                    # Number of characters per tab stop in input
  168. X                                # file, for reading Pascal indentation.
  169. X                                # Default=8.
  170. X
  171. X
  172. X
  173. X# TARGET LANGUAGE
  174. X
  175. XAnsiC                           # 1=use all Ansi C features and definitions
  176. X                                # 2=use GNU C language extensions
  177. X                                # 0=use only original K&R features
  178. X                                # default=use "modern" Unix-like C
  179. X
  180. XC++                             # 1=use C++ extensions,
  181. X                                # 0=use straight C,
  182. X                                # default=generate code that works on either
  183. X
  184. XVoid*                           # 1=use "void *" for anyptr's
  185. X                                # 0=use "char *" for anyptr's
  186. X                                # default=1 if AnsiC=1 or C++=1
  187. X
  188. XHasSignedChar                   # 1="signed char" and "signed int" are legal
  189. X                                # 0="signed ..." is not supported
  190. X                                # default=1 if AnsiC=1
  191. X
  192. XCastNull                        # 1=must type-cast NULL into specific types
  193. X                                # 0 or default=don't cast NULL
  194. X
  195. XCopyStructs                     # 0=no implicit copying of structs allowed
  196. X                                # 1=can assign but not pass to/from funcs
  197. X                                # 2=struct assignment and parameters only
  198. X                                # 3=can assign, pass, and return structs
  199. X                                # default=3 unless AnsiC=0
  200. X
  201. XVariableArrays                  # 1=allows variable-length arrays
  202. X                                # 0=array sizes must be constant
  203. X                                # default=1 for Gnu C, 0 otherwise
  204. X
  205. XReUseFieldNames                 # 1=can use same field name in many structs
  206. X                                # 0=field names must be globally unique
  207. X                                # default=1
  208. X
  209. XUseVExtern                      # 1 or default=assume strict ANSI linkage
  210. X                                # 0=UNIX-like "common" variable linkage
  211. X
  212. XUseAnyptrMacros                 # 1=use Anyptr, Signed, Static, etc. macros
  213. X                                # 0=use true C constructs as specified above
  214. X                # 2=use Static, Local, Char only
  215. X                # default=2 if AnsiC=1, else 1
  216. X
  217. XUsePPMacros                     # 1=use PP and PV macros for prototypes
  218. X                                # 0=do not use these macros for prototypes
  219. X                                # 2=use them only for external/forward
  220. X                # default=0 if AnsiC=1, else 2
  221. X
  222. X
  223. X
  224. X# TARGET MACHINE
  225. X
  226. XTarget                          # machine name, if any.  Specify this or answer
  227. X                                # the following questions to tailor the output
  228. X                                # program to a particular architecture.
  229. X                                # Machines known:
  230. X                                #   HPUX-300, SUN-68K, BSD-VAX, BSD, SYSV
  231. X
  232. XSignedChar                      # 1=char is signed, 0=char is unsigned,
  233. X                                # default=don't know
  234. X
  235. XSignedField                     # 1="int" bit-fields in structs are signed,
  236. X                                # 0="int" bit-fields are unsigned,
  237. X                                # default=don't know but probably signed
  238. X                                # 2=don't know, be paranoid
  239. X
  240. XSignedShift                     # 1=">>" does arithmetic (signed) shift,
  241. X                                # 0=">>" does logical shift even for ints,
  242. X                                # default=don't know but probably signed
  243. X                                # 2=don't know, be paranoid
  244. X
  245. XCharSize                        # size in bits of a char, default at least 8
  246. XShortSize                       # size in bits of a short, default at least 16
  247. XIntSize                         # size in bits of an int, default at least 16
  248. XLongSize                        # size in bits of a long, default at least 32
  249. XPtrSize                         # size in bits of a pointer.  If not all
  250. X                                # pointers have same size, must leave blank.
  251. XFloatSize                       # size in bits of a float
  252. XDoubleSize                      # size in bits of a double
  253. XEnumSize                        # size in bits of an enum
  254. X
  255. XSize_T_Long                     # 1=Ansi "size_t" type is long
  256. X                                # 0=Ansi "size_t" type is int
  257. X                                # default=don't know, probably long
  258. X
  259. X
  260. X
  261. X# BRACES AND PLACEMENT OF STATEMENTS
  262. X
  263. XNullStmtLine                    # 1=put null statements on their own lines,
  264. X                                # 0 or default=write "while (x) ;"
  265. X
  266. XBracesAlways                    # 1=use {braces} always,
  267. X                                # 0=never unless needed,
  268. X                                # default=use nice braces
  269. X
  270. XBraceLine                       # 1=always put open braces on a new line,
  271. X                                # 0=never put open brace on new line if poss,
  272. X                                # default=0 for sub-stmts, 1 for func bodies
  273. X
  274. XBraceCombine                    # 1=don't put newline after '{' if possible
  275. X                                # 0 or default=open brace always ends a line
  276. X
  277. XBraceElse                       # 1=put { } on both "then" and "else" if would
  278. X                                #   put them on either, default=independent
  279. X
  280. XBraceElseLine                   # 0 or default=write "} else {"
  281. X                                # 1=write "}\nelse {", 2=write "} else\n{"
  282. X                                # 3=write "}\nelse\n{"
  283. X
  284. XElseIf                          # 1=always write "else if" on same line
  285. X                                # 0=always write "else\nif"
  286. X                                # default=use "else if" only when input used it
  287. X
  288. XNewLineFuncs                    # 1=write "static int\nfoo()" in function defs
  289. X                                # 0 or default=write "static int foo()"
  290. X
  291. X
  292. X
  293. X# INDENTATION
  294. X
  295. XPhysTabSize                     # Spacing of tab-character tabs; default=8.
  296. X                                # 0=do not use tabs in output file.
  297. X
  298. XIndent                          # Basic indentation delta; default=+2.
  299. X                                # Indentation deltas specify an amount by which
  300. X                                # to change indentation; +n or -n specifies a
  301. X                                # relative adjustment, n specifies an absolute
  302. X                                # amount of indentation where 0=far left.
  303. X
  304. XBlockIndent                     # Indentation delta for statements enclosed
  305. X                                # in braces; applied after Indent.  Default=+0.
  306. X
  307. XSwitchIndent                    # Indentation delta for switch statement body;
  308. X                                # applied after Indent.  Default=+0.
  309. X
  310. XCaseIndent                      # Indentation delta for case labels; applied
  311. X                                # after Indent and SwitchIndent.  Default=-2.
  312. X
  313. XLabelIndent                     # Indentation delta for statement labels.
  314. X                                # Default is 0 (absolute).
  315. X
  316. XOpenBraceIndent                 # Indentation delta for the open brace that
  317. X                                # begins a block.  Used only if the brace is
  318. X                                # on its own line.  Default=+0.
  319. X
  320. XCloseBraceIndent                # Indentation delta for the close brace that
  321. X                                # ends a block.  Default=+0.
  322. X
  323. XFuncArgIndent                   # Indentation delta for function arguments.
  324. X                                # Default is 0.
  325. X
  326. XBodyIndent                      # Indentation delta for the body of a function;
  327. X                                # applied after Indent.  Default=+0.
  328. X
  329. XFuncOpenIndent                  # Indentation delta for the open brace that
  330. X                                # begins a function body.  Default=+0.
  331. X
  332. XFuncCloseIndent                 # Indentation delta for the close brace that
  333. X                                # ends a function body.  Default=+0.
  334. X
  335. XStructIndent                    # Indentation delta for "struct" declarations;
  336. X                                # applied after Indent.  Default=+0.
  337. X
  338. XStructInitIndent                # Indentation delta for struct and array
  339. X                                # initializers; applied after Indent.
  340. X                                # Default=+0.
  341. X
  342. XExtraInitIndent                 # Indentation delta for nested struct/array
  343. X                                # initializers; not combined with Indent.
  344. X                                # Default=+2.
  345. X
  346. XExtraIndent                     # Extra indentation for broken lines if
  347. X                                # indenting by nesting order is too much;
  348. X                                # default=+2:
  349. X                                #    long_function_name(arguments,
  350. X                                #        more_arguments);
  351. X                                #    1234
  352. X
  353. XBumpIndent                      # Extra indentation for subexpressions which
  354. X                                # coincide with next statement's indentation
  355. X                                # in a visually confusing way:
  356. X                                #     if (foo &&
  357. X                                #         bar)     <- this gets BumpIndent
  358. X                                #         spam();
  359. X                                # May be pos, neg or zero.  Default=+1.
  360. X
  361. XConstIndent                     # Target column for #defines; default=24.
  362. X                                # A positive relative value (e.g., +3) means
  363. X                                # to use that many spaces always rather than
  364. X                                # tabbing to a fixed column.  A value of the
  365. X                                # form, e.g., *5 means to tab to the next
  366. X                                # multiple-of-5 column.
  367. X
  368. XCommentIndent                   # Target column (as in ConstIndent) for
  369. X                                # comments trailing statements.  Another
  370. X                                # syntax is, e.g., "-80" which means to
  371. X                                # right-justify comments on an 80-column line.
  372. X                                # Default=+3.
  373. X
  374. XBraceCommentIndent              # Indentation for trailing comments on
  375. X                                # braces.  Default=+2.
  376. X
  377. XDeclCommentIndent               # Target column for comments trailing
  378. X                                # declarations.  Default=CommentIndent.
  379. X
  380. XCommentOverIndent               # If line is too long to indent nicely by
  381. X                                # CommentIndent or BraceCommentIndent, start
  382. X                                # a new line and indent according to this
  383. X                                # indentation, either n, +n, or -n.  Zero means
  384. X                                # never to start a new line.  Default=+4.
  385. X
  386. XMinSpacing                      # Minimum spacing allowed for things like
  387. X                                # absolute ConstIndent spacing.  Default=2,
  388. X                                # i.e., ConstIndent will always insert at
  389. X                                # least two spaces, even on long lines.
  390. X
  391. XMinSpacingThresh                # If specified, threshhold below which
  392. X                                # MinSpacing is used.  (Default=MinSpacing.)
  393. X                                # For example, if MinSpacingThresh=1:
  394. X                                #    foo  /*comment*/   (CommentIndent=5 used)
  395. X                                #    spam /*comment*/   (CommentIndent=5 used)
  396. X                                #    thing  /*comment*/ (MinSpacing=2 used)
  397. X
  398. X
  399. X
  400. X# LINE BREAKING
  401. X
  402. XLineWidth                       # Target max output line width; default=78.
  403. X
  404. XMaxLineWidth                    # Absolute max output line width; default=90.
  405. X
  406. XOverWidePenalty                 # Penalty for line lengths > LineWidth.
  407. X                                # Default=25.  (Penalties are real numbers.)
  408. X
  409. XOverWideExtraPenalty            # Additional penalty multiplied by
  410. X                                # number-of-chars-too-long squared.
  411. X                                # Default=1.  Total over-wide penalty is
  412. X                                #   OW = max(OWP + N^2*OWEP, 0).
  413. X
  414. XEarlyBreakPenalty               # Penalty for breaking at early break-points
  415. X                                # among those at a given nesting level.
  416. X                                # Default=1.  If N=number of possible break
  417. X                                # points before this one in this nesting,
  418. X                                #   EB = -N*EBP.
  419. X
  420. XCommaBreakPenalty               # Penalty for breaking lines after a comma.
  421. X                                # Default=10.
  422. X
  423. XCommaBreakExtraPenalty          # Additional penalty multiplied by nesting
  424. X                                # level of (number of parens enclosing) comma.
  425. X                                # Default=5.  Total comma-break penalty is
  426. X                                #   B = max(P + CBP + N*CBEP, 1.0)
  427. X                                # where
  428. X                                #   P = OW + EB + SIP + IP  (defined elsewhere)
  429. X
  430. XSpecialArgBreakPenalty          # Penalty for breaking lines after a comma
  431. X                                # which follows a "special" argument, such
  432. X                                # as the format string of a printf.  Default=5.
  433. X
  434. XOpBreakPenalty                  # Penalty for breaking at an operator (like +).
  435. X                                # Analogous to CommaBreakPenalty; default=25.
  436. X
  437. XOpBreakExtraPenalty             # Additional penalty multiplied by nesting
  438. X                                # level of the operator.  Default=20.
  439. X
  440. XExHyphenPenalty                 # Additional penalty for breaking a line just
  441. X                                # after a minus sign.  Default=10.  :-)
  442. X
  443. XAssignBreakPenalty              # Penalty for breaking at an assignment
  444. X                                # operator.  Default=50.
  445. X
  446. XAssignBreakExtraPenalty         # Additional penalty multiplied by nesting
  447. X                                # level of the assignment.  Default=30.
  448. X
  449. XQMarkBreakPenalty               # Penalty for breaking lines at the "?" of
  450. X                                # a "?:" operator.  Default=50.  (Colons
  451. X                                # get the regular OpBreakPenalty.)
  452. X
  453. XQMarkBreakExtraPenalty          # Additional penalty multiplied by nesting
  454. X                                # level of the "?:" operator.  Default=30.
  455. X
  456. XParenBreakPenalty               # Penalty for breaking after an open paren
  457. X                                # in a function call:
  458. X                                #   long_function_name(
  459. X                                #       very_long_argument);
  460. X                                # Default=25.
  461. X
  462. XParenBreakExtraPenalty          # Additional penalty multiplied by nesting
  463. X                                # level of the parentheses.  Default=10.
  464. X
  465. XMoreBreakPenalty                # Adjustment to CommaBreakPenalty, etc.,
  466. X                                # if it is the second or later break in the
  467. X                                # same nesting.  (E.g., if two or more commas
  468. X                                # of a function call are broken.)  Default=-5.
  469. X
  470. XMoreBreakExtraPenalty           # Adjustment to CommaBreakExtraPenalty, etc.,
  471. X                                # as in MoreBreakPenalty.  Default=-3.
  472. X
  473. XWrongSidePenalty                # Extra penalty for breaking on the less
  474. X                                # preferred side of an operator (see BreakArith
  475. X                                # et al below).  Default=10.
  476. X
  477. XExtraIndentPenalty              # Penalty for indenting by ExtraIndent instead
  478. X                                # of according to nesting order.  If negative,
  479. X                                # -EIP is penalty for *not* using ExtraIndent.
  480. X                                # Default=30.
  481. X
  482. XBumpIndentPenalty               # Penalty for using BumpIndent for identation.
  483. X                                # Default=10.
  484. X
  485. XNoBumpIndentPenalty             # Penalty for not using BumpIndent when it
  486. X                                # ought to have been used.  Default=25.
  487. X
  488. XIndentAmountPenalty             # Penalty for indentation; for a line indented
  489. X                                # N spaces (beyond the indentation of the
  490. X                                # statement as a whole),
  491. X                                #   IP = N*IAP.
  492. X                                # Default=0.5.
  493. X
  494. XSameIndentPenalty               # Penalty for indenting two successive lines
  495. X                                # the same even though they belong to different
  496. X                                # nesting levels:
  497. X                                #   foo = x +
  498. X                                #         y *
  499. X                                #         z
  500. X                                # Default=5.
  501. X
  502. XMaxLineBreakTries               # Limit to the number of line breaking
  503. X                                # alternatives to be tried.  Default=5000.
  504. X
  505. XAllOrNoneBreak                  # List of functions for which arguments must
  506. XAllOrNoneBreak                  # be written all on one line or all on separate
  507. XAllOrNoneBreak                  # lines.  (A given function may have only one
  508. XAllOrNoneBreak                  # of this and the following break properties.)
  509. X
  510. XOneSpecialArg   printf          # List of functions like printf for which the
  511. XOneSpecialArg                   # first argument is "special", remaining args
  512. XOneSpecialArg                   # are uniform.
  513. X
  514. XTwoSpecialArgs  sprintf         # List of functions like fprintf for which the
  515. XTwoSpecialArgs  fprintf         # first two arguments are "special".
  516. X
  517. XThreeSpecialArgs                # List of functions for which the first three
  518. XThreeSpecialArgs                # arguments are "special".
  519. X
  520. XBreakArith                      # Options string for how to break lines at
  521. X                                # arithmetic operators.  One or more of:
  522. X                                #   L  Break on left side of operator.
  523. X                                #   R  Break on right side of operator.
  524. X                                #   H  Same as L, but use "hanging" indent.
  525. X                                #   N  No breaking.
  526. X                                #  L>R Break either way, L preferred (or R<L).
  527. X                                #  R>L Break either way, R preferred (or L<R).
  528. X                                #  L=R Break either way equally (or LR).
  529. X                                #   A  (with above) Use all-or-none breaking.
  530. X                                # Default is R.
  531. X
  532. XBreakRel                        # Same for relational ops (==, <, etc.)
  533. X
  534. XBreakLog                        # Same for logical operators && and ||
  535. X
  536. XBreakDot                        # Same for dot operators . and ->
  537. X
  538. XBreakAssign                     # Same for assignments.
  539. X
  540. XFor_AllOrNone                   # 1 or default=all-or-none breaking of the
  541. X                                # three clauses of a "for" statement.  0=plain.
  542. X
  543. X
  544. X
  545. X# COMMENTS AND BLANK LINES
  546. X
  547. XEatComments                     # 1=don't copy any comments into C code
  548. X                                # 2=don't copy comments inside procedures
  549. X                                # 0 or default=keep all comments
  550. X
  551. XSpitComments                    # 1=spit out all comments between procedures
  552. X                                # 0 or default=try to attach comments to code
  553. X
  554. XSpitOrphanComments              # 1=spit out comments whose orig stmts are lost
  555. X                                # 0 or default=attach orphans to nearby code
  556. X
  557. XCommentAfter                    # 1=assume comments follow statements
  558. X                                # 0 or default=assume comments precede stmts
  559. X                                # (in case statements are rearranged.)
  560. X
  561. XBlankAfter                      # 1 or default=assume blank lines follow stmts
  562. X                                # 0=assume blanks precede statements
  563. X
  564. XMajorSpacing                    # Minimum number of blank lines between major
  565. X                                # sections of code, default=2.
  566. X
  567. XMinorSpacing                    # Minimum number of blank lines between minor
  568. X                                # sections, default=1.
  569. X
  570. XFuncSpacing                     # Minimum number of blank lines between global
  571. X                                # functions, default=2.
  572. X
  573. XMinFuncSpacing                  # Minimum number of blank lines separating
  574. X                                # sub-procedures, default=1.
  575. X
  576. XEatNotes            # Suppress any notes whose text contains these
  577. XEatNotes            # words.  Example: "EatNotes Spam [216]"
  578. XEatNotes            # suppresses notes with "Spam" or "[216]".
  579. X
  580. X
  581. X
  582. X# SPECIAL COMMENTS
  583. X
  584. XFixedComment      FIXED        # Comment for fixed upper limit of FOR loops:
  585. X                #   for i:=1 to N do {FIXED}
  586. X                # will suppress use of a FORLIM for N.
  587. X                # Case-sensitive; no spaces allowed.
  588. X
  589. XPermanentComment  PERMANENT    # Comment for permanently imported modules,
  590. X                # such as "system".
  591. X
  592. XInterfaceComment  INTF-ONLY    # Comment for include files which are to be
  593. X                # treated as unit interface text, i.e., are
  594. X                # to be read without generating C code.
  595. X
  596. XEmbedComment      EMBED        # Comment for embedded C code in Pascal:
  597. X                #   {EMBED
  598. X                                #   printf("stuff\n");
  599. X                                #   }
  600. X                # Use \[ \] for curly braces within embedded
  601. X                # code.  May appear in any context where
  602. X                # comments are used.
  603. X
  604. XSkipComment       SKIP        # Comment for code to skip in p2c only:
  605. X                #   {SKIP} writeln('Not in p2c'); {NOSKIP}
  606. X
  607. XNoSkipComment     NOSKIP        # Comment for code to skip except in p2c:
  608. X                                #   {NOSKIP writeln('Only in p2c'); }
  609. X                # Can be used in if-then-else fashion:
  610. X                #   {SKIP} foo; {NOSKIP bar; }
  611. X
  612. XSignedComment     SIGNED        # Type annotation: var c : {SIGNED} char;
  613. X
  614. XUnsignedComment   UNSIGNED      # Type annotation: type uc = {UNSIGNED} char;
  615. X
  616. X
  617. X
  618. X
  619. X# STYLISTIC OPTIONS
  620. X
  621. XExtraParens                     # 1=use many parentheses for readability,
  622. X                                # 2=use even more parentheses,
  623. X                                # 0=use minimal parens,
  624. X                                # default=use nice parens
  625. X
  626. XBreakAddParens                  # 1=always add parens for operators broken
  627. X                                # across lines.  0=never, default=nice parens
  628. X
  629. XReturnParens                    # 1=write "return (x)"
  630. X                                # 0=write "return x"
  631. X                                # default=omit parens for trivial expressions
  632. X
  633. XSpaceExprs                      # 1=use many spaces in expressions,
  634. X                                # 0=use minimal spaces in expressions,
  635. X                                # default=use nice spacing
  636. X
  637. XImplicitZero                    # 1=generate "if (x)" rather than "if (x!=0)"
  638. X                                # 0=always generate explicit comparisons
  639. X                                # default=only with strcmp and other idioms
  640. X
  641. XStarIndex                       # 1=always use "*a"
  642. X                                # 0=always use "a[0]"
  643. X                                # default=use "*a" only in common idioms
  644. X
  645. XAddIndex                        # 1=always use "a + n"
  646. X                                # 0=always use "&a[n]"
  647. X                                # default=use "a+n" only in common idioms
  648. X
  649. XStarArrays            # 1 or default=write "f(int *a)" for array a
  650. X                # 0=write "f(int a[10])"
  651. X                # 2=write "f(int a[])"
  652. X
  653. XStarFunctions                   # 1=write "(*fp)(x,y)" to call thru func ptr
  654. X                                # 0=write "fp(x,y)"
  655. X                                # default=1 unless AnsiC=1
  656. X
  657. XPostIncrement                   # 1 or default=write i++ preferentially
  658. X                                # 0=write ++i preferentially
  659. X
  660. XCaseSpacing                     # Number of blank lines between CASE sections,
  661. X                                # default=0.
  662. X
  663. XCaseTabs                        # 0 or default=put each CASE on its own line.
  664. X                                # Else this is an amount by which to space
  665. X                                # cases on same line, either +n or *n in the
  666. X                                # style of ConstIndent.
  667. X
  668. XCaseLimit                       # Maximum number of options in a CASE subrange
  669. X                                # that will be expanded out in-line; more than
  670. X                                # this moves to an "if" in the default clause.
  671. X                                # Default=9.
  672. X
  673. XUseCommas                       # 1=use comma operator when convenient
  674. X                                # 0=do not use comma operator
  675. X                                # default=use comma operator when necessary
  676. X
  677. XUseReturns                      # 1 or default=introduce "return" statements
  678. X                                # 0=do not rearrange to use "return"
  679. X
  680. XReturnLimit                     # Need at least this many statements in an
  681. X                                # "if" block before "return" rearrangement;
  682. X                                # default=3
  683. X
  684. XUseBreaks                       # 1 or default=introduce "break"/"continue"
  685. X                                # 0=do not use "break" and "continue"
  686. X
  687. XBreakLimit                      # Need at least this many statements in an
  688. X                                # "if" block before "break" rearrangement;
  689. X                                # default=2
  690. X
  691. XContinueLimit                   # Need at least this many statements in an
  692. X                                # "if" block before "continue" rearrangement;
  693. X                                # default=5
  694. X
  695. XInfLoopStyle                    # 0 or default=follow the source file
  696. X                                # 1=use "for (;;) ..." for all infinite loops
  697. X                                # 2=use "while (1) ..."
  698. X                                # 3=use "do ... while (1)"
  699. X
  700. XNullChar                        # 1 or default=write '\0' for null character
  701. X                                # 0=write 0 for null character constant
  702. X
  703. XHighCharInt                     # 1 or default=write '\200' as 128 and above
  704. X                                # 0=write all char consts as characters
  705. X
  706. XMixVars                         # 1=mix all vars of same base type: int a,b;
  707. X                                # 0=never mix variables: int a; int b;
  708. X                                # default=mix only adjacent variables
  709. X
  710. XMixTypes                        # 1=mix all var types: int a,*b,c[5];
  711. X                                # 0=never mix variables with different types
  712. X                                # default=pointers only: int a,*b; int c[5];
  713. X
  714. XMixFields                       # 1=mix bit-fields just like other vars
  715. X                                # 0=only one bit-field per declaration
  716. X                                # default=1
  717. X
  718. XMixInits                        # 1=always mix variables with initializers
  719. X                                # 0=never mix variables with initializers
  720. X                                # default=mix with-inits with other with-inits
  721. X
  722. XMainLocals                      # 1 or default=make globals local to main if poss
  723. X                                # 0=globals are always made global
  724. X
  725. X
  726. X
  727. X# CODING OPTIONS
  728. X
  729. XInitialCalls            # Initial function calls (or other brief C
  730. XInitialCalls            # statements) to put at front of main program.
  731. XInitialCalls            # E.g.: InitialCalls setup_buffer()
  732. X
  733. XExpandIncludes                  # 1 or default=expand include files into output
  734. X                                # 0=convert Pascal include to #include
  735. X
  736. XCollectNest            # 1 or default=collect sub-procs, emit at end.
  737. X                # 0=emit sub-procedures one by one; this will
  738. X                #   produce bad code but is useful with
  739. X                #   ExpandIncludes=0.
  740. X
  741. XShortCircuit                    # 1=use &&, 0=use & for boolean AND, also OR.
  742. X                                # default=1 for Turbo/HP-UX, 0 for HP Pascal
  743. X                #   may be overridden by {$B} / $partial_eval$
  744. X
  745. XShortOpt                        # 1 or default=optimize a&b to a&&b if equiv
  746. X                                # 0=always use a&b, depending on ShortCircuit
  747. X
  748. XElimDeadCode                    # 1 or default=eliminate unreachable code
  749. X                                # 0=leave unreachable code in place
  750. X
  751. XFoldConstants                   # 1=instantiate non-structure const's in-line
  752. X                                #   (applies to int, char, boolean, enum, real)
  753. X                                # 0 or default=use #define's for constants
  754. X                                # 0 causes constant to be completely symbolic;
  755. X                                # default sometimes instantiates if convenient.
  756. X                                # A constant is folded if FoldConstants=1
  757. X                                # either when the const was defined, or when
  758. X                                # it was referenced.
  759. X
  760. XFoldStrConstants                # 1=instantiate string const's in-line, as above
  761. X                                # 0 or default=use #define's for string const's
  762. X
  763. XUseConsts                       # 1=use "const" keyword in C
  764. X                # 2=use "Const" form even if UseAnyptrMacros=0
  765. X                                # 0=do not use "const" declarations
  766. X                                # default=1 if AnsiC=1 or C++=1
  767. X
  768. XUseUndef            # 1=use "#undef" when #defines go out of scope
  769. X                # 0=do not use "#undef", default=1.
  770. X
  771. XStoreFileNames                  # 1=store file names associated with file vars
  772. X                                # 0=let the system record the name
  773. X                                # default=1 in Turbo Pascal, 0 otherwise.
  774. X
  775. XSqueezeSubr                     # 1 or default=squeeze subranges into char, etc.
  776. X                                # 0=use only short's and int's (or long's).
  777. X
  778. XUseEnum                         # 1=use C "enum" types
  779. X                                # 0=use integers for enumerations
  780. X                                # default=1 unless AnsiC=0
  781. X
  782. XSqueezeEnum            # 1=use bytes for small enums, when UseEnum=0
  783. X                # 0=use shorts always
  784. X                # default=0 for HP Pascal, 1 otherwise.
  785. X
  786. XCompEnums                       # 1=okay to compare enums directly
  787. X                                # 0=cast enums to ints for comparisons
  788. X                                # default=0 unless AnsiC=1.
  789. X
  790. XPacking                         # 1 or default=fully packed records and arrays
  791. X                                # 0=ignore "packed" keyword
  792. X                                # 2=pack to bytes, but not bits
  793. X
  794. XPackSigned                      # 1=implement packed arrays of signed values
  795. X                                # 0=only pack unsigned arrays
  796. X                                # default=1
  797. X
  798. XSkipIndices                     # Number of vacant array indices allowable,
  799. X                                # default 0.  If 1, then array [1..10] is
  800. X                                # converted to array [11], but array [2..10]
  801. X                                # would be converted as array [9] with offsets.
  802. X
  803. XOffsetForLoops                  # 1=adjust loops where index is always used
  804. X                                #   as, e.g., i-1 by offsetting the index.
  805. X                                # 0=leave them alone.  Default=1.
  806. X
  807. XForEvalOrder                    # 1=in for x:=y to z, force eval of y before z.
  808. X                                # 0 or default=evaluation order unimportant.
  809. X
  810. XStringLeaders                   # Number of leading '>' placeholder characters
  811. X                                # that can be prepended to a string literal.
  812. X                                # Default is 3.
  813. X
  814. XStringCeiling                   # Maximum size for strings.  Default is 255.
  815. X                                # If > 255, allows some "slop" in strings.
  816. X                                # If < 255, shortens large strings.
  817. X
  818. XStringDefault                   # Size of string declared without [ ] brackets.
  819. X                                # Default is 255.
  820. X
  821. XStringTruncLimit                # Minimum size of strings for which a warning
  822. X                                # is generated when assigned possibly longer
  823. X                                # strings.  These are assignments to check if
  824. X                                # Turbo-like truncation is necessary.
  825. X                                # Default is 80 for Turbo, 0 otherwise.
  826. X
  827. XLongStringSize                  # Smallest string which can be considered
  828. X                                # "arbitrarily long"; default=StringCeiling.
  829. X
  830. XKeepNulls                       # 1=try to preserve null (#0) chars in strings
  831. X                                # 0 or default=ignore them (but warn)
  832. X
  833. XHighCharBits                    # 1=convert "ch >= 128" to "(ch & ~127) != 0"
  834. X                                # 2=convert "ch >= 127" to "(ch & 128) != 0"
  835. X                                # 0=do not use bit ops for high characters
  836. X                                # default=1 only if ch's signed-ness is unknown
  837. X
  838. XStaticFunctions                 # 1 or default=use "static" for private funcs
  839. X                                # 0=don't create static functions
  840. X
  841. XStaticVariables                 # 1 or default=use "static" for private vars
  842. X                                # 0=don't create static global vars
  843. X
  844. XNeedStatic                      # Names of functions or variables which
  845. X                                # need to be declared static despite
  846. X                                # StaticFunctions=0 or StaticVariables=0.
  847. X
  848. XAlwaysCopyValues                # 1=always make a local copy of a parameter
  849. X                                # 0 or default=only if it appears to be changed
  850. X
  851. XVoidArgs                        # 1=write "f(void)" for funcs with no args
  852. X                                # 0=write "f()" for funcs with no args
  853. X                                # default=depends on AnsiC and C++
  854. X
  855. XPrototypes                      # 1=write "f(int a, int b)"
  856. X                                # 2=write "f(int, int)" when possible
  857. X                                # 0=write "f(a, b) \n int a, b;"
  858. X                                # default=depends of AnsiC and C++
  859. X
  860. XFullPrototyping                 # 1 or default=use prototypes everywhere
  861. X                                # 0=use prototypes only for forward/extern
  862. X
  863. XProcPtrPrototypes               # 1 or default=use prototypes for C func ptrs
  864. X                                # 0=always write, e.g., int (*fp)();
  865. X
  866. XCastArgs                        # 1=include argument casts if needed: (double)i
  867. X                                # 0=do not include argument casts (dangerous!)
  868. X                                # default=do not cast if func has a prototype
  869. X
  870. XCastLongArgs                    # 1=include int/long argument casts if needed
  871. X                                # 0=do not cast between int and long
  872. X                                # default=follow CastArgs
  873. X
  874. XPromoteArgs                     # 1=promote e.g. short to int in prototypes
  875. X                                # 0=do not promote in prototypes
  876. X                                # default=only when prototyping forwards only
  877. X
  878. XPromoteEnums            # 1=promote enum to int when promoting args
  879. X                # 0=leave enums alone in prototypes
  880. X                # default=only when UseEnum=0
  881. X
  882. XStaticLinks                     # 1=use _PROCEDURE (ProcTypeName) for proc ptrs
  883. X                                # 2=use _PROCEDURE but assume only global procs
  884. X                                # 0=use C function pointers, no static links
  885. X                                # default=1 in HP, 0 in Turbo Pascal
  886. X
  887. XVarStrings                      # 1=full support for "var s:string" params
  888. X                #   and HP Pascal's strmax function
  889. X                                # 0=assume all var s:string's are string[255]
  890. X                                # default=0 always; may need 1 for some
  891. X                                #   HP Pascal programs
  892. X
  893. XVarFiles                        # 1 or default="var f : file" params use &
  894. X                                # 0=pass FILE *'s by value; must not open or
  895. X                                #   close the file within the procedure
  896. X
  897. XAddrStdFiles                    # 1=okay to write "&stdout", etc.
  898. X                                # 0 or default=not okay
  899. X
  900. XCopyStructFuncs                 # 1=write "temp = f(); temp.field"
  901. X                                # 0=write "f().field"
  902. X                                # default=1 unless AnsiC=1
  903. X
  904. XAtan2                           # 1=convert arctan(a/b) to atan2(a,b)
  905. X                                # 0 or default=convert it to atan(a/b)
  906. X
  907. XBitwiseMod                      # 1 or default=convert x mod 16 to x&15
  908. X                                # 0=convert x mod 16 to x%16
  909. X
  910. XBitwiseDiv                      # 1=convert x div 16 to x>>4
  911. X                                # 0 or default=convert x div 16 to x/16
  912. X
  913. XAssumeBits                      # 1=assume args of funcs like na_po2 are
  914. X                                #   within reasonable range; write 1<<x.
  915. X                                # 0 or default=no assumptions; write na_po2
  916. X
  917. XAssumeSigns                     # 1 or default=for e.g. na_lsl, assume
  918. X                                #   "x" is positive, "-x" is negative.
  919. X                                # 0=no assumptions (except for constants!)
  920. X
  921. XAllocZeroNil                    # 1=na_new(p,0) must set p to nil
  922. X                                # 0 or default=not necessary
  923. X                                # 2=not necessary, but print a warning
  924. X
  925. XPrintfOnly                      # 1=don't use puts, putc, etc., in WRITE
  926. X                                # 0=use puts, etc., as well as printf
  927. X                                # default=a pleasing compromise
  928. X
  929. XMixWritelns                     # 1 or default=writeln;writeln=>printf("\n\n")
  930. X                                # 0=don't mix consecutive writeln stmts
  931. X
  932. XIntegerWidth                    # Default field width for writing integers.
  933. X                                # Default is 1 for Turbo, 12 for HP.
  934. X
  935. XRealWidth                       # Default field width for writing reals.
  936. X                                # Default is 12.
  937. X
  938. XFormatStrings                   # 1=full support for write(string:width)
  939. X                                # 0 or default=':width' only stretches
  940. X
  941. XWhileFgets                      # 1 or default=while (fgets(...)) { ... }
  942. X                                # 0=while (!eof(...)) { fgets(...); ... }
  943. X
  944. XUseGets                         # 1 or default=use gets to read string[255]
  945. X                                # 0=always use fgets (with length checking)
  946. X
  947. XNewLineSpace                    # 1=convert \n to ' ' in read(ch)
  948. X                                # 0=leave newlines alone reading characters
  949. X                                # default=0 in Turbo Pascal, 1 otherwise
  950. X
  951. XBuildReads                      # 1=combine x:=f^;get(f) into read(f,x)
  952. X                                # 2=only for text files and files of char
  953. X                                # 0=leave it alone; default=1
  954. X
  955. XBuildWrites                     # 1=combine f^:=x;put(f) into write(f,x)
  956. X                                # 2=only for text files and files of char
  957. X                                # 0=leave it alone; default=1
  958. X
  959. XBinaryMode                      # 1 or default=fopen binary files as, say, "rb"
  960. X                                # 0=fopen binary files as "r"
  961. X                                # 2=fopen binary files as "r" with a warning
  962. X
  963. XReadWriteOpen            # 1=RESET/REWRITE open binary files read/write
  964. X                # 0=RESET opens read-only, REWRITE write-only
  965. X                # 2=Open all files (text and binary) read/write
  966. X                # default=1 in Turbo, 0 otherwise.
  967. X
  968. XOpenMode                        # fopen mode string to use for Pascal open
  969. X                                # statement.  Use a+ if that mode allows
  970. X                                # seeking.  Default=build out of ANSI modes
  971. X
  972. XFileNameFilter            # Name of a function to call which converts
  973. X                                # a file name into a form usable by fopen;
  974. X                                # if name must be changed this should return
  975. X                # a pointer to a static buffer.
  976. X                                # Not used for constant names.  "0"=no filter.
  977. X                # default=P_trimname for Oregon/Berk, else 0
  978. X
  979. XLiteralFiles            # 0=nameless rewrite(f) generates a temp file
  980. X                # 1=nameless rewrite(f) uses "f" as file name
  981. X                # 2=like 1 only if f appeared in "program" stmt
  982. X                # default=2 for Berkeley, else 0.
  983. X
  984. XLiteralFile            # A file variable which should be treated as
  985. XLiteralFile            # if LiteralFiles=1.  If LiteralFiles=2, files
  986. XLiteralFile            # in program header are added to this list.
  987. X
  988. XFullStrWrite                    # 1=full implementation of strwrite(s,i,j,...)
  989. X                                # 0=ignore "j" variable and other issues
  990. X                                # default=assign "j", assume not mid-string
  991. X                                # 2=like default, but issue a warning
  992. X
  993. XFullStrRead                     # 1 or default=full impl of strread using "%n"
  994. X                                # 0=fake the value of "j"
  995. X                                # 2=like default, but issue a warning
  996. X
  997. XSetBits                         # Number of bits to use in each "long" of a set
  998. X                                # default=LongSize if defined, else 32
  999. X
  1000. XDefaultSetSize                  # Default size of un-typed set constants;
  1001. X                                # default default=256 for VAX, else 8192
  1002. X
  1003. XSmallSetConst                   # 0=write small-set literals like "1<<2|1<<4"
  1004. X                                # 1=write them like "0x14"
  1005. X                                # 2=write them like "20"
  1006. X                                # -1=do not use small-sets at all
  1007. X                                # default=-1 if SetBitsName defined, else 1
  1008. X
  1009. XBigSetConst                     # (analogous to SmallSetConst for big sets)
  1010. X
  1011. XLeLeRange                       # 1=write "j in [1..10]" as "1<=j && j<=10"
  1012. X                                # 0 or default=write ... as "j>=1 && j<=10"
  1013. X
  1014. XUnsignedTrick                   # 1 or default=write "(unsigned)i <= 10"
  1015. X                                # 0=leave "i >= 0 && i <= 10" alone
  1016. X
  1017. XUseIsAlpha                      # 1 or default=use "isalpha", "isdigit", etc.
  1018. X                                # 0=use plain comparisons
  1019. X
  1020. XUseIsSpace                      # 1=convert "c==' '" to "isspace(c)"
  1021. X                                # 0 or default=leave it alone
  1022. X
  1023. XUseStrncmp            # 1=use strncmp to compare packed array of char
  1024. X                # 0=use memcmp, same as for all other arrays
  1025. X                # default=1
  1026. X
  1027. X
  1028. X
  1029. X# NAMING CONVENTIONS
  1030. X
  1031. XCodeFileName      %Rs.c         # Name of .c output file for a program,
  1032. X                                # %s=input file name.
  1033. X
  1034. XModuleFileName    %_S.c         # Name of .c output file for a module,
  1035. X                                # %s=input file name, %S=module name.
  1036. X
  1037. XHeaderFileName    %_S.h         # Name of .h output file for a module,
  1038. X                                # %s=input file name, %S=module name.
  1039. X
  1040. XHeaderFileName2                 # If defined, different format to use when
  1041. X                                # generating #include's, otherwise same.
  1042. X                                # May be quoted as in IncludeFrom.
  1043. X
  1044. XLogFileName       %RS.log       # Name of log file name for -V mode.
  1045. X                                # %s=input file name, %S=output file name.
  1046. X
  1047. XIncludeFileName                 # Format for translating Pascal include-file
  1048. X                # names.
  1049. X
  1050. XSymCase                         # 1 or default=preserve case of Pascal idents,
  1051. X                                # 0=convert all Pascal idents to lower case
  1052. X
  1053. XSymbolFormat                    # Format for C identifiers derived from
  1054. X                                # Pascal ones; default=%s.  The following
  1055. X                                # specific formats override this one.
  1056. X                                # %s=original Pascal identifier,
  1057. END_OF_FILE
  1058. if test 49793 -ne `wc -c <'src/sys.p2crc.1'`; then
  1059.     echo shar: \"'src/sys.p2crc.1'\" unpacked with wrong size!
  1060. fi
  1061. # end of 'src/sys.p2crc.1'
  1062. fi
  1063. echo shar: End of archive 32 \(of 32\).
  1064. cp /dev/null ark32isdone
  1065. MISSING=""
  1066. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ; do
  1067.     if test ! -f ark${I}isdone ; then
  1068.     MISSING="${MISSING} ${I}"
  1069.     fi
  1070. done
  1071. if test "${MISSING}" = "" ; then
  1072.     echo You have unpacked all 32 archives.
  1073.     echo "Now see PACKNOTES and the README"
  1074.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1075. else
  1076.     echo You still need to unpack the following archives:
  1077.     echo "        " ${MISSING}
  1078. fi
  1079. ##  End of shell archive.
  1080. exit 0
  1081.