home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume17 / pax / patch03 / text0000.txt < prev   
Encoding:
Text File  |  1989-02-14  |  57.0 KB  |  2,317 lines

  1. This is the third of three official patches to Pax, a freely distributable 
  2. portable archive interchange.  These patches brings the software upto 
  3. release 1.2.  These patches fix a number of bugs and portability problems 
  4. with the initial release of the software.  These three patches (split to
  5. avoid article size limitations) constitute a single logical patch to pax.
  6.  
  7. I would like to thank all those people who reported bug, suggested fixes, 
  8. provided patches and suggested other extensions to pax.  I appologize to 
  9. that I was not able to respond to all the mail that I got about pax, but 
  10. all of the problems that were reported have either been fixed, or are 
  11. still under consideration.
  12.  
  13. Please, if you have any problems with pax, let me know so that they can be
  14. fixed.  Remember, if you find a problem, chances are that others will run
  15. into the same problem as well.  Reporting the problems will allow them to
  16. be fixed to avoid future difficulties and effort.
  17.  
  18. These items were not fixed in the patch, but are scheduled for a future
  19. patch release:
  20.  
  21.     * Put the software configuration under control of a "Configure" script ala
  22.       less and rn.
  23.     * Bring source into line with new POSIX 1003.2 description of pax.
  24.     * Add support for undocumented -C flag to cpio.
  25.     * MS-DOS support
  26.     * MINIX support
  27.     * Add missing tar.5 cpio.5 man pages
  28.  
  29. These items were fixed in these patches:
  30.  
  31.     * Changed misspelling of MERCHANTABILITY.
  32.     * Changed name of syserr to strerror, warn.c.
  33.     * Removed the references to "public domain" in the software.  The 
  34.       software is copyrighted, not public domain.
  35.     * Files are chmod'ed before being moved into the installation 
  36.       directories.  Files are also copied, then linked in the target 
  37.       directory.
  38.     * The variable "min" in regexp.c was changed to "minimum".  It would 
  39.       seem that some copilers define min to be a macro...
  40.     * In buffer.c there was an integer which was getting assigned NULL, 
  41.       rather than 0.
  42.     * If pax was given the -l option, it only successfully linked the 
  43.       from-file and the to-file together if the from-file is already linked 
  44.       to something else.
  45.     * Changed the verbose output file for tar to use stderr, rather than
  46.       stdout.  The verbose output was being interspersed with the archive,
  47.       causing the archive to be unreadable.
  48.     * The LDFLAGS macro is now used in the makefile.  There are also macros 
  49.       for additional libraries which may be needed and one for SHELL which 
  50.       fixes some problems when using the "make lint" facility.
  51.     * Fixed the stupid typo which caused pax/tar/cpio to run out of file
  52.       descriptors on very deep directory trees.
  53.     * Removed all line continuations "\" in preprocessor directives and
  54.       strings.  These were causing problems on certain compilers.
  55.     * Rename two variable which were colloding on compilers that did not
  56.       understand varaiables that were not unique in the first six
  57.       characters.
  58.     * Change the name of openi().  This causes a lot of problems on some
  59.       machines, especially those with shared libraries...
  60.     * Added some changes required for XENIX 286.
  61.     * All references to NULL are now properly cast.
  62.     * Man pages directories are now more compatible with BSD and USG
  63.       installation
  64.     * Other miscellaneous cleanups.
  65.  
  66. Mark H. Colburn                  "Look into a child's eye;
  67. Minnetech Consulting, Inc.        there's no hate and there's no lie;
  68. mark@jhereg.mn.org                there's no black and there's no white."
  69. --------------------------------- CUT HERE ---------------------------------
  70.  
  71. Index: port.c
  72. *** /tmp/,RCSt1a17133    Sun Feb 12 14:08:42 1989
  73. --- port.c    Sun Feb 12 14:02:30 1989
  74. ***************
  75. *** 1,6
  76.   /* $Source: /u/mark/src/pax/RCS/port.c,v $
  77.    *
  78. !  * $Revision: 1.1 $
  79.    *
  80.    * port.c - These are routines not available in all environments. 
  81.    *
  82.  
  83. --- 1,6 -----
  84.   /* $Source: /u/mark/src/pax/RCS/port.c,v $
  85.    *
  86. !  * $Revision: 1.2 $
  87.    *
  88.    * port.c - These are routines not available in all environments. 
  89.    *
  90. ***************
  91. *** 30,36
  92.    *
  93.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  94.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  95. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  96.    *
  97.    * $Log:    port.c,v $
  98.    * Revision 1.1  88/12/23  18:02:29  mark
  99.  
  100. --- 30,36 -----
  101.    *
  102.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  103.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  104. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  105.    *
  106.    * $Log:    port.c,v $
  107.    * Revision 1.2  89/02/12  10:05:35  mark
  108. ***************
  109. *** 33,38
  110.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  111.    *
  112.    * $Log:    port.c,v $
  113.    * Revision 1.1  88/12/23  18:02:29  mark
  114.    * Initial revision
  115.    * 
  116.  
  117. --- 33,41 -----
  118.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  119.    *
  120.    * $Log:    port.c,v $
  121. +  * Revision 1.2  89/02/12  10:05:35  mark
  122. +  * 1.2 release fixes
  123. +  * 
  124.    * Revision 1.1  88/12/23  18:02:29  mark
  125.    * Initial revision
  126.    * 
  127. ***************
  128. *** 39,45
  129.    */
  130.   
  131.   #ifndef lint
  132. ! static char *ident = "$Id: port.c,v 1.1 88/12/23 18:02:29 mark Rel $";
  133.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  134.   #endif /* ! lint */
  135.   
  136.  
  137. --- 42,48 -----
  138.    */
  139.   
  140.   #ifndef lint
  141. ! static char *ident = "$Id: port.c,v 1.2 89/02/12 10:05:35 mark Exp $";
  142.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  143.   #endif /* ! lint */
  144.   
  145. ***************
  146. *** 55,62
  147.    * the list in the #if !defined()'s below and it'll all be skipped. 
  148.    */
  149.   
  150. ! #if !defined(mc300) && !defined(mc500) && !defined(mc700) && \
  151. !     !defined(BSD)
  152.   
  153.   /* mkdir - make a directory
  154.    *
  155.  
  156. --- 58,64 -----
  157.    * the list in the #if !defined()'s below and it'll all be skipped. 
  158.    */
  159.   
  160. ! #if !defined(mc300) && !defined(mc500) && !defined(mc700) && !defined(BSD)
  161.   
  162.   /* mkdir - make a directory
  163.    *
  164. Index: port.h
  165. *** /tmp/,RCSt1a17138    Sun Feb 12 14:08:49 1989
  166. --- port.h    Sun Feb 12 14:02:31 1989
  167. ***************
  168. *** 1,6
  169.   /* $Source: /u/mark/src/pax/RCS/port.h,v $
  170.    *
  171. !  * $Revision: 1.1 $
  172.    *
  173.    * port.h - defnitions for portability library
  174.    *
  175.  
  176. --- 1,6 -----
  177.   /* $Source: /u/mark/src/pax/RCS/port.h,v $
  178.    *
  179. !  * $Revision: 1.2 $
  180.    *
  181.    * port.h - defnitions for portability library
  182.    *
  183. ***************
  184. *** 30,36
  185.    *
  186.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  187.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  188. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  189.    */
  190.   
  191.   #ifndef _PAX_PORT_H
  192.  
  193. --- 30,36 -----
  194.    *
  195.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  196.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  197. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  198.    */
  199.   
  200.   #ifndef _PAX_PORT_H
  201. Index: regexp.c
  202. *** /tmp/,RCSt1a17143    Sun Feb 12 14:08:58 1989
  203. --- regexp.c    Sun Feb 12 14:02:34 1989
  204. ***************
  205. *** 1,6
  206.   /* $Source: /u/mark/src/pax/RCS/regexp.c,v $
  207.    *
  208. !  * $Revision: 1.1 $
  209.    *
  210.    * regexp.c - regular expression matching
  211.    *
  212.  
  213. --- 1,6 -----
  214.   /* $Source: /u/mark/src/pax/RCS/regexp.c,v $
  215.    *
  216. !  * $Revision: 1.2 $
  217.    *
  218.    * regexp.c - regular expression matching
  219.    *
  220. ***************
  221. *** 43,48
  222.    * Sponsored by The USENIX Association for public distribution. 
  223.    *
  224.    * $Log:    regexp.c,v $
  225.    * Revision 1.1  88/12/23  18:02:32  mark
  226.    * Initial revision
  227.    * 
  228.  
  229. --- 43,51 -----
  230.    * Sponsored by The USENIX Association for public distribution. 
  231.    *
  232.    * $Log:    regexp.c,v $
  233. +  * Revision 1.2  89/02/12  10:05:39  mark
  234. +  * 1.2 release fixes
  235. +  * 
  236.    * Revision 1.1  88/12/23  18:02:32  mark
  237.    * Initial revision
  238.    * 
  239. ***************
  240. *** 53,59
  241.   #include "pax.h"
  242.   
  243.   #ifndef lint
  244. ! static char    *Ident = "$Id: regexp.c,v 1.1 88/12/23 18:02:32 mark Rel $";
  245.   #endif
  246.   
  247.   
  248.  
  249. --- 56,62 -----
  250.   #include "pax.h"
  251.   
  252.   #ifndef lint
  253. ! static char    *Ident = "$Id: regexp.c,v 1.2 89/02/12 10:05:39 mark Exp $";
  254.   #endif
  255.   
  256.   
  257. ***************
  258. *** 224,230
  259.       int             flags;
  260.       extern char    *malloc();
  261.   
  262. !     if (exp == NULL)
  263.       FAIL("NULL argument");
  264.   
  265.       /* First pass: determine size, legality. */
  266.  
  267. --- 227,233 -----
  268.       int             flags;
  269.       extern char    *malloc();
  270.   
  271. !     if (exp == (char *)NULL)
  272.       FAIL("NULL argument");
  273.   
  274.       /* First pass: determine size, legality. */
  275. ***************
  276. *** 233,240
  277.       regsize = 0L;
  278.       regcode = ®dummy;
  279.       regc(MAGIC);
  280. !     if (reg(0, &flags) == NULL)
  281. !     return (NULL);
  282.   
  283.       /* Small enough for pointer-storage convention? */
  284.       if (regsize >= 32767L)    /* Probably could be 65535L. */
  285.  
  286. --- 236,243 -----
  287.       regsize = 0L;
  288.       regcode = ®dummy;
  289.       regc(MAGIC);
  290. !     if (reg(0, &flags) == (char *)NULL)
  291. !     return ((regexp *)NULL);
  292.   
  293.       /* Small enough for pointer-storage convention? */
  294.       if (regsize >= 32767L)    /* Probably could be 65535L. */
  295. ***************
  296. *** 242,248
  297.   
  298.       /* Allocate space. */
  299.       r = (regexp *) malloc(sizeof(regexp) + (unsigned) regsize);
  300. !     if (r == NULL)
  301.       FAIL("out of space");
  302.   
  303.       /* Second pass: emit code. */
  304.  
  305. --- 245,251 -----
  306.   
  307.       /* Allocate space. */
  308.       r = (regexp *) malloc(sizeof(regexp) + (unsigned) regsize);
  309. !     if (r == (regexp *) NULL)
  310.       FAIL("out of space");
  311.   
  312.       /* Second pass: emit code. */
  313. ***************
  314. *** 251,257
  315.       regcode = r->program;
  316.       regc(MAGIC);
  317.       if (reg(0, &flags) == NULL)
  318. !     return (NULL);
  319.   
  320.       /* Dig out information for optimizations. */
  321.       r->regstart = '\0';        /* Worst-case defaults. */
  322.  
  323. --- 254,260 -----
  324.       regcode = r->program;
  325.       regc(MAGIC);
  326.       if (reg(0, &flags) == NULL)
  327. !     return ((regexp *) NULL);
  328.   
  329.       /* Dig out information for optimizations. */
  330.       r->regstart = '\0';        /* Worst-case defaults. */
  331. ***************
  332. *** 320,326
  333.       regnpar++;
  334.       ret = regnode(OPEN + parno);
  335.       } else
  336. !     ret = NULL;
  337.   
  338.       /* Pick up the branches, linking them together. */
  339.       br = regbranch(&flags);
  340.  
  341. --- 323,329 -----
  342.       regnpar++;
  343.       ret = regnode(OPEN + parno);
  344.       } else
  345. !     ret = (char *)NULL;
  346.   
  347.       /* Pick up the branches, linking them together. */
  348.       br = regbranch(&flags);
  349. ***************
  350. *** 324,332
  351.   
  352.       /* Pick up the branches, linking them together. */
  353.       br = regbranch(&flags);
  354. !     if (br == NULL)
  355. !     return (NULL);
  356. !     if (ret != NULL)
  357.       regtail(ret, br);    /* OPEN -> first. */
  358.       else
  359.       ret = br;
  360.  
  361. --- 327,335 -----
  362.   
  363.       /* Pick up the branches, linking them together. */
  364.       br = regbranch(&flags);
  365. !     if (br == (char *)NULL)
  366. !     return ((char *)NULL);
  367. !     if (ret != (char *)NULL)
  368.       regtail(ret, br);    /* OPEN -> first. */
  369.       else
  370.       ret = br;
  371. ***************
  372. *** 336,343
  373.       while (*regparse == '|') {
  374.       regparse++;
  375.       br = regbranch(&flags);
  376. !     if (br == NULL)
  377. !         return (NULL);
  378.       regtail(ret, br);    /* BRANCH -> BRANCH. */
  379.       if (!(flags & HASWIDTH))
  380.           *flagp &= ~HASWIDTH;
  381.  
  382. --- 339,346 -----
  383.       while (*regparse == '|') {
  384.       regparse++;
  385.       br = regbranch(&flags);
  386. !     if (br == (char *)NULL)
  387. !         return ((char *)NULL);
  388.       regtail(ret, br);    /* BRANCH -> BRANCH. */
  389.       if (!(flags & HASWIDTH))
  390.           *flagp &= ~HASWIDTH;
  391. ***************
  392. *** 349,355
  393.       regtail(ret, ender);
  394.   
  395.       /* Hook the tails of the branches to the closing node. */
  396. !     for (br = ret; br != NULL; br = regnext(br))
  397.       regoptail(br, ender);
  398.   
  399.       /* Check for proper termination. */
  400.  
  401. --- 352,358 -----
  402.       regtail(ret, ender);
  403.   
  404.       /* Hook the tails of the branches to the closing node. */
  405. !     for (br = ret; br != (char *)NULL; br = regnext(br))
  406.       regoptail(br, ender);
  407.   
  408.       /* Check for proper termination. */
  409. ***************
  410. *** 381,387
  411.       *flagp = WORST;        /* Tentatively. */
  412.   
  413.       ret = regnode(BRANCH);
  414. !     chain = NULL;
  415.       while (*regparse != '\0' && *regparse != '|' && *regparse != ')') {
  416.       latest = regpiece(&flags);
  417.       if (latest == NULL)
  418.  
  419. --- 384,390 -----
  420.       *flagp = WORST;        /* Tentatively. */
  421.   
  422.       ret = regnode(BRANCH);
  423. !     chain = (char *)NULL;
  424.       while (*regparse != '\0' && *regparse != '|' && *regparse != ')') {
  425.       latest = regpiece(&flags);
  426.       if (latest == (char *)NULL)
  427. ***************
  428. *** 384,391
  429.       chain = NULL;
  430.       while (*regparse != '\0' && *regparse != '|' && *regparse != ')') {
  431.       latest = regpiece(&flags);
  432. !     if (latest == NULL)
  433. !         return (NULL);
  434.       *flagp |= flags & HASWIDTH;
  435.       if (chain == NULL)    /* First piece. */
  436.           *flagp |= flags & SPSTART;
  437.  
  438. --- 387,394 -----
  439.       chain = (char *)NULL;
  440.       while (*regparse != '\0' && *regparse != '|' && *regparse != ')') {
  441.       latest = regpiece(&flags);
  442. !     if (latest == (char *)NULL)
  443. !         return ((char *)NULL);
  444.       *flagp |= flags & HASWIDTH;
  445.       if (chain == (char *)NULL)    /* First piece. */
  446.           *flagp |= flags & SPSTART;
  447. ***************
  448. *** 387,393
  449.       if (latest == NULL)
  450.           return (NULL);
  451.       *flagp |= flags & HASWIDTH;
  452. !     if (chain == NULL)    /* First piece. */
  453.           *flagp |= flags & SPSTART;
  454.       else
  455.           regtail(chain, latest);
  456.  
  457. --- 390,396 -----
  458.       if (latest == (char *)NULL)
  459.           return ((char *)NULL);
  460.       *flagp |= flags & HASWIDTH;
  461. !     if (chain == (char *)NULL)    /* First piece. */
  462.           *flagp |= flags & SPSTART;
  463.       else
  464.           regtail(chain, latest);
  465. ***************
  466. *** 393,399
  467.           regtail(chain, latest);
  468.       chain = latest;
  469.       }
  470. !     if (chain == NULL)        /* Loop ran zero times. */
  471.       regnode(NOTHING);
  472.   
  473.       return (ret);
  474.  
  475. --- 396,402 -----
  476.           regtail(chain, latest);
  477.       chain = latest;
  478.       }
  479. !     if (chain == (char *)NULL)        /* Loop ran zero times. */
  480.       regnode(NOTHING);
  481.   
  482.       return (ret);
  483. ***************
  484. *** 416,423
  485.       int             flags;
  486.   
  487.       ret = regatom(&flags);
  488. !     if (ret == NULL)
  489. !     return (NULL);
  490.   
  491.       op = *regparse;
  492.       if (!ISMULT(op)) {
  493.  
  494. --- 419,426 -----
  495.       int             flags;
  496.   
  497.       ret = regatom(&flags);
  498. !     if (ret == (char *)NULL)
  499. !     return ((char *)NULL);
  500.   
  501.       op = *regparse;
  502.       if (!ISMULT(op)) {
  503. ***************
  504. *** 509,516
  505.       break;
  506.       case '(':
  507.       ret = reg(1, &flags);
  508. !     if (ret == NULL)
  509. !         return (NULL);
  510.       *flagp |= flags & (HASWIDTH | SPSTART);
  511.       break;
  512.       case '\0':
  513.  
  514. --- 512,519 -----
  515.       break;
  516.       case '(':
  517.       ret = reg(1, &flags);
  518. !     if (ret == (char *)NULL)
  519. !         return ((char *)NULL);
  520.       *flagp |= flags & (HASWIDTH | SPSTART);
  521.       break;
  522.       case '\0':
  523. ***************
  524. *** 638,644
  525.       scan = p;
  526.       for (;;) {
  527.       temp = regnext(scan);
  528. !     if (temp == NULL)
  529.           break;
  530.       scan = temp;
  531.       }
  532.  
  533. --- 641,647 -----
  534.       scan = p;
  535.       for (;;) {
  536.       temp = regnext(scan);
  537. !     if (temp == (char *)NULL)
  538.           break;
  539.       scan = temp;
  540.       }
  541. ***************
  542. *** 659,665
  543.   char           *val;
  544.   {
  545.       /* "Operandless" and "op != BRANCH" are synonymous in practice. */
  546. !     if (p == NULL || p == ®dummy || OP(p) != BRANCH)
  547.       return;
  548.       regtail(OPERAND(p), val);
  549.   }
  550.  
  551. --- 662,668 -----
  552.   char           *val;
  553.   {
  554.       /* "Operandless" and "op != BRANCH" are synonymous in practice. */
  555. !     if (p == (char *)NULL || p == ®dummy || OP(p) != BRANCH)
  556.       return;
  557.       regtail(OPERAND(p), val);
  558.   }
  559. ***************
  560. *** 699,705
  561.       register char  *s;
  562.   
  563.       /* Be paranoid... */
  564. !     if (prog == NULL || string == NULL) {
  565.       regerror("NULL parameter");
  566.       return (0);
  567.       }
  568.  
  569. --- 702,708 -----
  570.       register char  *s;
  571.   
  572.       /* Be paranoid... */
  573. !     if (prog == (regexp *)NULL || string == (char *)NULL) {
  574.       regerror("NULL parameter");
  575.       return (0);
  576.       }
  577. ***************
  578. *** 709,715
  579.       return (0);
  580.       }
  581.       /* If there is a "must appear" string, look for it. */
  582. !     if (prog->regmust != NULL) {
  583.       s = string;
  584.       while ((s = strchr(s, prog->regmust[0])) != NULL) {
  585.           if (strncmp(s, prog->regmust, prog->regmlen) == 0)
  586.  
  587. --- 712,718 -----
  588.       return (0);
  589.       }
  590.       /* If there is a "must appear" string, look for it. */
  591. !     if (prog->regmust != (char *)NULL) {
  592.       s = string;
  593.       while ((s = strchr(s, prog->regmust[0])) != (char *)NULL) {
  594.           if (strncmp(s, prog->regmust, prog->regmlen) == 0)
  595. ***************
  596. *** 711,717
  597.       /* If there is a "must appear" string, look for it. */
  598.       if (prog->regmust != NULL) {
  599.       s = string;
  600. !     while ((s = strchr(s, prog->regmust[0])) != NULL) {
  601.           if (strncmp(s, prog->regmust, prog->regmlen) == 0)
  602.           break;        /* Found it. */
  603.           s++;
  604.  
  605. --- 714,720 -----
  606.       /* If there is a "must appear" string, look for it. */
  607.       if (prog->regmust != (char *)NULL) {
  608.       s = string;
  609. !     while ((s = strchr(s, prog->regmust[0])) != (char *)NULL) {
  610.           if (strncmp(s, prog->regmust, prog->regmlen) == 0)
  611.           break;        /* Found it. */
  612.           s++;
  613. ***************
  614. *** 716,722
  615.           break;        /* Found it. */
  616.           s++;
  617.       }
  618. !     if (s == NULL)        /* Not present. */
  619.           return (0);
  620.       }
  621.       /* Mark beginning of line for ^ . */
  622.  
  623. --- 719,725 -----
  624.           break;        /* Found it. */
  625.           s++;
  626.       }
  627. !     if (s == (char *)NULL)        /* Not present. */
  628.           return (0);
  629.       }
  630.       /* Mark beginning of line for ^ . */
  631. ***************
  632. *** 730,736
  633.       s = string;
  634.       if (prog->regstart != '\0')
  635.       /* We know what char it must start with. */
  636. !     while ((s = strchr(s, prog->regstart)) != NULL) {
  637.           if (regtry(prog, s))
  638.           return (1);
  639.           s++;
  640.  
  641. --- 733,739 -----
  642.       s = string;
  643.       if (prog->regstart != '\0')
  644.       /* We know what char it must start with. */
  645. !     while ((s = strchr(s, prog->regstart)) != (char *)NULL) {
  646.           if (regtry(prog, s))
  647.           return (1);
  648.           s++;
  649. ***************
  650. *** 772,779
  651.       sp = prog->startp;
  652.       ep = prog->endp;
  653.       for (i = NSUBEXP; i > 0; i--) {
  654. !     *sp++ = NULL;
  655. !     *ep++ = NULL;
  656.       }
  657.       if (regmatch(prog->program + 1)) {
  658.       prog->startp[0] = string;
  659.  
  660. --- 775,782 -----
  661.       sp = prog->startp;
  662.       ep = prog->endp;
  663.       for (i = NSUBEXP; i > 0; i--) {
  664. !     *sp++ = (char *)NULL;
  665. !     *ep++ = (char *)NULL;
  666.       }
  667.       if (regmatch(prog->program + 1)) {
  668.       prog->startp[0] = string;
  669. ***************
  670. *** 809,815
  671.   
  672.       scan = prog;
  673.   #ifdef DEBUG
  674. !     if (scan != NULL && regnarrate)
  675.       fprintf(stderr, "%s(\n", regprop(scan));
  676.   #endif
  677.       while (scan != NULL) {
  678.  
  679. --- 812,818 -----
  680.   
  681.       scan = prog;
  682.   #ifdef DEBUG
  683. !     if (scan != (char *)NULL && regnarrate)
  684.       fprintf(stderr, "%s(\n", regprop(scan));
  685.   #endif
  686.       while (scan != (char *)NULL) {
  687. ***************
  688. *** 812,818
  689.       if (scan != NULL && regnarrate)
  690.       fprintf(stderr, "%s(\n", regprop(scan));
  691.   #endif
  692. !     while (scan != NULL) {
  693.   #ifdef DEBUG
  694.       if (regnarrate)
  695.           fprintf(stderr, "%s...\n", regprop(scan));
  696.  
  697. --- 815,821 -----
  698.       if (scan != (char *)NULL && regnarrate)
  699.       fprintf(stderr, "%s(\n", regprop(scan));
  700.   #endif
  701. !     while (scan != (char *)NULL) {
  702.   #ifdef DEBUG
  703.       if (regnarrate)
  704.           fprintf(stderr, "%s...\n", regprop(scan));
  705. ***************
  706. *** 848,854
  707.           }
  708.           break;
  709.       case ANYOF:
  710. !         if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) == NULL)
  711.           return (0);
  712.           reginput++;
  713.           break;
  714.  
  715. --- 851,858 -----
  716.           }
  717.           break;
  718.       case ANYOF:
  719. !         if (*reginput == '\0' || 
  720. !          strchr(OPERAND(scan), *reginput) == (char *)NULL)
  721.           return (0);
  722.           reginput++;
  723.           break;
  724. ***************
  725. *** 853,859
  726.           reginput++;
  727.           break;
  728.       case ANYBUT:
  729. !         if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) != NULL)
  730.           return (0);
  731.           reginput++;
  732.           break;
  733.  
  734. --- 857,864 -----
  735.           reginput++;
  736.           break;
  737.       case ANYBUT:
  738. !         if (*reginput == '\0' || 
  739. !          strchr(OPERAND(scan), *reginput) != (char *)NULL)
  740.           return (0);
  741.           reginput++;
  742.           break;
  743. ***************
  744. *** 881,887
  745.                * Don't set startp if some later invocation of the same
  746.                * parentheses already has. 
  747.                */
  748. !             if (regstartp[no] == NULL)
  749.               regstartp[no] = save;
  750.               return (1);
  751.           } else
  752.  
  753. --- 886,892 -----
  754.                * Don't set startp if some later invocation of the same
  755.                * parentheses already has. 
  756.                */
  757. !             if (regstartp[no] == (char *)NULL)
  758.               regstartp[no] = save;
  759.               return (1);
  760.           } else
  761. ***************
  762. *** 908,914
  763.                * Don't set endp if some later invocation of the same
  764.                * parentheses already has. 
  765.                */
  766. !             if (regendp[no] == NULL)
  767.               regendp[no] = save;
  768.               return (1);
  769.           } else
  770.  
  771. --- 913,919 -----
  772.                * Don't set endp if some later invocation of the same
  773.                * parentheses already has. 
  774.                */
  775. !             if (regendp[no] == (char *)NULL)
  776.               regendp[no] = save;
  777.               return (1);
  778.           } else
  779. ***************
  780. *** 927,933
  781.                   return (1);
  782.               reginput = save;
  783.               scan = regnext(scan);
  784. !             } while (scan != NULL && OP(scan) == BRANCH);
  785.               return (0);
  786.               /* NOTREACHED */
  787.           }
  788.  
  789. --- 932,938 -----
  790.                   return (1);
  791.               reginput = save;
  792.               scan = regnext(scan);
  793. !             } while (scan != (char *)NULL && OP(scan) == BRANCH);
  794.               return (0);
  795.               /* NOTREACHED */
  796.           }
  797. ***************
  798. *** 937,943
  799.           register char   nextch;
  800.           register int    no;
  801.           register char  *save;
  802. !         register int    min;
  803.   
  804.           /*
  805.            * Lookahead to avoid useless match attempts when we know
  806.  
  807. --- 942,948 -----
  808.           register char   nextch;
  809.           register int    no;
  810.           register char  *save;
  811. !         register int    minimum;
  812.   
  813.           /*
  814.            * Lookahead to avoid useless match attempts when we know
  815. ***************
  816. *** 946,952
  817.           nextch = '\0';
  818.           if (OP(nxt) == EXACTLY)
  819.               nextch = *OPERAND(nxt);
  820. !         min = (OP(scan) == STAR) ? 0 : 1;
  821.           save = reginput;
  822.           no = regrepeat(OPERAND(scan));
  823.           while (no >= min) {
  824.  
  825. --- 951,957 -----
  826.           nextch = '\0';
  827.           if (OP(nxt) == EXACTLY)
  828.               nextch = *OPERAND(nxt);
  829. !         minimum = (OP(scan) == STAR) ? 0 : 1;
  830.           save = reginput;
  831.           no = regrepeat(OPERAND(scan));
  832.           while (no >= minimum) {
  833. ***************
  834. *** 949,955
  835.           min = (OP(scan) == STAR) ? 0 : 1;
  836.           save = reginput;
  837.           no = regrepeat(OPERAND(scan));
  838. !         while (no >= min) {
  839.               /* If it could work, try it. */
  840.               if (nextch == '\0' || *reginput == nextch)
  841.               if (regmatch(nxt))
  842.  
  843. --- 954,960 -----
  844.           minimum = (OP(scan) == STAR) ? 0 : 1;
  845.           save = reginput;
  846.           no = regrepeat(OPERAND(scan));
  847. !         while (no >= minimum) {
  848.               /* If it could work, try it. */
  849.               if (nextch == '\0' || *reginput == nextch)
  850.               if (regmatch(nxt))
  851. ***************
  852. *** 1013,1019
  853.       }
  854.       break;
  855.       case ANYOF:
  856. !     while (*scan != '\0' && strchr(opnd, *scan) != NULL) {
  857.           count++;
  858.           scan++;
  859.       }
  860.  
  861. --- 1018,1024 -----
  862.       }
  863.       break;
  864.       case ANYOF:
  865. !     while (*scan != '\0' && strchr(opnd, *scan) != (char *)NULL) {
  866.           count++;
  867.           scan++;
  868.       }
  869. ***************
  870. *** 1019,1025
  871.       }
  872.       break;
  873.       case ANYBUT:
  874. !     while (*scan != '\0' && strchr(opnd, *scan) == NULL) {
  875.           count++;
  876.           scan++;
  877.       }
  878.  
  879. --- 1024,1030 -----
  880.       }
  881.       break;
  882.       case ANYBUT:
  883. !     while (*scan != '\0' && strchr(opnd, *scan) == (char *)NULL) {
  884.           count++;
  885.           scan++;
  886.       }
  887. ***************
  888. *** 1052,1058
  889.       register int    offset;
  890.   
  891.       if (p == ®dummy)
  892. !     return (NULL);
  893.   
  894.       offset = NEXT(p);
  895.       if (offset == 0)
  896.  
  897. --- 1057,1063 -----
  898.       register int    offset;
  899.   
  900.       if (p == ®dummy)
  901. !     return ((char *)NULL);
  902.   
  903.       offset = NEXT(p);
  904.       if (offset == 0)
  905. ***************
  906. *** 1056,1062
  907.   
  908.       offset = NEXT(p);
  909.       if (offset == 0)
  910. !     return (NULL);
  911.   
  912.       if (OP(p) == BACK)
  913.       return (p - offset);
  914.  
  915. --- 1061,1067 -----
  916.   
  917.       offset = NEXT(p);
  918.       if (offset == 0)
  919. !     return ((char *)NULL);
  920.   
  921.       if (OP(p) == BACK)
  922.       return (p - offset);
  923. ***************
  924. *** 1093,1099
  925.       op = OP(s);
  926.       printf("%2d%s", s - r->program, regprop(s));    /* Where, what. */
  927.       nxt = regnext(s);
  928. !     if (nxt == NULL)    /* nxt ptr. */
  929.           printf("(0)");
  930.       else
  931.           printf("(%d)", (s - r->program) + (nxt - s));
  932.  
  933. --- 1098,1104 -----
  934.       op = OP(s);
  935.       printf("%2d%s", s - r->program, regprop(s));    /* Where, what. */
  936.       nxt = regnext(s);
  937. !     if (nxt == (char *)NULL)    /* nxt ptr. */
  938.           printf("(0)");
  939.       else
  940.           printf("(%d)", (s - r->program) + (nxt - s));
  941. ***************
  942. *** 1114,1120
  943.       printf("start `%c' ", r->regstart);
  944.       if (r->reganch)
  945.       printf("anchored ");
  946. !     if (r->regmust != NULL)
  947.       printf("must have \"%s\"", r->regmust);
  948.       printf("\n");
  949.   }
  950.  
  951. --- 1119,1125 -----
  952.       printf("start `%c' ", r->regstart);
  953.       if (r->reganch)
  954.       printf("anchored ");
  955. !     if (r->regmust != (char *)NULL)
  956.       printf("must have \"%s\"", r->regmust);
  957.       printf("\n");
  958.   }
  959. ***************
  960. *** 1179,1185
  961.       case OPEN + 8:
  962.       case OPEN + 9:
  963.       sprintf(buf + strlen(buf), "OPEN%d", OP(op) - OPEN);
  964. !     p = NULL;
  965.       break;
  966.       case CLOSE + 1:
  967.       case CLOSE + 2:
  968.  
  969. --- 1184,1190 -----
  970.       case OPEN + 8:
  971.       case OPEN + 9:
  972.       sprintf(buf + strlen(buf), "OPEN%d", OP(op) - OPEN);
  973. !     p = (char *)NULL;
  974.       break;
  975.       case CLOSE + 1:
  976.       case CLOSE + 2:
  977. ***************
  978. *** 1191,1197
  979.       case CLOSE + 8:
  980.       case CLOSE + 9:
  981.       sprintf(buf + strlen(buf), "CLOSE%d", OP(op) - CLOSE);
  982. !     p = NULL;
  983.       break;
  984.       case STAR:
  985.       p = "STAR";
  986.  
  987. --- 1196,1202 -----
  988.       case CLOSE + 8:
  989.       case CLOSE + 9:
  990.       sprintf(buf + strlen(buf), "CLOSE%d", OP(op) - CLOSE);
  991. !     p = (char *)NULL;
  992.       break;
  993.       case STAR:
  994.       p = "STAR";
  995. ***************
  996. *** 1200,1206
  997.       regerror("corrupted opcode");
  998.       break;
  999.       }
  1000. !     if (p != NULL)
  1001.       strcat(buf, p);
  1002.       return (buf);
  1003.   }
  1004.  
  1005. --- 1205,1211 -----
  1006.       regerror("corrupted opcode");
  1007.       break;
  1008.       }
  1009. !     if (p != (char *)NULL)
  1010.       strcat(buf, p);
  1011.       return (buf);
  1012.   }
  1013. ***************
  1014. *** 1269,1275
  1015.       register int    len;
  1016.       extern char    *strncpy();
  1017.   
  1018. !     if (prog == NULL || source == NULL || dest == NULL) {
  1019.       regerror("NULL parm to regsub");
  1020.       return;
  1021.       }
  1022.  
  1023. --- 1274,1281 -----
  1024.       register int    len;
  1025.       extern char    *strncpy();
  1026.   
  1027. !     if (prog == (regexp *)NULL || 
  1028. !     source == (char *)NULL || dest == (char *)NULL) {
  1029.       regerror("NULL parm to regsub");
  1030.       return;
  1031.       }
  1032. ***************
  1033. *** 1291,1297
  1034.           if (c == '\\' && (*src == '\\' || *src == '&'))
  1035.           c = *src++;
  1036.           *dst++ = c;
  1037. !     } else if (prog->startp[no] != NULL && prog->endp[no] != NULL) {
  1038.           len = prog->endp[no] - prog->startp[no];
  1039.           strncpy(dst, prog->startp[no], len);
  1040.           dst += len;
  1041.  
  1042. --- 1297,1304 -----
  1043.           if (c == '\\' && (*src == '\\' || *src == '&'))
  1044.           c = *src++;
  1045.           *dst++ = c;
  1046. !     } else if (prog->startp[no] != (char *)NULL && 
  1047. !            prog->endp[no] != (char *)NULL) {
  1048.           len = prog->endp[no] - prog->startp[no];
  1049.           strncpy(dst, prog->startp[no], len);
  1050.           dst += len;
  1051. Index: replace.c
  1052. *** /tmp/,RCSt1a17153    Sun Feb 12 14:09:24 1989
  1053. --- replace.c    Sun Feb 12 14:02:36 1989
  1054. ***************
  1055. *** 1,6
  1056.   /* $Source: /u/mark/src/pax/RCS/replace.c,v $
  1057.    *
  1058. !  * $Revision: 1.1 $
  1059.    *
  1060.    * replace.c - regular expression pattern replacement functions
  1061.    *
  1062.  
  1063. --- 1,6 -----
  1064.   /* $Source: /u/mark/src/pax/RCS/replace.c,v $
  1065.    *
  1066. !  * $Revision: 1.2 $
  1067.    *
  1068.    * replace.c - regular expression pattern replacement functions
  1069.    *
  1070. ***************
  1071. *** 27,33
  1072.    *
  1073.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1074.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1075. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1076.    *
  1077.    * $Log:    replace.c,v $
  1078.    * Revision 1.1  88/12/23  18:02:36  mark
  1079.  
  1080. --- 27,33 -----
  1081.    *
  1082.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1083.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1084. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1085.    *
  1086.    * $Log:    replace.c,v $
  1087.    * Revision 1.2  89/02/12  10:05:59  mark
  1088. ***************
  1089. *** 30,35
  1090.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1091.    *
  1092.    * $Log:    replace.c,v $
  1093.    * Revision 1.1  88/12/23  18:02:36  mark
  1094.    * Initial revision
  1095.    * 
  1096.  
  1097. --- 30,38 -----
  1098.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1099.    *
  1100.    * $Log:    replace.c,v $
  1101. +  * Revision 1.2  89/02/12  10:05:59  mark
  1102. +  * 1.2 release fixes
  1103. +  * 
  1104.    * Revision 1.1  88/12/23  18:02:36  mark
  1105.    * Initial revision
  1106.    * 
  1107. ***************
  1108. *** 36,42
  1109.    */
  1110.   
  1111.   #ifndef lint
  1112. ! static char *ident = "$Id: replace.c,v 1.1 88/12/23 18:02:36 mark Rel $";
  1113.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1114.   #endif /* not lint */
  1115.   
  1116.  
  1117. --- 39,45 -----
  1118.    */
  1119.   
  1120.   #ifndef lint
  1121. ! static char *ident = "$Id: replace.c,v 1.2 89/02/12 10:05:59 mark Exp $";
  1122.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1123.   #endif /* not lint */
  1124.   
  1125. ***************
  1126. *** 78,84
  1127.            "Malformed substitution syntax");
  1128.       return;
  1129.       }
  1130. !     if ((rptr = (Replstr *) malloc(sizeof(Replstr))) == NULL) {
  1131.       warn("Replacement string not added", "No space");
  1132.       return;
  1133.       }
  1134.  
  1135. --- 81,87 -----
  1136.            "Malformed substitution syntax");
  1137.       return;
  1138.       }
  1139. !     if ((rptr = (Replstr *) malloc(sizeof(Replstr))) == (Replstr *)NULL) {
  1140.       warn("Replacement string not added", "No space");
  1141.       return;
  1142.       }
  1143. ***************
  1144. *** 130,136
  1145.        * Now pattern points to 'old' and p points to 'new' and both are '\0'
  1146.        * terminated 
  1147.        */
  1148. !     if ((rptr->comp = regcomp(pattern)) == NULL) {
  1149.       warn("Replacement string not added", "Invalid RE");
  1150.       free(rptr);
  1151.       return;
  1152.  
  1153. --- 133,139 -----
  1154.        * Now pattern points to 'old' and p points to 'new' and both are '\0'
  1155.        * terminated 
  1156.        */
  1157. !     if ((rptr->comp = regcomp(pattern)) == (regexp *)NULL) {
  1158.       warn("Replacement string not added", "Invalid RE");
  1159.       free(rptr);
  1160.       return;
  1161. ***************
  1162. *** 136,143
  1163.       return;
  1164.       }
  1165.       rptr->replace = p;
  1166. !     rptr->next = NULL;
  1167. !     if (rplhead == NULL) {
  1168.       rplhead = rptr;
  1169.       rpltail = rptr;
  1170.       } else {
  1171.  
  1172. --- 139,146 -----
  1173.       return;
  1174.       }
  1175.       rptr->replace = p;
  1176. !     rptr->next = (Replstr *)NULL;
  1177. !     if (rplhead == (Replstr *)NULL) {
  1178.       rplhead = rptr;
  1179.       rpltail = rptr;
  1180.       } else {
  1181. ***************
  1182. *** 182,188
  1183.       char           *b;
  1184.   
  1185.       strcpy(buff, name);
  1186. !     for (rptr = rplhead; !found && rptr != NULL; rptr = rptr->next) {
  1187.       do {
  1188.           if ((ret = regexec(rptr->comp, buff)) != 0) {
  1189.           p = buff;
  1190.  
  1191. --- 185,191 -----
  1192.       char           *b;
  1193.   
  1194.       strcpy(buff, name);
  1195. !     for (rptr = rplhead; !found && rptr != (Replstr *)NULL; rptr = rptr->next) {
  1196.       do {
  1197.           if ((ret = regexec(rptr->comp, buff)) != 0) {
  1198.           p = buff;
  1199. Index: tar.1
  1200. *** /tmp/,RCSt1a17158    Sun Feb 12 14:09:31 1989
  1201. --- tar.1    Sun Feb 12 14:02:37 1989
  1202. ***************
  1203. *** 1,4
  1204. ! .\" $Id: tar.1,v 1.1 88/12/23 18:02:37 mark Rel $
  1205.   .TH TAR 1 "USENIX Association" ""
  1206.   .SH NAME
  1207.   tar \- process tape archives
  1208.  
  1209. --- 1,4 -----
  1210. ! .\" $Id: tar.1,v 1.2 89/02/12 10:08:55 mark Exp $
  1211.   .TH TAR 1 "USENIX Association" ""
  1212.   .SH NAME
  1213.   tar \- process tape archives
  1214. ***************
  1215. *** 178,184
  1216.   .PP
  1217.   THE SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1218.   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1219. ! WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1220.   .SH AUTHOR
  1221.   Mark H. Colburn
  1222.   .br
  1223.  
  1224. --- 178,184 -----
  1225.   .PP
  1226.   THE SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1227.   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1228. ! WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1229.   .SH AUTHOR
  1230.   Mark H. Colburn
  1231.   .br
  1232. Index: tar.c
  1233. *** /tmp/,RCSt1a17163    Sun Feb 12 14:09:37 1989
  1234. --- tar.c    Sun Feb 12 14:02:38 1989
  1235. ***************
  1236. *** 1,6
  1237.   /* $Source: /u/mark/src/pax/RCS/tar.c,v $
  1238.    *
  1239. !  * $Revision: 1.1 $
  1240.    *
  1241.    * tar.c - tar specific functions for archive handling
  1242.    *
  1243.  
  1244. --- 1,6 -----
  1245.   /* $Source: /u/mark/src/pax/RCS/tar.c,v $
  1246.    *
  1247. !  * $Revision: 1.2 $
  1248.    *
  1249.    * tar.c - tar specific functions for archive handling
  1250.    *
  1251. ***************
  1252. *** 27,33
  1253.    *
  1254.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1255.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1256. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1257.    *
  1258.    * $Log:    tar.c,v $
  1259.    * Revision 1.1  88/12/23  18:02:38  mark
  1260.  
  1261. --- 27,33 -----
  1262.    *
  1263.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1264.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1265. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1266.    *
  1267.    * $Log:    tar.c,v $
  1268.    * Revision 1.2  89/02/12  10:06:05  mark
  1269. ***************
  1270. *** 30,35
  1271.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1272.    *
  1273.    * $Log:    tar.c,v $
  1274.    * Revision 1.1  88/12/23  18:02:38  mark
  1275.    * Initial revision
  1276.    * 
  1277.  
  1278. --- 30,38 -----
  1279.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1280.    *
  1281.    * $Log:    tar.c,v $
  1282. +  * Revision 1.2  89/02/12  10:06:05  mark
  1283. +  * 1.2 release fixes
  1284. +  * 
  1285.    * Revision 1.1  88/12/23  18:02:38  mark
  1286.    * Initial revision
  1287.    * 
  1288. ***************
  1289. *** 36,42
  1290.    */
  1291.   
  1292.   #ifndef lint
  1293. ! static char *ident = "$Id: tar.c,v 1.1 88/12/23 18:02:38 mark Rel $";
  1294.   static char *copyright ="Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.";
  1295.   #endif /* not lint */
  1296.   
  1297.  
  1298. --- 39,45 -----
  1299.    */
  1300.   
  1301.   #ifndef lint
  1302. ! static char *ident = "$Id: tar.c,v 1.2 89/02/12 10:06:05 mark Exp $";
  1303.   static char *copyright ="Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.";
  1304.   #endif /* not lint */
  1305.   
  1306. ***************
  1307. *** 109,116
  1308.        * of the tar and/or cpio interfaces...
  1309.        */
  1310.       f_unconditional = 1;
  1311. !     f_modification_time = 1;
  1312. !     f_create_dirs = 1;
  1313.       blocking = 0;
  1314.       ar_interface = TAR;
  1315.       ar_format = TAR;
  1316.  
  1317. --- 112,119 -----
  1318.        * of the tar and/or cpio interfaces...
  1319.        */
  1320.       f_unconditional = 1;
  1321. !     f_mtime = 1;
  1322. !     f_dir_create = 1;
  1323.       blocking = 0;
  1324.       ar_interface = TAR;
  1325.       ar_format = TAR;
  1326. ***************
  1327. *** 114,120
  1328.       blocking = 0;
  1329.       ar_interface = TAR;
  1330.       ar_format = TAR;
  1331. !     msgfile=stdout;
  1332.   
  1333.       /* Parse options */
  1334.       while ((c = taropt(argc, argv, "b:cf:hlmortuvwx")) != EOF) {
  1335.  
  1336. --- 117,123 -----
  1337.       blocking = 0;
  1338.       ar_interface = TAR;
  1339.       ar_format = TAR;
  1340. !     msgfile=stderr;
  1341.   
  1342.       /* Parse options */
  1343.       while ((c = taropt(argc, argv, "b:cf:hlmortuvwx")) != EOF) {
  1344. ***************
  1345. *** 258,264
  1346.       char            c;
  1347.       char           *place;
  1348.   
  1349. !     optarg = NULL;
  1350.   
  1351.       if (key == NULL) {        /* First time */
  1352.       if (argc < 2)
  1353.  
  1354. --- 261,267 -----
  1355.       char            c;
  1356.       char           *place;
  1357.   
  1358. !     optarg = (char *)NULL;
  1359.   
  1360.       if (key == (char *)NULL) {        /* First time */
  1361.       if (argc < 2)
  1362. ***************
  1363. *** 260,266
  1364.   
  1365.       optarg = NULL;
  1366.   
  1367. !     if (key == NULL) {        /* First time */
  1368.       if (argc < 2)
  1369.           return EOF;
  1370.       key = argv[1];
  1371.  
  1372. --- 263,269 -----
  1373.   
  1374.       optarg = (char *)NULL;
  1375.   
  1376. !     if (key == (char *)NULL) {        /* First time */
  1377.       if (argc < 2)
  1378.           return EOF;
  1379.       key = argv[1];
  1380. ***************
  1381. *** 280,286
  1382.       }
  1383.       place = strchr(optstring, c);
  1384.   
  1385. !     if (place == NULL || c == ':') {
  1386.       fprintf(stderr, "%s: unknown option %c\n", argv[0], c);
  1387.       return ('?');
  1388.       }
  1389.  
  1390. --- 283,289 -----
  1391.       }
  1392.       place = strchr(optstring, c);
  1393.   
  1394. !     if (place == (char *)NULL || c == ':') {
  1395.       fprintf(stderr, "%s: unknown option %c\n", argv[0], c);
  1396.       return ('?');
  1397.       }
  1398. ***************
  1399. *** 323,337
  1400.   
  1401.   #endif
  1402.   {
  1403. !     fprintf(stderr, "\
  1404. ! Usage: %s -c[bfvw] device block filename..\n", myname);
  1405. !     fprintf(stderr, "\
  1406. !        %s -r[bvw] device block [filename...]\n", myname);
  1407. !     fprintf(stderr, "\
  1408. !        %s -t[vf] device\n", myname);
  1409. !     fprintf(stderr, "\
  1410. !        %s -u[bvw] device block [filename...]\n", myname);
  1411. !     fprintf(stderr, "\
  1412. !        %s -x[flmovw] device [filename...]\n", myname);
  1413.       exit(1);
  1414.   }
  1415.  
  1416. --- 326,335 -----
  1417.   
  1418.   #endif
  1419.   {
  1420. !     fprintf(stderr, "Usage: %s -c[bfvw] device block filename..\n", myname);
  1421. !     fprintf(stderr, "       %s -r[bvw] device block [filename...]\n", myname);
  1422. !     fprintf(stderr, "       %s -t[vf] device\n", myname);
  1423. !     fprintf(stderr, "       %s -u[bvw] device block [filename...]\n", myname);
  1424. !     fprintf(stderr, "       %s -x[flmovw] device [filename...]\n", myname);
  1425.       exit(1);
  1426.   }
  1427. Index: ttyio.c
  1428. *** /tmp/,RCSt1a17168    Sun Feb 12 14:09:46 1989
  1429. --- ttyio.c    Sun Feb 12 14:02:39 1989
  1430. ***************
  1431. *** 1,6
  1432.   /* $Source: /u/mark/src/pax/RCS/ttyio.c,v $
  1433.    *
  1434. !  * $Revision: 1.1 $
  1435.    *
  1436.    * ttyio.c - Terminal/Console I/O functions for all archive interfaces
  1437.    *
  1438.  
  1439. --- 1,6 -----
  1440.   /* $Source: /u/mark/src/pax/RCS/ttyio.c,v $
  1441.    *
  1442. !  * $Revision: 1.2 $
  1443.    *
  1444.    * ttyio.c - Terminal/Console I/O functions for all archive interfaces
  1445.    *
  1446. ***************
  1447. *** 28,34
  1448.    *
  1449.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1450.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1451. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1452.    *
  1453.    * $Log:    ttyio.c,v $
  1454.    * Revision 1.1  88/12/23  18:02:39  mark
  1455.  
  1456. --- 28,34 -----
  1457.    *
  1458.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1459.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1460. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1461.    *
  1462.    * $Log:    ttyio.c,v $
  1463.    * Revision 1.2  89/02/12  10:06:11  mark
  1464. ***************
  1465. *** 31,36
  1466.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1467.    *
  1468.    * $Log:    ttyio.c,v $
  1469.    * Revision 1.1  88/12/23  18:02:39  mark
  1470.    * Initial revision
  1471.    * 
  1472.  
  1473. --- 31,39 -----
  1474.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1475.    *
  1476.    * $Log:    ttyio.c,v $
  1477. +  * Revision 1.2  89/02/12  10:06:11  mark
  1478. +  * 1.2 release fixes
  1479. +  * 
  1480.    * Revision 1.1  88/12/23  18:02:39  mark
  1481.    * Initial revision
  1482.    * 
  1483. ***************
  1484. *** 37,43
  1485.    */
  1486.   
  1487.   #ifndef lint
  1488. ! static char *ident = "$Id: ttyio.c,v 1.1 88/12/23 18:02:39 mark Rel $";
  1489.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1490.   #endif /* ! lint */
  1491.   
  1492.  
  1493. --- 40,46 -----
  1494.    */
  1495.   
  1496.   #ifndef lint
  1497. ! static char *ident = "$Id: ttyio.c,v 1.2 89/02/12 10:06:11 mark Exp $";
  1498.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1499.   #endif /* ! lint */
  1500.   
  1501. ***************
  1502. *** 158,164
  1503.           return(-1);
  1504.       }
  1505.       if (got < 0) {
  1506. !     fatal(syserr());
  1507.       }
  1508.       answer[idx] = '\0';
  1509.       return(0);
  1510.  
  1511. --- 161,167 -----
  1512.           return(-1);
  1513.       }
  1514.       if (got < 0) {
  1515. !     fatal(strerror());
  1516.       }
  1517.       answer[idx] = '\0';
  1518.       return(0);
  1519. ***************
  1520. *** 244,252
  1521.   
  1522.       close_archive();
  1523.   
  1524. !     sprintf(msg, "\
  1525. ! %s: Ready for volume %u\n\
  1526. ! %s: Type \"go\" when ready to proceed (or \"quit\" to abort): \07",
  1527.              myname, arvolume + 1, myname);
  1528.       for (;;) {
  1529.       ret = nextask(msg, answer, sizeof(answer));
  1530.  
  1531. --- 247,253 -----
  1532.   
  1533.       close_archive();
  1534.   
  1535. !     sprintf(msg, "%s: Ready for volume %u\n%s: Type \"go\" when ready to proceed (or \"quit\" to abort): \07",
  1536.              myname, arvolume + 1, myname);
  1537.       for (;;) {
  1538.       ret = nextask(msg, answer, sizeof(answer));
  1539. Index: warn.c
  1540. *** /tmp/,RCSt1a17173    Sun Feb 12 14:09:53 1989
  1541. --- warn.c    Sun Feb 12 14:02:41 1989
  1542. ***************
  1543. *** 1,6
  1544.   /* $Source: /u/mark/src/pax/RCS/warn.c,v $
  1545.    *
  1546. !  * $Revision: 1.1 $
  1547.    *
  1548.    * warn.c - miscellaneous user warning routines 
  1549.    *
  1550.  
  1551. --- 1,6 -----
  1552.   /* $Source: /u/mark/src/pax/RCS/warn.c,v $
  1553.    *
  1554. !  * $Revision: 1.2 $
  1555.    *
  1556.    * warn.c - miscellaneous user warning routines 
  1557.    *
  1558. ***************
  1559. *** 27,33
  1560.    *
  1561.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1562.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1563. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1564.    *
  1565.    * $Log:    warn.c,v $
  1566.    * Revision 1.1  88/12/23  18:02:40  mark
  1567.  
  1568. --- 27,33 -----
  1569.    *
  1570.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1571.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1572. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1573.    *
  1574.    * $Log:    warn.c,v $
  1575.    * Revision 1.2  89/02/12  10:06:15  mark
  1576. ***************
  1577. *** 30,35
  1578.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1579.    *
  1580.    * $Log:    warn.c,v $
  1581.    * Revision 1.1  88/12/23  18:02:40  mark
  1582.    * Initial revision
  1583.    * 
  1584.  
  1585. --- 30,38 -----
  1586.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1587.    *
  1588.    * $Log:    warn.c,v $
  1589. +  * Revision 1.2  89/02/12  10:06:15  mark
  1590. +  * 1.2 release fixes
  1591. +  * 
  1592.    * Revision 1.1  88/12/23  18:02:40  mark
  1593.    * Initial revision
  1594.    * 
  1595. ***************
  1596. *** 36,42
  1597.    */
  1598.   
  1599.   #ifndef lint
  1600. ! static char *ident = "$Id: warn.c,v 1.1 88/12/23 18:02:40 mark Rel $";
  1601.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1602.   #endif /* ! lint */
  1603.   
  1604.  
  1605. --- 39,45 -----
  1606.    */
  1607.   
  1608.   #ifndef lint
  1609. ! static char *ident = "$Id: warn.c,v 1.2 89/02/12 10:06:15 mark Exp $";
  1610.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1611.   #endif /* ! lint */
  1612.   
  1613. ***************
  1614. *** 93,99
  1615.   }
  1616.   
  1617.   
  1618. ! /* syserr - return pointer to appropriate system error message
  1619.    *
  1620.    * DESCRIPTION
  1621.    *
  1622.  
  1623. --- 96,102 -----
  1624.   }
  1625.   
  1626.   
  1627. ! /* strerror - return pointer to appropriate system error message
  1628.    *
  1629.    * DESCRIPTION
  1630.    *
  1631. ***************
  1632. *** 112,118
  1633.   
  1634.   #ifdef __STDC__
  1635.   
  1636. ! char *syserr(void)
  1637.   
  1638.   #else
  1639.   
  1640.  
  1641. --- 115,121 -----
  1642.   
  1643.   #ifdef __STDC__
  1644.   
  1645. ! char *strerror(void)
  1646.   
  1647.   #else
  1648.   
  1649. ***************
  1650. *** 116,122
  1651.   
  1652.   #else
  1653.   
  1654. ! char *syserr()
  1655.   
  1656.   #endif
  1657.   {
  1658.  
  1659. --- 119,125 -----
  1660.   
  1661.   #else
  1662.   
  1663. ! char *strerror()
  1664.   
  1665.   #endif
  1666.   {
  1667. ***************
  1668. *** 162,168
  1669.   {
  1670.       OFFSET          n;
  1671.   
  1672. !     if (n = (size / (1024 * 1024))) {
  1673.       fprintf(stream, "%ldm+", n);
  1674.       size -= n * 1024 * 1024;
  1675.       }
  1676.  
  1677. --- 165,171 -----
  1678.   {
  1679.       OFFSET          n;
  1680.   
  1681. !     if (n = (size / (1024L * 1024L))) {
  1682.       fprintf(stream, "%ldm+", n);
  1683.       size -= n * 1024L * 1024L;
  1684.       }
  1685. ***************
  1686. *** 164,170
  1687.   
  1688.       if (n = (size / (1024 * 1024))) {
  1689.       fprintf(stream, "%ldm+", n);
  1690. !     size -= n * 1024 * 1024;
  1691.       }
  1692.       if (n = (size / 1024)) {
  1693.       fprintf(stream, "%ldk+", n);
  1694.  
  1695. --- 167,173 -----
  1696.   
  1697.       if (n = (size / (1024L * 1024L))) {
  1698.       fprintf(stream, "%ldm+", n);
  1699. !     size -= n * 1024L * 1024L;
  1700.       }
  1701.       if (n = (size / 1024L)) {
  1702.       fprintf(stream, "%ldk+", n);
  1703. ***************
  1704. *** 166,172
  1705.       fprintf(stream, "%ldm+", n);
  1706.       size -= n * 1024 * 1024;
  1707.       }
  1708. !     if (n = (size / 1024)) {
  1709.       fprintf(stream, "%ldk+", n);
  1710.       size -= n * 1024;
  1711.       }
  1712.  
  1713. --- 169,175 -----
  1714.       fprintf(stream, "%ldm+", n);
  1715.       size -= n * 1024L * 1024L;
  1716.       }
  1717. !     if (n = (size / 1024L)) {
  1718.       fprintf(stream, "%ldk+", n);
  1719.       size -= n * 1024L;
  1720.       }
  1721. ***************
  1722. *** 168,174
  1723.       }
  1724.       if (n = (size / 1024)) {
  1725.       fprintf(stream, "%ldk+", n);
  1726. !     size -= n * 1024;
  1727.       }
  1728.       fprintf(stream, "%ld", size);
  1729.   }
  1730.  
  1731. --- 171,177 -----
  1732.       }
  1733.       if (n = (size / 1024L)) {
  1734.       fprintf(stream, "%ldk+", n);
  1735. !     size -= n * 1024L;
  1736.       }
  1737.       fprintf(stream, "%ld", size);
  1738.   }
  1739. Index: wildmat.c
  1740. *** /tmp/,RCSt1a17178    Sun Feb 12 14:09:59 1989
  1741. --- wildmat.c    Sun Feb 12 14:02:42 1989
  1742. ***************
  1743. *** 1,6
  1744.   /* $Source: /u/mark/src/pax/RCS/wildmat.c,v $
  1745.    *
  1746. !  * $Revision: 1.1 $
  1747.    *
  1748.    * wildmat.c - simple regular expression pattern matching routines 
  1749.    *
  1750.  
  1751. --- 1,6 -----
  1752.   /* $Source: /u/mark/src/pax/RCS/wildmat.c,v $
  1753.    *
  1754. !  * $Revision: 1.2 $
  1755.    *
  1756.    * wildmat.c - simple regular expression pattern matching routines 
  1757.    *
  1758. ***************
  1759. *** 33,39
  1760.    *
  1761.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1762.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1763. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1764.    *
  1765.    * $Log:    wildmat.c,v $
  1766.    * Revision 1.1  88/12/23  18:02:41  mark
  1767.  
  1768. --- 33,39 -----
  1769.    *
  1770.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1771.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1772. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1773.    *
  1774.    * $Log:    wildmat.c,v $
  1775.    * Revision 1.2  89/02/12  10:06:20  mark
  1776. ***************
  1777. *** 36,41
  1778.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1779.    *
  1780.    * $Log:    wildmat.c,v $
  1781.    * Revision 1.1  88/12/23  18:02:41  mark
  1782.    * Initial revision
  1783.    * 
  1784.  
  1785. --- 36,44 -----
  1786.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1787.    *
  1788.    * $Log:    wildmat.c,v $
  1789. +  * Revision 1.2  89/02/12  10:06:20  mark
  1790. +  * 1.2 release fixes
  1791. +  * 
  1792.    * Revision 1.1  88/12/23  18:02:41  mark
  1793.    * Initial revision
  1794.    * 
  1795. ***************
  1796. *** 42,48
  1797.    */
  1798.   
  1799.   #ifndef lint
  1800. ! static char *ident = "$Id: wildmat.c,v 1.1 88/12/23 18:02:41 mark Rel $";
  1801.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1802.   #endif /* ! lint */
  1803.   
  1804.  
  1805. --- 45,51 -----
  1806.    */
  1807.   
  1808.   #ifndef lint
  1809. ! static char *ident = "$Id: wildmat.c,v 1.2 89/02/12 10:06:20 mark Exp $";
  1810.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1811.   #endif /* ! lint */
  1812.   
  1813. ***************
  1814. *** 97,103
  1815.   
  1816.   #endif
  1817.   {
  1818. !     while (!wildmat(source, pattern)) {
  1819.       if (*++source == '\0') {
  1820.           return (0);
  1821.       }
  1822.  
  1823. --- 100,106 -----
  1824.   
  1825.   #endif
  1826.   {
  1827. !     while (!wildmat(pattern, source)) {
  1828.       if (*++source == '\0') {
  1829.           return (0);
  1830.       }
  1831. ***************
  1832. *** 118,125
  1833.    *
  1834.    * PARAMETERS 
  1835.    *
  1836. -  *     char *source     - The source string which is to be compared to the 
  1837. -  *              regular expression pattern. 
  1838.    *     char *pattern     - The regular expression which we are supposed to 
  1839.    *              match to. 
  1840.    *
  1841.  
  1842. --- 121,126 -----
  1843.    *
  1844.    * PARAMETERS 
  1845.    *
  1846.    *     char *pattern     - The regular expression which we are supposed to 
  1847.    *              match to. 
  1848.    *     char *source     - The source string which is to be compared to the 
  1849. ***************
  1850. *** 122,127
  1851.    *              regular expression pattern. 
  1852.    *     char *pattern     - The regular expression which we are supposed to 
  1853.    *              match to. 
  1854.    *
  1855.    * RETURNS 
  1856.    *
  1857.  
  1858. --- 123,130 -----
  1859.    *
  1860.    *     char *pattern     - The regular expression which we are supposed to 
  1861.    *              match to. 
  1862. +  *     char *source     - The source string which is to be compared to the 
  1863. +  *              regular expression pattern. 
  1864.    *
  1865.    * RETURNS 
  1866.    *
  1867. Index: Makefile
  1868. *** /tmp/,RCSt1a17183    Sun Feb 12 14:10:07 1989
  1869. --- Makefile    Sun Feb 12 14:01:55 1989
  1870. ***************
  1871. *** 3,9
  1872.   #
  1873.   # Written by Mark H. Colburn (mark@jhereg.mn.org)
  1874.   #
  1875. ! # $Id: Makefile,v 1.1 88/12/23 18:02:42 mark Rel $
  1876.   #
  1877.   
  1878.   #
  1879.  
  1880. --- 3,9 -----
  1881.   #
  1882.   # Written by Mark H. Colburn (mark@jhereg.mn.org)
  1883.   #
  1884. ! # $Id: Makefile,v 1.2 89/02/12 10:08:59 mark Exp $
  1885.   #
  1886.   
  1887.   #
  1888. ***************
  1889. *** 30,35
  1890.   CC = cc
  1891.   
  1892.   #
  1893.   # Set LFLAGS to whatever makes your linker happy
  1894.   #
  1895.   #LDFLAGS = -s
  1896.  
  1897. --- 30,40 -----
  1898.   CC = cc
  1899.   
  1900.   #
  1901. + # Set LIBS to any additional libraries that you need linked in with pax.
  1902. + #
  1903. + LIBS=
  1904. + #
  1905.   # Set LFLAGS to whatever makes your linker happy
  1906.   #
  1907.   #LDFLAGS = -s
  1908. ***************
  1909. *** 36,41
  1910.   LDFLAGS = 
  1911.   
  1912.   #
  1913.   # Set LINTFLAGS to whatever makes your implementation of lint happy.  If
  1914.   # you don't undef __STDC__ and you have an ANSI C compiler, lint will choke 
  1915.   # on the function prototypes present in func.h
  1916.  
  1917. --- 41,52 -----
  1918.   LDFLAGS = 
  1919.   
  1920.   #
  1921. + # Set COPY to the name of the command to use to copy pax to cpio and
  1922. + # tar.  Usually it is 'ln'.
  1923. + #
  1924. + COPY=ln
  1925. + #
  1926.   # Set LINTFLAGS to whatever makes your implementation of lint happy.  If
  1927.   # you don't undef __STDC__ and you have an ANSI C compiler, lint will choke 
  1928.   # on the function prototypes present in func.h.
  1929. ***************
  1930. *** 38,44
  1931.   #
  1932.   # Set LINTFLAGS to whatever makes your implementation of lint happy.  If
  1933.   # you don't undef __STDC__ and you have an ANSI C compiler, lint will choke 
  1934. ! # on the function prototypes present in func.h
  1935.   #
  1936.   LINTFLAGS = -U__STDC__ $(POSIX)
  1937.   
  1938.  
  1939. --- 49,55 -----
  1940.   #
  1941.   # Set LINTFLAGS to whatever makes your implementation of lint happy.  If
  1942.   # you don't undef __STDC__ and you have an ANSI C compiler, lint will choke 
  1943. ! # on the function prototypes present in func.h.
  1944.   #
  1945.   LINTFLAGS = -U__STDC__ $(POSIX)
  1946.   
  1947. ***************
  1948. *** 53,58
  1949.   #
  1950.   MAN5 = /usr/man/man5
  1951.   MAN1 = /usr/man/man1
  1952.   
  1953.   #
  1954.   # There are three different ways to get POSIX or BSD conformant directory 
  1955.  
  1956. --- 64,71 -----
  1957.   #
  1958.   MAN5 = /usr/man/man5
  1959.   MAN1 = /usr/man/man1
  1960. + MAN5EXT = 5
  1961. + MAN1EXT = 1
  1962.   
  1963.   #
  1964.   # There are three different ways to get POSIX or BSD conformant directory 
  1965. ***************
  1966. *** 80,86
  1967.   # Nothing beyond this point should need to be changed.
  1968.   #
  1969.   
  1970. ! MISC   = Makefile pax.1 tar.5 cpio.5 README PATCHLEVEL
  1971.   HEADERS= config.h func.h limits.h port.h pax.h 
  1972.   SOURCE= pax.c append.c buffer.c cpio.c create.c extract.c fileio.c\
  1973.       link.c list.c mem.c namelist.c names.c pass.c pathname.c\
  1974.  
  1975. --- 93,100 -----
  1976.   # Nothing beyond this point should need to be changed.
  1977.   #
  1978.   
  1979. ! SHELL = /bin/sh
  1980. ! MISC  = Makefile pax.1 tar.5 cpio.5 README PATCHLEVEL
  1981.   HEADERS= config.h func.h limits.h port.h pax.h 
  1982.   SOURCE= pax.c append.c buffer.c cpio.c create.c extract.c fileio.c\
  1983.       link.c list.c mem.c namelist.c names.c pass.c pathname.c\
  1984. ***************
  1985. *** 95,101
  1986.   all: $(PROGS)
  1987.   
  1988.   install: $(PROGS)
  1989. !     mv $(PROGS) $(BINDIR)
  1990.       cp $(PMAN1) $(MAN1)
  1991.   #    cp $(PMAN5) $(MAN5)
  1992.   
  1993.  
  1994. --- 109,119 -----
  1995.   all: $(PROGS)
  1996.   
  1997.   install: $(PROGS)
  1998. !     strip pax
  1999. !     cp pax $(BINDIR)
  2000. !     chmod 755 $(BINDIR)/pax
  2001. !     ln $(BINDIR)/pax $(BINDIR)/tar
  2002. !     ln $(BINDIR)/pax $(BINDIR)/cpio
  2003.       cp $(PMAN1) $(MAN1)
  2004.   #    cp $(PMAN5) $(MAN5)
  2005.   
  2006. ***************
  2007. *** 107,113
  2008.       lint $(LINTFLAGS) $(SOURCE)
  2009.   
  2010.   pax : $(OBJECT)
  2011. !     $(CC) $(CFLAGS) -o pax $(OBJECT) $(DIRENT) 
  2012.   
  2013.   tar: pax
  2014.       rm -f tar
  2015.  
  2016. --- 125,131 -----
  2017.       lint $(LINTFLAGS) $(SOURCE)
  2018.   
  2019.   pax : $(OBJECT)
  2020. !     $(CC) $(CFLAGS) $(LDFLAGS) -o pax $(OBJECT) $(DIRENT) $(LIBS)
  2021.   
  2022.   tar: pax
  2023.       rm -f tar
  2024. ***************
  2025. *** 111,117
  2026.   
  2027.   tar: pax
  2028.       rm -f tar
  2029. !     ln pax tar
  2030.   
  2031.   cpio: pax
  2032.       rm -f cpio
  2033.  
  2034. --- 129,135 -----
  2035.   
  2036.   tar: pax
  2037.       rm -f tar
  2038. !     $(COPY) pax tar
  2039.   
  2040.   cpio: pax
  2041.       rm -f cpio
  2042. ***************
  2043. *** 115,120
  2044.   
  2045.   cpio: pax
  2046.       rm -f cpio
  2047. !     ln pax cpio
  2048.   
  2049.   $(OBJECT): $(HEADERS)
  2050.  
  2051. --- 133,138 -----
  2052.   
  2053.   cpio: pax
  2054.       rm -f cpio
  2055. !     $(COPY) pax cpio
  2056.   
  2057.   $(OBJECT): $(HEADERS)
  2058. Index: README
  2059. *** /tmp/,RCSt1a17188    Sun Feb 12 14:10:13 1989
  2060. --- README    Sun Feb 12 14:01:56 1989
  2061. ***************
  2062. *** 6,12
  2063.   
  2064.   Introduction
  2065.   
  2066. !     This is version 1.1 of Pax, a public domain archiving utility.  
  2067.       
  2068.       Pax is an archiving utility that reads and writes tar and cpio formats, 
  2069.       both the traditional ones and the extended formats specified in IEEE 
  2070.  
  2071. --- 6,12 -----
  2072.   
  2073.   Introduction
  2074.   
  2075. !     This is version 1.2 of Pax, an archiving utility.  
  2076.       
  2077.       Pax is an archiving utility that reads and writes tar and cpio formats, 
  2078.       both the traditional ones and the extended formats specified in IEEE 
  2079. ***************
  2080. *** 16,25
  2081.       1003.2 as a compromise in the chronic controversy over which of tar or 
  2082.       cpio is best.
  2083.   
  2084. !     The USENIX Association provided some support for this implementation 
  2085. !     project.  As a result, the Pax utility is being distributed free of 
  2086. !     charge and may be redistributed by others in either source or binary 
  2087. !     form.  (See the liscensing section for restrictions)
  2088.   
  2089.       The source for Pax is being posted to comp.sources.unix on USENET and 
  2090.       will also be available by anonymous FTP on the Internet from uunet.uu.net,
  2091.  
  2092. --- 16,25 -----
  2093.       1003.2 as a compromise in the chronic controversy over which of tar or 
  2094.       cpio is best.
  2095.   
  2096. !     The USENIX Association provided some support for the initial 
  2097. !     implementation of this product.  As a result, the Pax utility is being 
  2098. !     distributed free of charge and may be redistributed by others in either 
  2099. !     source or binary form.  (See the liscensing section for restrictions)
  2100.   
  2101.       The source for Pax has been posted to comp.sources.unix on USENET and 
  2102.       will also be available by anonymous FTP on the Internet from uunet.uu.net,
  2103. ***************
  2104. *** 21,27
  2105.       charge and may be redistributed by others in either source or binary 
  2106.       form.  (See the liscensing section for restrictions)
  2107.   
  2108. !     The source for Pax is being posted to comp.sources.unix on USENET and 
  2109.       will also be available by anonymous FTP on the Internet from uunet.uu.net,
  2110.       moon.honeywell.com and from one of the Berkeley machines.  The source
  2111.       to Pax will be available via anonymous UUCP from jhereg.mn.org, the 
  2112.  
  2113. --- 21,27 -----
  2114.       distributed free of charge and may be redistributed by others in either 
  2115.       source or binary form.  (See the liscensing section for restrictions)
  2116.   
  2117. !     The source for Pax has been posted to comp.sources.unix on USENET and 
  2118.       will also be available by anonymous FTP on the Internet from uunet.uu.net,
  2119.       moon.src.honeywell.com and from ucb-arpa.berkeley.edu.  The source
  2120.       to Pax is also available via anonymous UUCP from jhereg.mn.org, the 
  2121. ***************
  2122. *** 23,30
  2123.   
  2124.       The source for Pax is being posted to comp.sources.unix on USENET and 
  2125.       will also be available by anonymous FTP on the Internet from uunet.uu.net,
  2126. !     moon.honeywell.com and from one of the Berkeley machines.  The source
  2127. !     to Pax will be available via anonymous UUCP from jhereg.mn.org, the 
  2128.       author's home machine and possibly other sites.
  2129.   
  2130.       The source for Pax will continue to change as long as the definition of 
  2131.  
  2132. --- 23,30 -----
  2133.   
  2134.       The source for Pax has been posted to comp.sources.unix on USENET and 
  2135.       will also be available by anonymous FTP on the Internet from uunet.uu.net,
  2136. !     moon.src.honeywell.com and from ucb-arpa.berkeley.edu.  The source
  2137. !     to Pax is also available via anonymous UUCP from jhereg.mn.org, the 
  2138.       author's home machine and possibly other sites.
  2139.   
  2140.       The source for Pax will continue to change as long as the definition of 
  2141. ***************
  2142. *** 56,62
  2143.       machines:
  2144.   
  2145.           Machine                 Operating System/Release
  2146. !     -------------------------------------------------------
  2147.       Altos 586        System III (2.3)
  2148.       AT&T UNIX PC        System V.2 (Release 3.51)
  2149.       Cray 2            UNICOS
  2150.  
  2151. --- 56,62 -----
  2152.       machines:
  2153.   
  2154.           Machine                 Operating System/Release
  2155. !     ---------------------------------------------------
  2156.       Altos 586        System III (2.3)
  2157.       AT&T UNIX PC        System V.2 (Release 3.51)
  2158.           Convergent S/320    CTIX/68k 6.1, UNIX SysV 3.1
  2159. ***************
  2160. *** 59,64
  2161.       -------------------------------------------------------
  2162.       Altos 586        System III (2.3)
  2163.       AT&T UNIX PC        System V.2 (Release 3.51)
  2164.       Cray 2            UNICOS
  2165.       HP 9000            HP/UX 6.0.1
  2166.       Mac II             A/UX 1.0
  2167.  
  2168. --- 59,65 -----
  2169.       ---------------------------------------------------
  2170.       Altos 586        System III (2.3)
  2171.       AT&T UNIX PC        System V.2 (Release 3.51)
  2172. +         Convergent S/320    CTIX/68k 6.1, UNIX SysV 3.1
  2173.       Cray 2            UNICOS
  2174.       Encore CC        02.00.r088
  2175.       HP 9000            HP/UX 6.0.1
  2176. ***************
  2177. *** 60,65
  2178.       Altos 586        System III (2.3)
  2179.       AT&T UNIX PC        System V.2 (Release 3.51)
  2180.       Cray 2            UNICOS
  2181.       HP 9000            HP/UX 6.0.1
  2182.       Mac II             A/UX 1.0
  2183.       NCR Tower        System V.2
  2184.  
  2185. --- 61,67 -----
  2186.       AT&T UNIX PC        System V.2 (Release 3.51)
  2187.           Convergent S/320    CTIX/68k 6.1, UNIX SysV 3.1
  2188.       Cray 2            UNICOS
  2189. +     Encore CC        02.00.r088
  2190.       HP 9000            HP/UX 6.0.1
  2191.           IBM PC/AT        Microport SV/AT V2.4
  2192.       Mac II             A/UX 1.0
  2193. ***************
  2194. *** 61,66
  2195.       AT&T UNIX PC        System V.2 (Release 3.51)
  2196.       Cray 2            UNICOS
  2197.       HP 9000            HP/UX 6.0.1
  2198.       Mac II             A/UX 1.0
  2199.       NCR Tower        System V.2
  2200.       Pyramid            AT&T and Berkeley universe
  2201.  
  2202. --- 63,69 -----
  2203.       Cray 2            UNICOS
  2204.       Encore CC        02.00.r088
  2205.       HP 9000            HP/UX 6.0.1
  2206. +         IBM PC/AT        Microport SV/AT V2.4
  2207.       Mac II             A/UX 1.0
  2208.       NCR Tower        System V.2
  2209.       Pyramid            AT&T and Berkeley universe
  2210. ***************
  2211. *** 67,72
  2212.       Sequent Symetry        Dynix 3.0
  2213.       SGI Iris 4D/60G        UNIX 3.0
  2214.       SGI Iris 4D/70G        UNIX 3.0
  2215.       Sun 2            SunOS 3.4
  2216.       Sun 2            SunOS 3.5
  2217.       Sun 3            SunOS 3.4
  2218.  
  2219. --- 70,77 -----
  2220.       Sequent Symetry        Dynix 3.0
  2221.       SGI Iris 4D/60G        UNIX 3.0
  2222.       SGI Iris 4D/70G        UNIX 3.0
  2223. +     SCO Xenix 386         2.3.2
  2224. +     SCO Unix 386         3.2
  2225.       Sun 2            SunOS 3.4
  2226.       Sun 2            SunOS 3.5
  2227.       Sun 3            SunOS 3.4
  2228. ***************
  2229. *** 76,82
  2230.       VAX 8750        BSD 4.3 (Mt. Xinu)
  2231.       VAX 8650        BSD 4.3 (Mt. Xinu)
  2232.       VAX 780            BSD 4.3 (Berkeley)
  2233. !     -------------------------------------------------------
  2234.   
  2235.       In future releases, the source will be moving toward ANSI C and POSIX 
  2236.       compatibility.  This should allow for portability over any system 
  2237.  
  2238. --- 81,87 -----
  2239.       VAX 8750        BSD 4.3 (Mt. Xinu)
  2240.       VAX 8650        BSD 4.3 (Mt. Xinu)
  2241.       VAX 780            BSD 4.3 (Berkeley)
  2242. !     ---------------------------------------------------
  2243.   
  2244.       In future releases, the source will be moving toward ANSI C and POSIX 
  2245.       compatibility.  This should allow for portability over any system 
  2246. ***************
  2247. *** 110,116
  2248.   
  2249.       THE SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  2250.       IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  2251. !     WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  2252.   
  2253.   Please report any bug or problems to:
  2254.   
  2255.  
  2256. --- 115,121 -----
  2257.   
  2258.       THE SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  2259.       IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  2260. !     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  2261.   
  2262.   Please report any bug or problems to:
  2263.   
  2264. ***************
  2265. *** 115,121
  2266.   Please report any bug or problems to:
  2267.   
  2268.   Mark Colburn
  2269. ! NAPS International
  2270.   117 Mackubin St., Suite 1
  2271.   St. Paul MN   55102
  2272.   (612) 224-9108
  2273.  
  2274. --- 120,126 -----
  2275.   Please report any bug or problems to:
  2276.   
  2277.   Mark Colburn
  2278. ! Minnetech Consulting, Inc.
  2279.   117 Mackubin St., Suite 1
  2280.   St. Paul MN   55102
  2281.   mark@jhereg.MN.ORG
  2282. ***************
  2283. *** 118,122
  2284.   NAPS International
  2285.   117 Mackubin St., Suite 1
  2286.   St. Paul MN   55102
  2287. - (612) 224-9108
  2288.   mark@jhereg.MN.ORG
  2289.  
  2290. --- 123,126 -----
  2291.   Minnetech Consulting, Inc.
  2292.   117 Mackubin St., Suite 1
  2293.   St. Paul MN   55102
  2294.   mark@jhereg.MN.ORG
  2295. Index: PATCHLEVEL
  2296. *** /tmp/,RCSt1a17193    Sun Feb 12 14:10:19 1989
  2297. --- PATCHLEVEL    Sun Feb 12 14:01:55 1989
  2298. ***************
  2299. *** 1,2
  2300. ! Patchlevel 0
  2301. ! $Id: PATCHLEVEL,v 1.1 88/12/23 18:02:43 mark Rel $
  2302.  
  2303. --- 1,2 -----
  2304. ! Patchlevel 1
  2305. ! $Id: PATCHLEVEL,v 1.2 89/02/12 10:09:03 mark Exp $
  2306.  
  2307.  
  2308.  
  2309. -- 
  2310. Mark H. Colburn                  "Look into a child's eye;
  2311. Minnetech Consulting, Inc.        there's no hate and there's no lie;
  2312. mark@jhereg.mn.org                there's no black and there's no white."
  2313.  
  2314.  
  2315.