home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume39 / par131 / part01 < prev    next >
Encoding:
Text File  |  1993-09-11  |  48.3 KB  |  1,205 lines

  1. Newsgroups: comp.sources.misc
  2. From: amc@wuecl.wustl.edu (Adam Costello)
  3. Subject: v39i083:  par131 - paragraph reformatter, v1.31, Part01/03
  4. Message-ID: <csm-v39i083=par131.093602@sparky.Sterling.COM>
  5. X-Md4-Signature: c35bc72f0101e735399de84c0b4c893b
  6. Sender: kent@sparky.sterling.com (Kent Landfield)
  7. Organization: Sterling Software
  8. Date: Sat, 11 Sep 1993 14:36:27 GMT
  9. Approved: kent@sparky.sterling.com
  10.  
  11. Submitted-by: amc@wuecl.wustl.edu (Adam Costello)
  12. Posting-number: Volume 39, Issue 83
  13. Archive-name: par131/part01
  14. Environment: ANSI-C
  15. Supersedes: par: Volume 39, Issue 40-42
  16.  
  17. Par 1.31 is a package containing documentation and ANSI C source code
  18. for the filter "par".
  19.  
  20. par is a paragraph reformatter, vaguely similar to fmt, but better.
  21.  
  22. For example, the command "par 44qgc", given the input:
  23.  
  24.         John Q. Public writes:
  25.         > Jane Doe writes:
  26.         > > May I remind people that this newsgroup
  27.         > > is for posting binaries only.  Please keep
  28.         > > all discussion in .d where it belongs.
  29.         > Who appointed you net.god?  alt groups are
  30.         > UNmoderated.
  31.         Could you two please take this to e-mail?
  32.  
  33. Would produce the output:
  34.  
  35.         John Q. Public writes:
  36.  
  37.         > Jane Doe writes:
  38.         >
  39.         > > May I remind people that this
  40.         > > newsgroup is for posting
  41.         > > binaries only.  Please keep
  42.         > > all discussion in .d where it
  43.         > > belongs.
  44.         >
  45.         > Who appointed you net.god?  alt
  46.         > groups are UNmoderated.
  47.  
  48.         Could you two please take this to
  49.         e-mail?
  50.  
  51. Be sure to read "par.doc".
  52.  
  53. AMC
  54. amc@ecl.wustl.edu (Adam M. Costello)
  55.  
  56. #! /bin/sh
  57. # This is a shell archive.  Remove anything before this line, then unpack
  58. # it by saving it into a file and typing "sh file".  To overwrite existing
  59. # files, type "sh file -c".  You can also feed this as standard input via
  60. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  61. # will see the following message at the end:
  62. #        "End of shell archive."
  63. # Contents:  Par131 Par131/par.doc Par131/protoMakefile
  64. # Wrapped by amc@wuecl on Fri Sep 10 18:46:17 1993
  65. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  66. if test ! -d 'Par131' ; then
  67.     echo shar: Creating directory \"'Par131'\"
  68.     mkdir 'Par131'
  69. fi
  70. if test -f 'Par131/par.doc' -a "${1}" != "-c" ; then 
  71.   echo shar: Will not clobber existing file \"'Par131/par.doc'\"
  72. else
  73. echo shar: Extracting \"'Par131/par.doc'\" \(43573 characters\)
  74. sed "s/^X//" >'Par131/par.doc' <<'END_OF_FILE'
  75. X  *********************
  76. X  * par.doc           *
  77. X  * for Par 1.31      *
  78. X  * Copyright 1993 by *
  79. X  * Adam M. Costello  *
  80. X  *********************
  81. X
  82. X
  83. X    Par 1.31 is a package containing:
  84. X
  85. X       + This doc file.
  86. X       + A man page based on this doc file.
  87. X       + The ANSI C source for the filter "par".
  88. X
  89. X
  90. XContents
  91. X
  92. X    Contents
  93. X    File List
  94. X    Rights and Responsibilities
  95. X    Release Notes
  96. X    Compilation
  97. X    Synopsis
  98. X    Description
  99. X    Terminology
  100. X    Options
  101. X    Environment
  102. X    Details
  103. X    Diagnostics
  104. X    Examples
  105. X    Limitations
  106. X    Bugs
  107. X
  108. X
  109. XFile List
  110. X
  111. X    The Par 1.31 package is always distributed with at least the following
  112. X    files:
  113. X
  114. X        buffer.c
  115. X        buffer.h
  116. X        charset.c
  117. X        charset.h
  118. X        failf.c
  119. X        failf.h
  120. X        par.1
  121. X        par.c
  122. X        par.doc
  123. X        protoMakefile
  124. X        reformat.c
  125. X        reformat.h
  126. X
  127. X    Each file is a text file which identifies itself on the second line, and
  128. X    identifies the version of Par to which it belongs on the third line,
  129. X    so you can always tell which file is which, even if the files have been
  130. X    renamed.
  131. X
  132. X    The file "par.1" is a man page for the filter par (not to be confused
  133. X    with the package Par, which contains the source code for par).  "par.1"
  134. X    is based on this doc file, and conveys much (not all) of the same
  135. X    information, but "par.doc" is the definitive documentation for both par
  136. X    and Par.
  137. X
  138. X
  139. XRights and Responsibilities
  140. X
  141. X    The files listed in the Files List section above are each Copyright 1993
  142. X    by Adam M. Costello (henceforth "I").
  143. X
  144. X    I grant everyone permission to use these files in any way, subject to
  145. X    the following two restrictions:
  146. X
  147. X     1) No one may distribute modifications of any of the files unless I am
  148. X        the one who modified them.
  149. X
  150. X     2) No one may distribute any one of the files unless it is accompanied
  151. X        by all of the other files.
  152. X
  153. X    I cannot disallow the distribution of patches, but I would prefer that
  154. X    users send me suggestions for changes so that I can incorporate them
  155. X    into future versions of Par.  See the Bugs section for my addresses.
  156. X
  157. X    Though I have tried to make sure that Par is free of bugs, I make no
  158. X    guarantees about its soundness.  Therefore, I am not responsible for any
  159. X    damage resulting from the use of these files.
  160. X
  161. X
  162. XRelease Notes
  163. X
  164. X    Each entry below describes changes since the previous version.
  165. X
  166. X    Par 1.00 released 25 July 1993
  167. X        The first release.
  168. X
  169. X    Par 1.10 released 2 August 1993
  170. X        Fixed the following bugs:
  171. X            In reformat.c I used sprintf() but forgot to #include <stdio.h>.
  172. X            I forgot to verify that <width> > <prefix> + <suffix>.
  173. X            The first word of a paragraph was expanded to include initial
  174. X            white characters, not just spaces, contrary to par.doc.
  175. X            Some invalid options were not complained about.
  176. X            NUL characters in the input were not handled.
  177. X            A pointer foul-up in freelines() in par.c could cause a crash.
  178. X        Added the following features:
  179. X            The f, j, and t options.
  180. X            The PARBODY environment variable.
  181. X            Multiple options may be concatenated into a single argument.
  182. X        Removed the m option:
  183. X            Its function is better performed by the f and t options.
  184. X            Normally I would avoid making incompatible changes, unless I
  185. X            were doing a complete overhaul of the whole program, in which
  186. X            case I'd make the version number 2.00 to alert users to possible
  187. X            incompatibilities.  However, in this particular instance I
  188. X            allowed an incompatibility in a minor upgrade because version
  189. X            1.00 was distributed to only four people.
  190. X        Changed the handling of white characters:
  191. X            par now changes all of them (except newlines) to spaces as they
  192. X            are read.  This is another incompatible change, excused for the
  193. X            same reason.
  194. X        Made all error messages begin with "par error:".
  195. X
  196. X    Par 1.20 released 10 August 1993
  197. X        Since Par 1.10 was distributed to no one, I've made some more
  198. X            incompatible changes in Par 1.20.
  199. X        Added the following features:
  200. X            The d option.
  201. X            Paragraphs are now separated by vacant lines, not just blank
  202. X                lines.
  203. X            <hang> now affects not only <prefix> but also <suffix>.
  204. X
  205. X    Par 1.30 released 18 August 1993
  206. X        Since Par 1.20 was posted to comp.sources.misc, I have made only
  207. X            backward-compatible changes in Par 1.30.
  208. X        Fixed the following bugs:
  209. X            One wrong word in par.c sometimes caused par to crash. Thanks
  210. X                go to vogelke@c-17igp.wpafb.af.mil (Contr Karl Vogel) for
  211. X                sending me an input file that caused a crash.
  212. X            Too-long words were chopped up before the first word in a
  213. X                paragraph was expanded to include initial spaces, allowing
  214. X                impossibility #1 to occur.  The order of the two operations
  215. X                has been reversed.  Thanks go to splat@deakin.oz.au (Andrew
  216. X                Cashin) for reporting the error message.
  217. X        Added the following features:
  218. X            The g option (motivated by suggestions from several people).
  219. X            The q option (inspired by a suggestion from splat@deakin.oz.au
  220. X                (Andrew Cashin)).
  221. X            The R option (my attempt to squash a bad idea from Par 1.00).
  222. X            The PARQUOTE environment variable (comes with the q option).
  223. X            The PARPROTECT environment variable (inspired by a suggestion
  224. X                from dennisf@se01.elk.miles.com (Dennis Flaherty)).
  225. X        Altered the terminology:
  226. X            Several terms have been added, and the meaning of some terms
  227. X            has been slightly modified.  This is a change in the language
  228. X            used to describe par's behavior, not a change in par's actual
  229. X            behavior.
  230. X        Added a clean target to protoMakefile (suggested by hlj@posix.com
  231. X            (Hal Jespersen)).
  232. X
  233. X    Par 1.31 released 7 September 1993
  234. X        The version number is 1.31 rather than 1.40 because all added
  235. X            features are really just enhancements of existing features.
  236. X        Fixed the following bug:
  237. X            In par.doc, in the example of a paragraph produced by a greedy
  238. X                algorithm, the word "establish" appeared twice in a row.
  239. X                Thanks go to niel@astro.rug.nl (Daniel Kussendrager) for
  240. X                first pointing this out.  (The example is now even better
  241. X                because the paragraph looks even worse than before.)
  242. X        Added the following features:
  243. X            A usage message to accompany command line or environment
  244. X                variable syntax errors (first suggested by
  245. X                qarl@ecl.wustl.edu (Karl Stiefvater)).
  246. X            The help and c options.
  247. X            The B, P, and Q options, which render PARBODY, PARPROTECT, and
  248. X                PARQUOTE no longer necessary.  They are retained, though,
  249. X                for compatibility and convenience.
  250. X            The _b, _q, and _Q escape sequences for charset syntax.
  251. X        Added the term "charset syntax".
  252. X        Isolated the character set code in charset.c and charset.h.
  253. X
  254. X
  255. XCompilation
  256. X
  257. X    To compile par, you need an ANSI C compiler.  Copy protoMakefile to
  258. X    Makefile and edit it, following the instructions in the comments.  Then
  259. X    use make (or the equivalent on your system) to compile par.
  260. X
  261. X    If you have no make, compile each .c file into an object file and link
  262. X    all the object files together by whatever method works on your system.
  263. X    Then go look for a version of make that works on your system, since it
  264. X    will come in handy in the future.
  265. X
  266. X    If your compiler warns you about a pointer to a constant being converted
  267. X    to a pointer to a non-constant in line 507 of reformat.c, ignore it.
  268. X    Your compiler (like mine) is in error.  What it thinks is a pointer to
  269. X    a constant is actually a pointer to a pointer to a constant, which is
  270. X    something quite different.  The conversion is legal, and I don't think a
  271. X    correct ANSI C compiler would complain.
  272. X
  273. X    If your compiler generates any other warnings that you think are
  274. X    legitimate, please tell me about them (see the Bugs section).
  275. X
  276. X    Note that all variables in par are either constant or automatic (or
  277. X    both), which means that par can be made reentrant (if your compiler
  278. X    supports it).  Given the right operating system, it should be possible
  279. X    for several par processes to share the same code space and the same data
  280. X    space (but not the same stack, of course) in memory.
  281. X
  282. X
  283. XSynopsis
  284. X    par [help] [version] [B<op><set>] [P<op><set>] [Q<op><set>] [h[<hang>]]
  285. X        [p<prefix>] [s<suffix>] [w<width>] [c[<cap>]] [d[<div>]] [f[<fit>]]
  286. X        [g[<guess>]] [j[<just>]] [l[<last>]] [q[<quote>]] [R[<Report>]]
  287. X        [t[<touch>]]
  288. X
  289. X    Things enclosed in [square brackets] are optional.  Things enclosed in
  290. X    <angle brackets> are parameters.
  291. X
  292. X
  293. XDescription
  294. X
  295. X    par is a filter which copies its input to its output, changing all white
  296. X    characters (except newlines) to spaces, and reformatting each paragraph.
  297. X    Paragraphs are separated by protected, blank, and vacant lines (see
  298. X    the Terminology section for definitions), and optionally delimited by
  299. X    indentation (see the d option in the Options section).
  300. X
  301. X    Each output paragraph is generated from the corresponding input
  302. X    paragraph as follows:
  303. X
  304. X     1) An optional prefix and/or suffix is removed from each input line.
  305. X     2) The remainder is divided into words (separated by spaces).
  306. X     3) The words are joined into lines to make an eye-pleasing paragraph.
  307. X     4) The prefixes and suffixes are reattached.
  308. X
  309. X     If there are suffixes, spaces are inserted before them so that they all
  310. X     end in the same column.
  311. X
  312. X
  313. XTerminology
  314. X
  315. X    Miscellaneous terms:
  316. X
  317. X        charset syntax
  318. X            A way of representing a set of characters as a string.  The set
  319. X            includes exactly those characters which appear in the string,
  320. X            except that the underscore (_) is an escape character.  Whenever
  321. X            it appears, it must begin one of the following escape sequences:
  322. X
  323. X                   __ = an underscore
  324. X                   _s = a space
  325. X                   _b = a backslash (\)
  326. X                   _q = a single quote (')
  327. X                   _Q = a double quote (")
  328. X                   _A = all upper case letters
  329. X                   _a = all lower case letters
  330. X                   _0 = all decimal digits
  331. X                 _xhh = the character represented by the two hexadecimal
  332. X                        digits hh (which may be upper or lower case)
  333. X
  334. X            The NUL character must not appear in the string but it may be
  335. X            included in the set with the _x00 sequence.
  336. X
  337. X        error
  338. X            A condition which causes par to abort.  See the Diagnostics
  339. X            section.
  340. X
  341. X        IP  Input paragraph.
  342. X
  343. X        OP  Output paragraph.
  344. X
  345. X        parameter
  346. X            A symbol which may take on unsigned integral values.  There are
  347. X            several parameters whose values affect the behavior of par.
  348. X            Parameters can be assigned values using command line options.
  349. X
  350. X
  351. X    Types of characters:
  352. X
  353. X        alphanumeric character
  354. X            An upper case letter, lower case letter, or decimal digit.
  355. X
  356. X        body character
  357. X            A member of the set of characters defined by the PARBODY
  358. X            environment variable (see the Environment section).
  359. X
  360. X        protective character
  361. X            A member of the set of characters defined by the PARPROTECT
  362. X            environment variable (see the Environment section).
  363. X
  364. X        quote character
  365. X            A member of the set of characters defined by the PARQUOTE
  366. X            environment variable (see the Environment section).
  367. X
  368. X        terminal character
  369. X            A period, question mark, exclamation point, or colon.
  370. X
  371. X        white character
  372. X            A space, formfeed, newline, carriage return, tab, or vertical
  373. X            tab.
  374. X
  375. X    Functions:
  376. X
  377. X        comprelen
  378. X            The comprelen of a non-empty set of lines is the length of
  379. X            the longest string of non-body characters appearing at the
  380. X            beginning of every line in the set.
  381. X
  382. X        comsuflen
  383. X            Given a non-empty set <S> of lines, let <p> be the comprelen of
  384. X            <S>.  Let <T> be the set of lines which result from stripping
  385. X            the first <p> characters from each line in <S>.  Let <c> be the
  386. X            longest string of non-body characters appearing at the end of
  387. X            every line in <T>.  Strip <c> of all initial spaces except the
  388. X            last.  The length of <c> is the comsuflen of <S>.
  389. X
  390. X        quoteprefix
  391. X            The quoteprefix of a line is the longest string of quote
  392. X            characters appearing at the beginning of the line, after this
  393. X            string has been stripped of any trailing spaces.
  394. X
  395. X    Types of lines:
  396. X
  397. X        blank line
  398. X            An empty line, or a line whose first character is not protective
  399. X            and which contains only spaces.
  400. X
  401. X        protected line
  402. X            An input line whose first character is protective.
  403. X
  404. X        vacant line
  405. X            Any line which can be shown to be vacant by a finite number of
  406. X            applications of the following recursive rule:  Suppose <S> is a
  407. X            subsequence of a segment (see below) bounded above and below by
  408. X            vacant lines or by the beginning/end of the segment.  Let <p>
  409. X            and <s> be the comprelen and comsuflen of <S>.  Any member of
  410. X            <S> which, if stripped of its first <p> characters and last <s>
  411. X            characters, would be blank, is vacant.
  412. X
  413. X    Groups of lines:
  414. X
  415. X        segment
  416. X            A contiguous sequence of input lines containing no protected or
  417. X            blank lines, bounded above and below by protected lines, blank
  418. X            lines, and/or the beginning/end of the input.
  419. X
  420. X        block
  421. X            A contiguous subsequence of a segment containing no vacant lines,
  422. X            bounded above and below by vacant lines and/or the beginning/end
  423. X            of the segment.
  424. X
  425. X    Types of words:
  426. X
  427. X        capitalized word
  428. X            If <cap> is 0, a capitalized word is one which contains at
  429. X            least one alphanumeric character, whose first alphanumeric
  430. X            character is not a lower case letter.  If <cap> is 1, every word
  431. X            is considered a capitalized word.
  432. X
  433. X        curious word
  434. X            A word which contains a terminal character <c> such that there
  435. X            are no alphanumeric characters in the word after <c>, but there
  436. X            is at least one alphanumeric character in the word before <c>.
  437. X
  438. X
  439. XOptions
  440. X
  441. X    Any command line argument may begin with one minus sign (-) which is
  442. X    ignored.  Generally, more than one option may appear in a single command
  443. X    line argument, but there are exceptions:  The help, version, B, P, and Q
  444. X    options must have whole arguments all to themselves.
  445. X
  446. X    help        Causes all remaining arguments to be ignored.  No input
  447. X                is read.  A usage message is printed on the output briefly
  448. X                describing the options used by par.
  449. X
  450. X    version     Causes all remaining arguments to be ignored.  No input is
  451. X                read.  "par 1.31" is printed on the output.  Of course, this
  452. X                will change in future releases of Par.
  453. X
  454. X    B<op><set>  <op> is a single character, either an equal sign (=), a
  455. X                plus sign (+), or a minus sign (-). <set> is a string using
  456. X                charset syntax.  If <op> is an equal sign, the set of body
  457. X                characters is set to the character set defined by <set>.  If
  458. X                <op> is a plus/minus sign, the characters in the set defined
  459. X                by <set> are added/removed to/from the existing set of body
  460. X                characters defined by the PARBODY environment variable and
  461. X                any previous B options.  It is okay to add characters that
  462. X                are already in the set or to remove characters that are not
  463. X                in the set.
  464. X
  465. X    P<op><set>  Just like the B option, except that it applies to the set of
  466. X                protective characters.
  467. X
  468. X    Q<op><set>  Just like the B option, except that it applies to the set of
  469. X                quote characters.
  470. X
  471. X    All remaining options are used to set values of parameters.  Values set
  472. X    by command line options hold for all paragraphs.  Unset parameters are
  473. X    given default values.  Any unset parameters whose default values depend
  474. X    on the IP are recomputed separately for each paragraph.
  475. X
  476. X    The approximate role of each parameter is described here.  See the
  477. X    Details section for the rest of the story.
  478. X
  479. X    The first four parameters, <hang>, <prefix>, <suffix>, and <width>, may
  480. X    be set to any unsigned decimal integer less than 10000.
  481. X
  482. X    h[<hang>]   Mainly affects the default values of <prefix> and <suffix>.
  483. X                Defaults to 0.  If the h option is given without a number,
  484. X                the value 1 is inferred.  (See also the p and s options.)
  485. X
  486. X    p<prefix>   The first <prefix> characters of each line of the OP
  487. X                are copied from the first <prefix> characters of the
  488. X                corresponding line of the IP.  If there are more than
  489. X                <hang> + 1 lines in the IP, the default value is the
  490. X                comprelen of all the lines in the IP except the first <hang>
  491. X                of them.  If there are exactly <hang> + 1 lines in the IP
  492. X                and <quote> is 1, the default value is the number of leading
  493. X                quote characters in the last line.  Otherwise the default
  494. X                value is 0.  (See also the h and q options.)
  495. X
  496. X    s<suffix>   The last <suffix> characters of each line of the OP
  497. X                are copied from the last <suffix> characters of the
  498. X                corresponding line of the IP.  If there are more than
  499. X                <hang> + 1 lines in the IP, the default value is the
  500. X                comsuflen of all the lines of the IP except the first <hang>
  501. X                of them.  Otherwise the default value is 0.  (See also the h
  502. X                option.)
  503. X
  504. X    w<width>    No line in the OP will contain more than <width> characters,
  505. X                not including the trailing newlines.  Defaults to 72.
  506. X
  507. X    The remaining nine parameters, <cap>, <div>, <fit>, <guess>, <just>,
  508. X    <last>, <quote>, <Report>, and <touch>, may be set to either 0 or 1.  If
  509. X    the number is absent in the option, the value 1 is inferred.
  510. X
  511. X    c[<cap>]    If <cap> is 1, all words are considered capitalized.  This
  512. X                currently affects only the application of the g option.
  513. X
  514. X    d[<div>]    If <div> is 0, each block becomes an IP.  If <div> is 1,
  515. X                each block is subdivided into IPs as follows:  Let <p> be
  516. X                the comprelen of the block.  Let a line's status be 1 if its
  517. X                (<p> + 1)st character is a space, 0 otherwise.  Every line
  518. X                in the block whose status is the same as the status of the
  519. X                first line will begin a new paragraph.  Defaults to 0.
  520. X
  521. X    f[<fit>]    If <fit> is 1 and <just> is 0, par will try to make the
  522. X                lines in the OP as nearly the same length as possible, even
  523. X                if it means making the OP narrower.  Defaults to 0.  (See
  524. X                also the j option.)
  525. X
  526. X    g[<guess>]  If <guess> is 1, then when par is choosing line breaks,
  527. X                whenever it encounters a curious word followed by a
  528. X                capitalized word, it takes one of two special actions.
  529. X                If the two words are separated by a single space in the
  530. X                input, they will be merged into one word with an embedded
  531. X                non-breaking space.  If the two words are separated by more
  532. X                than one space, or by a line break, par will insure that
  533. X                they are separated by two spaces, or by a line break, in the
  534. X                output.  Defaults to 0.
  535. X
  536. X    j[<just>]   If <just> is 1, par justifies the OP, inserting spaces
  537. X                between words so that all lines in the OP have length
  538. X                <width> (except the last, if <last> is 0).  <fit> has no
  539. X                effect if <just> is 1.  Defaults to 0.  (See also the w, l,
  540. X                and f options.)
  541. X
  542. X    l[<last>]   If <last> is 1, par tries to make the last line of the OP
  543. X                about the same length as the others.  Defaults to 0.
  544. X
  545. X    q[<quote>]  If <quote> is 1, then before each segment is scanned for
  546. X                vacant lines, par will insert some new lines as follows:
  547. X                For each pair of adjacent lines in the segment, if the
  548. X                quoteprefix of one is a prefix of (but not the same as) the
  549. X                quoteprefix of the other, and each of the two lines contains
  550. X                at least one non-quote character, then a line consisting of
  551. X                the smaller quoteprefix will be inserted between the two
  552. X                lines.  <quote> also affects the default value of <prefix>.
  553. X                Defaults to 0.  (See also the p option.)
  554. X
  555. X    R[<Report>] If <Report> is 1, it will be considered an error for an
  556. X                input word to contain more than <L> = (<width> - <prefix> -
  557. X                <suffix>) characters.  Otherwise, such words will be chopped
  558. X                after each <L>th character into shorter words.  Defaults
  559. X                to 0.  It is recommended that this option be included in
  560. X                PARINIT (see the Environment section).
  561. X
  562. X    t[<touch>]  Has no effect if <suffix> is 0 or <just> is 1.  Otherwise,
  563. X                if <touch> is 0, all lines in the OP have length <width>.
  564. X                If <touch> is 1, the length of the lines is decreased until
  565. X                the suffixes touch the body of the OP.  Defaults to the
  566. X                logical OR of <fit> and <last>.  (See also the s, j, w, f,
  567. X                and l options.)
  568. X
  569. X    If the value of any parameter is set more than once, the last value is
  570. X    used.  When unset parameters are assigned default values, <hang> and
  571. X    <quote> are assigned before <prefix>, and <fit> and <last> are assigned
  572. X    before <touch> (because of the dependencies).
  573. X
  574. X    It is an error if <width> <= <prefix> + <suffix>.
  575. X
  576. X
  577. XEnvironment
  578. X
  579. X    PARBODY     Determines the initial set of body characters (which are
  580. X                used for determining comprelens and comsuflens), using
  581. X                charset syntax.  If PARBODY is not set, the set of body
  582. X                characters is initially empty.  A good value for PARBODY
  583. X                might be "_A_a.", but it depends on the application.
  584. X
  585. X    PARINIT     If set, par will read command line arguments from PARINIT
  586. X                before it reads them from the command line.  Within
  587. X                the value of PARINIT, arguments are separated by white
  588. X                characters.
  589. X
  590. X    PARPROTECT  Determines the set of protective characters, using charset
  591. X                syntax.  If PARPROTECT is not set, the set of protective
  592. X                characters is initially empty.
  593. X
  594. X    PARQUOTE    Determines the set of quote characters, using charset
  595. X                syntax.  If PARQUOTE is not set, the set of quote characters
  596. X                initially contains only the greater-than sign (>) and the
  597. X                space.
  598. X
  599. X    If a NUL character appears in the value of an environment variable, it
  600. X    and the rest of the string will not be seen by par.
  601. X
  602. X
  603. XDetails
  604. X
  605. X    Lines are terminated by newline characters, but the newlines are not
  606. X    considered to be included in the lines.  If the last character of the
  607. X    input is a non-newline, a newline will be inferred immediately after
  608. X    it (but if the input is empty, no newline will be inferred; the number
  609. X    of input lines will be 0).  Thus, the input can always be viewed as a
  610. X    sequence of lines.
  611. X
  612. X    Protected lines are copied unchanged from the input to the output.  All
  613. X    other input lines, as they are read, have any NUL characters removed,
  614. X    and every white character (except newlines) turned into a space.
  615. X
  616. X    Blank lines in the input are transformed into empty lines in the output.
  617. X    Vacant lines in the input are stripped of trailing spaces before being
  618. X    output.
  619. X
  620. X    The input is divided into segments, which are divided into blocks,
  621. X    which are divided into IPs.  The exact process depends on the values of
  622. X    <quote> and <div> (see q and d in the Options section).  The remainder
  623. X    of this section describes the process which is applied independently to
  624. X    each IP to construct the corresponding OP.
  625. X
  626. X    After the values of the parameters are determined (see the Options
  627. X    section), the first <prefix> characters and the last <suffix> characters
  628. X    of each input line are removed and remembered.  It is an error for any
  629. X    line to contain fewer than <prefix> + <suffix> characters.
  630. X
  631. X    The remaining text is treated as a sequence of characters, not lines.
  632. X    The text is broken into words, which are separated by spaces.  That is,
  633. X    a word is a maximal sub-sequence of non-spaces.  If <guess> is 1, some
  634. X    words might be merged (see g in the Options section).  The first word
  635. X    includes any spaces that preceed it on the same line.
  636. X
  637. X    Let <L> = <width> - <prefix> - <suffix>.
  638. X
  639. X    If <Report> is 0, some words may get chopped up at this point (see R in
  640. X    the Options section).
  641. X
  642. X    The words are reassembled, preserving their order, into lines.  If
  643. X    <just> is 0, adjacent words within a line are separated by a single
  644. X    space (or sometimes two if <guess> is 1), and line breaks are chosen so
  645. X    that the paragraph satisfies the following properties:
  646. X
  647. X         1) No line contains more than <L> characters.
  648. X
  649. X         2) If <fit> is 1, the difference between the lengths of the
  650. X            shortest and longest lines is as small as possible.
  651. X
  652. X         3) The shortest line is as long as possible, subject to properties
  653. X            1 and 2.
  654. X
  655. X         4) Let <target> be <L> if <fit> is 0, or the length of the longest
  656. X            line if <fit> is 1.  The sum of the squares of the differences
  657. X            between <target> and the lengths of the lines is as small as
  658. X            possible, subject to properties 1, 2, and 3.
  659. X
  660. X        If <last> is 0, the last line does not count as a line for the
  661. X        purposes of properties 2, 3, and 4 above.
  662. X
  663. X        If all the words fit on a single line, the properties as worded
  664. X        above don't make much sense.  In that case, no line breaks are
  665. X        inserted.
  666. X
  667. X    If <just> is 1, adjacent words within a line are separated by one space
  668. X    (or sometimes two if <guess> is 1) plus zero or more extra spaces.  The
  669. X    value of <fit> is disregarded, and line breaks are chosen so that the
  670. X    paragraph satisfies the following properties:
  671. X
  672. X         1) Every line contains exactly <L> characters.
  673. X
  674. X         2) The largest inter-word gap is as small as possible, subject
  675. X            to property 1.  (An inter-word gap consists only of the extra
  676. X            spaces, not the regular spaces.)
  677. X
  678. X         3) The sum of the squares of the lengths of the inter-word gaps is
  679. X            as small as possible, subject to properties 1 and 2.
  680. X
  681. X        If <last> is 0, the last line does not count as a line for the
  682. X        purposes of property 1, and it does not require or contain any extra
  683. X        spaces.
  684. X
  685. X        Extra spaces are distributed as uniformly as possible among the
  686. X        inter-word gaps in each line.
  687. X
  688. X        In a justified paragraph, every line must contain at least two
  689. X        words, but that's not always possible to accomplish.  If the
  690. X        paragraph cannot be justified, it is considered an error.
  691. X
  692. X    If the number of lines in the resulting paragraph is less than <hang>,
  693. X    empty lines are added at the end to bring the number of lines up to
  694. X    <hang>.
  695. X
  696. X    If <just> is 0 and <touch> is 1, <L> is changed to be the length of the
  697. X    longest line.
  698. X
  699. X    If <suffix> is not 0, each line is padded at the end with spaces to
  700. X    bring its length up to <L>.
  701. X
  702. X    To each line is prepended <prefix> characters.  Let <n> be the number of
  703. X    lines in the IP.  The characters which are prepended to the <i>th line
  704. X    are chosen as follows:
  705. X
  706. X     1) If <i> <= <n>, the characters are copied from the ones that were
  707. X        removed from the beginning of the <n>th input line.
  708. X
  709. X     2) If <i> > <n> > <hang>, the characters are copied from the ones that
  710. X        were removed from the beginning of the last input line.
  711. X
  712. X     3) If <i> > <n> and <n> <= <hang>, the characters are all spaces.
  713. X
  714. X    Then to each line is appended <suffix> characters.  The characters which
  715. X    are appended to the <i>th line are chosen as follows:
  716. X
  717. X     1) If <i> <= <n>, the characters are copied from the ones that were
  718. X        removed from the end of the nth input line.
  719. X
  720. X     2) If <i> > <n> > 0, the characters are copied from the ones that were
  721. X        removed from the end of the last input line.
  722. X
  723. X     3) If <n> = 0, the characters are all spaces.
  724. X
  725. X    Finally, the lines are printed to the output as the OP.
  726. X
  727. X
  728. XDiagnostics
  729. X
  730. X    If there are no errors, par returns EXIT_SUCCESS (see <stdlib.h>).
  731. X
  732. X    If there is an error, an error message will be printed to the output,
  733. X    and par will return EXIT_FAILURE.  If the error is local to a single
  734. X    paragraph, the preceeding paragraphs will have been output before
  735. X    the error was detected.  Line numbers in error messages are local to
  736. X    the IP in which the error occurred.  All error messages begin with
  737. X    "par error:" on a line by itself.  Error messages concerning command
  738. X    line or environment variable syntax are accompanied by the same usage
  739. X    message that the help option produces.
  740. X
  741. X    Of course, trying to print an error message would be futile if an error
  742. X    resulted from an output function, so par doesn't bother doing any error
  743. X    checking on output functions.
  744. X
  745. X
  746. XExamples
  747. X
  748. X    The superiority of par's dynamic programming algorithm over a greedy
  749. X    algorithm (such as the one used by fmt) can be seen in the following
  750. X    example:
  751. X
  752. X    Original paragraph:
  753. X
  754. X        We the people of the United States,
  755. X        in order to form a more perfect union,
  756. X        establish justice,
  757. X        insure domestic tranquility,
  758. X        provide for the common defense,
  759. X        promote the general welfare,
  760. X        and secure the blessing of liberty
  761. X        to ourselves and our posterity,
  762. X        do ordain and establish the Constitution
  763. X        of the United States of America.
  764. X
  765. X    After a greedy algorithm with width = 39:
  766. X
  767. X        We the people of the United
  768. X        States, in order to form a more
  769. X        perfect union, establish
  770. X        justice, insure domestic
  771. X        tranquility, provide for the
  772. X        common defense, promote the
  773. X        general welfare, and secure the
  774. X        blessing of liberty to
  775. X        ourselves and our posterity, do
  776. X        ordain and establish the
  777. X        Constitution of the United
  778. X        States of America.
  779. X
  780. X    After "par 39":
  781. X
  782. X        We the people of the United    
  783. X        States, in order to form a     
  784. X        more perfect union, establish  
  785. X        justice, insure domestic       
  786. X        tranquility, provide for the   
  787. X        common defense, promote the    
  788. X        general welfare, and secure    
  789. X        the blessing of liberty to     
  790. X        ourselves and our posterity,   
  791. X        do ordain and establish the    
  792. X        Constitution of the United     
  793. X        States of America.             
  794. X
  795. X    The line breaks chosen by par are clearly more eye-pleasing.
  796. X
  797. X    par is most useful in conjunction with the text-filtering features of an
  798. X    editor, such as the ! commands of vi.
  799. X
  800. X    The rest of this section is a series of before-and-after pictures
  801. X    showing some typical uses of par.
  802. X
  803. X    Before:
  804. X
  805. X        /*   We the people of the United States, */
  806. X        /* in order to form a more perfect union, */
  807. X        /* establish justice, */
  808. X        /* insure domestic tranquility, */
  809. X        /* provide for the common defense, */
  810. X        /* promote the general welfare, */
  811. X        /* and secure the blessing of liberty */
  812. X        /* to ourselves and our posterity, */
  813. X        /* do ordain and establish the Constitution */
  814. X        /* of the United States of America. */
  815. X
  816. X    After "par 59":
  817. X
  818. X        /*   We the people of the United States, in      */
  819. X        /* order to form a more perfect union, establish */
  820. X        /* justice, insure domestic tranquility, provide */
  821. X        /* for the common defense, promote the general   */
  822. X        /* welfare, and secure the blessing of liberty   */
  823. X        /* to ourselves and our posterity, do ordain     */
  824. X        /* and establish the Constitution of the United  */
  825. X        /* States of America.                            */
  826. X
  827. X    Or after "par 59f":
  828. X
  829. X        /*   We the people of the United States,  */
  830. X        /* in order to form a more perfect union, */
  831. X        /* establish justice, insure domestic     */
  832. X        /* tranquility, provide for the common    */
  833. X        /* defense, promote the general welfare,  */
  834. X        /* and secure the blessing of liberty to  */
  835. X        /* ourselves and our posterity, do ordain */
  836. X        /* and establish the Constitution of the  */
  837. X        /* United States of America.              */
  838. X
  839. X    Or after "par 59l":
  840. X
  841. X        /*   We the people of the United States, in      */
  842. X        /* order to form a more perfect union, establish */
  843. X        /* justice, insure domestic tranquility,         */
  844. X        /* provide for the common defense, promote       */
  845. X        /* the general welfare, and secure the           */
  846. X        /* blessing of liberty to ourselves and our      */
  847. X        /* posterity, do ordain and establish the        */
  848. X        /* Constitution of the United States of America. */
  849. X
  850. X    Or after "par 59lf":
  851. X
  852. X        /*   We the people of the United States,  */
  853. X        /* in order to form a more perfect union, */
  854. X        /* establish justice, insure domestic     */
  855. X        /* tranquility, provide for the common    */
  856. X        /* defense, promote the general welfare,  */
  857. X        /* and secure the blessing of liberty     */
  858. X        /* to ourselves and our posterity, do     */
  859. X        /* ordain and establish the Constitution  */
  860. X        /* of the United States of America.       */
  861. X
  862. X    Or after "par 59lft0":
  863. X
  864. X        /*   We the people of the United States,         */
  865. X        /* in order to form a more perfect union,        */
  866. X        /* establish justice, insure domestic            */
  867. X        /* tranquility, provide for the common           */
  868. X        /* defense, promote the general welfare,         */
  869. X        /* and secure the blessing of liberty            */
  870. X        /* to ourselves and our posterity, do            */
  871. X        /* ordain and establish the Constitution         */
  872. X        /* of the United States of America.              */
  873. X
  874. X    Or after "par 59j":
  875. X
  876. X        /*   We  the people  of  the  United States,  in */
  877. X        /* order to form a more perfect union, establish */
  878. X        /* justice, insure domestic tranquility, provide */
  879. X        /* for the  common defense, promote  the general */
  880. X        /* welfare, and  secure the blessing  of liberty */
  881. X        /* to ourselves and our posterity, do ordain and */
  882. X        /* establish  the  Constitution  of  the  United */
  883. X        /* States of America.                            */
  884. X
  885. X    Or after "par 59jl":
  886. X
  887. X        /*   We  the   people  of  the   United  States, */
  888. X        /* in   order    to   form   a    more   perfect */
  889. X        /* union,  establish  justice,  insure  domestic */
  890. X        /* tranquility, provide for  the common defense, */
  891. X        /* promote  the  general   welfare,  and  secure */
  892. X        /* the  blessing  of  liberty to  ourselves  and */
  893. X        /* our  posterity, do  ordain and  establish the */
  894. X        /* Constitution of the United States of America. */
  895. X
  896. X    Before:
  897. X
  898. X        Preamble      We the people of the United States,
  899. X        to the US     in order to form
  900. X        Constitution  a more perfect union,
  901. X                      establish justice,
  902. X                      insure domestic tranquility,
  903. X                      provide for the common defense,
  904. X                      promote the general welfare,
  905. X                      and secure the blessing of liberty
  906. X                      to ourselves and our posterity,
  907. X                      do ordain and establish
  908. X                      the Constitution
  909. X                      of the United States of America.
  910. X
  911. X    After "par 52h3":
  912. X
  913. X        Preamble      We the people of the United
  914. X        to the US     States, in order to form a
  915. X        Constitution  more perfect union, establish
  916. X                      justice, insure domestic
  917. X                      tranquility, provide for the
  918. X                      common defense, promote the
  919. X                      general welfare, and secure
  920. X                      the blessing of liberty to
  921. X                      ourselves and our posterity,
  922. X                      do ordain and establish the
  923. X                      Constitution of the United
  924. X                      States of America.
  925. X
  926. X    Before:
  927. X
  928. X         1  We the people of the United States,
  929. X         2  in order to form a more perfect union,
  930. X         3  establish justice,
  931. X         4  insure domestic tranquility,
  932. X         5  provide for the common defense,
  933. X         6  promote the general welfare,
  934. X         7  and secure the blessing of liberty
  935. X         8  to ourselves and our posterity,
  936. X         9  do ordain and establish the Constitution
  937. X        10  of the United States of America.
  938. X
  939. X    After "par 59p12l":
  940. X
  941. X         1  We the people of the United States, in order to
  942. X         2  form a more perfect union, establish justice,
  943. X         3  insure domestic tranquility, provide for the
  944. X         4  common defense, promote the general welfare,
  945. X         5  and secure the blessing of liberty to ourselves
  946. X         6  and our posterity, do ordain and establish the
  947. X         7  Constitution of the United States of America.
  948. X
  949. X    Before:
  950. X
  951. X        > > We the people
  952. X        > > of the United States,
  953. X        > > in order to form a more perfect union,
  954. X        > > establish justice,
  955. X        > > ensure domestic tranquility,
  956. X        > > provide for the common defense,
  957. X        >
  958. X        > Promote the general welfare,
  959. X        > and secure the blessing of liberty
  960. X        > to ourselves and our posterity,
  961. X        > do ordain and establish
  962. X        > the Constitution of the United States of America.
  963. X
  964. X    After "par 52":
  965. X
  966. X        > > We the people of the United States, in
  967. X        > > order to form a more perfect union,
  968. X        > > establish justice, ensure domestic
  969. X        > > tranquility, provide for the common
  970. X        > > defense,
  971. X        >
  972. X        > Promote the general welfare, and secure
  973. X        > the blessing of liberty to ourselves and
  974. X        > our posterity, do ordain and establish
  975. X        > the Constitution of the United States of
  976. X        > America.
  977. X
  978. X    Before:
  979. X
  980. X        >   We the people
  981. X        > of the United States,
  982. X        > in order to form a more perfect union,
  983. X        > establish justice,
  984. X        > ensure domestic tranquility,
  985. X        > provide for the common defense,
  986. X        >   Promote the general welfare,
  987. X        > and secure the blessing of liberty
  988. X        > to ourselves and our posterity,
  989. X        > do ordain and establish
  990. X        > the Constitution of the United States of America.
  991. X
  992. X    After "par 52d":
  993. X
  994. X        >   We the people of the United States,
  995. X        > in order to form a more perfect union,
  996. X        > establish justice, ensure domestic
  997. X        > tranquility, provide for the common
  998. X        > defense,
  999. X        >   Promote the general welfare, and secure
  1000. X        > the blessing of liberty to ourselves and
  1001. X        > our posterity, do ordain and establish
  1002. X        > the Constitution of the United States of
  1003. X        > America.
  1004. X
  1005. X    Before:
  1006. X
  1007. X        Joe Public writes:
  1008. X        > Jane Doe writes:
  1009. X        > > I can't find the source for uncompress.
  1010. X        > Oh no, not again!!!
  1011. X        >
  1012. X        > Isn't there a FAQ for this?
  1013. X        That wasn't very helpful, Joe. Jane,
  1014. X        just make a link from uncompress to compress.
  1015. X
  1016. X    After "par 40q":
  1017. X
  1018. X        Joe Public writes:
  1019. X
  1020. X        > Jane Doe writes:
  1021. X        >
  1022. X        > > I can't find the source for
  1023. X        > > uncompress.
  1024. X        >
  1025. X        > Oh no, not again!!!
  1026. X        >
  1027. X        > Isn't there a FAQ for this?
  1028. X
  1029. X        That wasn't very helpful, Joe.
  1030. X        Jane, just make a link from
  1031. X        uncompress to compress.
  1032. X
  1033. X    Before:
  1034. X
  1035. X        I sure hope there's still room
  1036. X        in Dr. Jones' section of archaeology.
  1037. X        I've heard he's the bestest.  [sic]
  1038. X
  1039. X    After "par 50g":
  1040. X
  1041. X        I sure hope there's still room in
  1042. X        Dr. Jones' section of archaeology.  I've
  1043. X        heard he's the bestest. [sic]
  1044. X
  1045. X    Or after "par 50gc":
  1046. X
  1047. X        I sure hope there's still room in
  1048. X        Dr. Jones' section of archaeology.  I've
  1049. X        heard he's the bestest.  [sic]
  1050. X
  1051. X
  1052. XLimitations
  1053. X
  1054. X    The <guess> feature guesses wrong in cases like the following:
  1055. X
  1056. X        I calc'd the approx.
  1057. X        Fermi level to 3 sig. digits.
  1058. X
  1059. X    With <guess> = 1, par will incorrectly assume that "approx." ends a
  1060. X    sentence.  If the input were:
  1061. X
  1062. X        I calc'd the approx. Fermi
  1063. X        level to 3 sig. digits.
  1064. X
  1065. X    then par would refuse to put a line break between "approx." and "Fermi"
  1066. X    in the output, mainly to avoid creating the first situation (in case the
  1067. X    paragraph were to be fed back through par again).  This non-breaking
  1068. X    space policy does come in handy for cases like "Mr. Johnson" and
  1069. X    "Jan. 1", though.
  1070. X
  1071. X    The <guess> feature only goes one way.  par can preserve wide sentence
  1072. X    breaks in a paragraph, or remove them, but it can't insert them if they
  1073. X    aren't already in the input.
  1074. X
  1075. X    If you use tabs, you probably won't like the way par handles (or doesn't
  1076. X    handle) them.  It turns them into spaces.  I didn't bother trying to
  1077. X    make sense of tabs because they don't make sense to begin with.  Not
  1078. X    everyone's terminal has the same tab settings, so text files containing
  1079. X    tabs are sometimes mangled.  In fact, almost every text file containing
  1080. X    tabs gets mangled when something is inserted at the beginning of each
  1081. X    line (when quoting e-mail or commenting out a section of a shell script,
  1082. X    for example), making them a pain to edit.  In my opinion, the world
  1083. X    would be a nicer place if everyone stopped using tabs (so I'm doing my
  1084. X    part by not supporting them in par).  (Thanks to ets1@cs.wustl.edu (Eric
  1085. X    T. Stuebe) for showing me the light about tabs.)
  1086. X
  1087. X    There is currently no way for the length of the output prefix to differ
  1088. X    from the length of the input prefix.  Ditto for the suffix.  I may
  1089. X    consider adding this capability in a future release, but right now I'm
  1090. X    not sure how I'd want it to work.
  1091. X
  1092. X
  1093. XBugs
  1094. X
  1095. X    If I knew of any bugs, I wouldn't release the package.  Of course, there
  1096. X    may be bugs that I haven't yet discovered.
  1097. X
  1098. X    If you find any bugs (in the program or in the documentation), or if you
  1099. X    have any suggestions, please send e-mail to:
  1100. X
  1101. X        amc@ecl.wustl.edu
  1102. X
  1103. X    or send paper mail to:
  1104. X
  1105. X        Adam M. Costello
  1106. X        Campus Box 1045
  1107. X        Washington University
  1108. X        One Brookings Dr.
  1109. X        St. Louis, MO 63130
  1110. X        USA
  1111. X
  1112. X    Note that both addresses could change anytime after June 1994.
  1113. X
  1114. X    When reporting a bug, please include the exact input and command line
  1115. X    options used, and the version number of par, so that I can reproduce it.
  1116. END_OF_FILE
  1117. if test 43573 -ne `wc -c <'Par131/par.doc'`; then
  1118.     echo shar: \"'Par131/par.doc'\" unpacked with wrong size!
  1119. fi
  1120. # end of 'Par131/par.doc'
  1121. fi
  1122. if test -f 'Par131/protoMakefile' -a "${1}" != "-c" ; then 
  1123.   echo shar: Will not clobber existing file \"'Par131/protoMakefile'\"
  1124. else
  1125. echo shar: Extracting \"'Par131/protoMakefile'\" \(1592 characters\)
  1126. sed "s/^X//" >'Par131/protoMakefile' <<'END_OF_FILE'
  1127. X# *********************
  1128. X# * protoMakefile     *
  1129. X# * for Par 1.31      *
  1130. X# * Copyright 1993 by *
  1131. X# * Adam M. Costello  *
  1132. X# *********************
  1133. X
  1134. X
  1135. X# Define CC so that the command
  1136. X# $(CC) foo.c
  1137. X# compiles the ANSI C source file "foo.c" into the object file "foo.o".
  1138. X# You may assume that foo.c uses no floating point math.
  1139. X#
  1140. X# If your operating system or your compiler's exit() function automatically
  1141. X# frees all memory allocated by malloc() when a process terminates, then you
  1142. X# can choose to trade away space efficiency for time efficiency by defining
  1143. X# DONTFREE.
  1144. X#
  1145. X# Example (for Solaris 2.2):
  1146. X# CC = cc -c -O -s -Xc -DDONTFREE
  1147. X
  1148. XCC =
  1149. X
  1150. X# Define LINK1 and LINK2 so that the command
  1151. X# $(LINK1) foo1.o foo2.o foo3.o $(LINK2) foo
  1152. X# links the object files "foo1.o", "foo2.o", "foo3.o"
  1153. X# into the executable file "foo".
  1154. X# You may assume that none of the .o files use floating point math.
  1155. X#
  1156. X# Example (for Solaris 2.2):
  1157. X# LINK1 = cc -s
  1158. X# LINK2 = -o
  1159. X
  1160. XLINK1 =
  1161. XLINK2 =
  1162. X
  1163. X# Define RM so that the command
  1164. X# $(RM) foo1 foo2 foo3
  1165. X# removes the files "foo1", "foo2", and "foo3", and
  1166. X# preferrably doesn't complain if they don't exist.
  1167. X#
  1168. X# Example (for Solaris 2.2):
  1169. X# RM = rm -f
  1170. X
  1171. XRM =
  1172. X
  1173. X# You shouldn't need to modify anything below this line.
  1174. X
  1175. XOBJS = buffer.o charset.o errmsg.o par.o reformat.o
  1176. X
  1177. X.c.o:
  1178. X    $(CC) $<
  1179. X
  1180. Xpar: $(OBJS)
  1181. X    $(LINK1) $(OBJS) $(LINK2) par
  1182. X
  1183. Xbuffer.o: buffer.c buffer.h errmsg.h
  1184. X
  1185. Xcharset.o: charset.c charset.h errmsg.h buffer.h
  1186. X
  1187. Xerrmsg.o: errmsg.c errmsg.h
  1188. X
  1189. Xpar.o: par.c charset.h errmsg.h buffer.h reformat.h
  1190. X
  1191. Xreformat.o: reformat.c reformat.h errmsg.h buffer.h
  1192. X
  1193. Xclean:
  1194. X    $(RM) par $(OBJS)
  1195. END_OF_FILE
  1196. if test 1592 -ne `wc -c <'Par131/protoMakefile'`; then
  1197.     echo shar: \"'Par131/protoMakefile'\" unpacked with wrong size!
  1198. fi
  1199. # end of 'Par131/protoMakefile'
  1200. fi
  1201. echo shar: End of shell archive.
  1202. exit 0
  1203.  
  1204. exit 0 # Just in case...
  1205.