home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume20 / procmail / patch01 < prev    next >
Encoding:
Text File  |  1991-06-26  |  35.0 KB  |  1,114 lines

  1. Newsgroups: comp.sources.misc
  2. From: Stephen R. van den Berg <berg@messua.informatik.rwth-aachen.de>
  3. Subject:  v20i068:  procmail - mail processing program, Patch01
  4. Message-ID: <1991Jun25.194807.464@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: f9a174147fe5aa2c2d7d3d359cd1614c
  6. Date: Tue, 25 Jun 1991 19:48:07 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: Stephen R. van den Berg <berg@messua.informatik.rwth-aachen.de>
  10. Posting-number: Volume 20, Issue 68
  11. Archive-name: procmail/patch01
  12. Patch-To: procmail: Volume 20, Issue 49-51
  13. Environment: UNIX, sendmail
  14.  
  15. This patch file will upgrade procmail v2.02 to v2.03.
  16.  
  17. Fixes all the portability problems that have been reported to me.
  18. Contains several cosmetic improvements.  Fixes two minor bugs.
  19.  
  20. Save the following in a file; cd procmail; and feed it to patch like in:
  21.     patch -p < this_file_or_whatever_you_named_it
  22.  
  23. Check if no *.rej files were generated; rm all *.orig files in all
  24. subdirectories. 
  25.                               --
  26. The latest version (currently v2.03) can be obtained directly from the
  27. ftp-archive at:
  28.     amaru.informatik.rwth-aachen.de (137.226.112.31)
  29.  
  30.     as compressed tar file:        pub/unix/procmail.tar.Z
  31.     or in compressed shar format:    pub/unix/procmail.0?.Z
  32.  
  33. Stephen R. van den Berg.       
  34. -----------------------------cut here------------------------------
  35. diff -rc ../old/FEATURES ./FEATURES
  36. *** ../old/FEATURES    Tue Jun 18 16:12:55 1991
  37. --- ./FEATURES    Thu Jun 20 11:56:46 1991
  38. ***************
  39. *** 49,54 ****
  40. --- 49,55 ----
  41.         standard mail programs)
  42.       + Can split up mailboxes into the individual messages
  43.       + Can split up digests into the individual messages
  44. +     + Can split up saved articles into the individual articles
  45.   
  46.   Feature summary for lockfile:
  47.       + Provides NFS-secure lockfiles to shell script programmers
  48. diff -rc ../old/HISTORY ./HISTORY
  49. *** ../old/HISTORY    Tue Jun 18 16:12:55 1991
  50. --- ./HISTORY    Thu Jun 20 11:56:47 1991
  51. ***************
  52. *** 115,117 ****
  53. --- 115,139 ----
  54.   1991/06/12: v2.02
  55.           Fixed typo in strstr replacement
  56.           Fixed runaway line while logging long folder names
  57. + 1991/06/20: v2.03
  58. +         Added EX_OSFILE to include/sysexits.h (oversight)
  59. +         Slightly changed the terminate code in procmail (more reliable
  60. +            when forks did not succeed while filtering and signals arrived
  61. +            during a small window)
  62. +         Added a listing of all entries that can appear in autoconf.h
  63. +            to autoconf to simplify manual autoconf.h generation
  64. +         Changed formail to be able to split up collected articles (trivial)
  65. +         Edited include/string.h, strspn is of type int
  66. +         Changes to autoconf:
  67. +            Added strtol detection
  68. +            Enhanced const detection for braindamaged compilers
  69. +            Stopped using the function grepfor, changed it into a small
  70. +           script (Vltrix does not support functions in /bin/sh)
  71. +            Made the check for missing library parts more resistant against
  72. +           elaborate warnings from the C-compiler
  73. +         Fixed typo in retint.c (sleep with one redundant argument), hurray
  74. +            for prototypes
  75. +         Added MANSUFFIX macro to Makefile
  76. +         Avoided namespace conflict ("failurel") in lockfile.c for
  77. +            braindamaged compilers
  78. +         Renamed ultostr to avoided library conflict on some machines
  79. diff -rc ../old/Makefile ./Makefile
  80. *** ../old/Makefile    Tue Jun 18 16:12:46 1991
  81. --- ./Makefile    Thu Jun 20 12:00:38 1991
  82. ***************
  83. *** 1,10 ****
  84. ! #$Id: Makefile,v 2.0 1991/06/10 14:39:08 berg Rel $
  85.   
  86.   # change BASENAME to your home directory if need be
  87.   BASENAME = /usr/local
  88.   
  89.   BINDIR     = $(BASENAME)/bin
  90. ! MANDIR     = $(BASENAME)/man/man1
  91.   
  92.   ########################################################################
  93.   # Only edit below this line if you *think* you know what you are doing #
  94. --- 1,11 ----
  95. ! #$Id: Makefile,v 2.3 1991/06/20 09:54:14 berg Rel $
  96.   
  97.   # change BASENAME to your home directory if need be
  98.   BASENAME = /usr/local
  99.   
  100.   BINDIR     = $(BASENAME)/bin
  101. ! MANSUFFIX= 1
  102. ! MANDIR     = $(BASENAME)/man/man$(MANSUFFIX)
  103.   
  104.   ########################################################################
  105.   # Only edit below this line if you *think* you know what you are doing #
  106. ***************
  107. *** 41,52 ****
  108.   formail: formail.$(O) common.$(O)
  109.       $(CC) $(CFLAGS) -o formail formail.$(O) common.$(O) ${LDFLAGS}
  110.   
  111. ! _autotst: _autotst.c
  112. !     $(CC) $(CFLAGS) -o _autotst _autotst.c $(LDFLAGS)
  113.   
  114.   autoconf.h: autoconf Makefile
  115. !     /bin/sh autoconf
  116.   
  117.   $(OBJ): $(DEP)
  118.   
  119.   retint.$(O): $(DEP) exopen.h
  120. --- 42,55 ----
  121.   formail: formail.$(O) common.$(O)
  122.       $(CC) $(CFLAGS) -o formail formail.$(O) common.$(O) ${LDFLAGS}
  123.   
  124. ! _autotst: _autotst.$(O)
  125. !     $(CC) $(CFLAGS) -o _autotst _autotst.$(O) $(LDFLAGS)
  126.   
  127.   autoconf.h: autoconf Makefile
  128. !     /bin/sh autoconf $(O)
  129.   
  130. + Makefile:
  131.   $(OBJ): $(DEP)
  132.   
  133.   retint.$(O): $(DEP) exopen.h
  134. ***************
  135. *** 69,79 ****
  136.       $(CC) $(CFLAGS) -c $*.c
  137.   
  138.   install: all
  139. !     chmod 755 $(BINS)
  140.       cp $(BINS) $(BINDIR)
  141. !     chmod 644 man/procmail.1 man/lockfile.1 man/formail.1
  142. !     cp man/procmail.1 man/lockfile.1 man/formail.1 $(MANDIR)
  143.   
  144.   clean:
  145.       $(RM) $(OBJ) common.$(O) lockfile.$(O) exopen.$(O) retint.$(O) \
  146. ! formail.$(O) $(BINS) autoconf.h _autotst*
  147. --- 72,86 ----
  148.       $(CC) $(CFLAGS) -c $*.c
  149.   
  150.   install: all
  151. !     chmod 0755 $(BINS)
  152.       cp $(BINS) $(BINDIR)
  153. !     chmod 0644 man/procmail.$(MANSUFFIX) man/lockfile.$(MANSUFFIX) \
  154. ! man/formail.$(MANSUFFIX)
  155. !     cp man/procmail.$(MANSUFFIX) man/lockfile.$(MANSUFFIX) \
  156. ! man/formail.$(MANSUFFIX) $(MANDIR)
  157.   
  158. + again: all
  159.   clean:
  160.       $(RM) $(OBJ) common.$(O) lockfile.$(O) exopen.$(O) retint.$(O) \
  161. ! formail.$(O) $(BINS) autoconf.h _autotst* grepfor
  162. diff -rc ../old/README ./README
  163. *** ../old/README    Tue Jun 18 16:12:28 1991
  164. --- ./README    Thu Jun 20 11:56:57 1991
  165. ***************
  166. *** 24,30 ****
  167.   
  168.   ------------------------------ DESCRIPTION -----------------------------------
  169.   
  170. ! The procmail mail processing program. (v2.02 1991/06/12)
  171.   
  172.   Can be used to create mail-servers, mailing lists, sort your incoming mail
  173.   into separate folders/files (real convenient when subscribing to one or more
  174. --- 24,30 ----
  175.   
  176.   ------------------------------ DESCRIPTION -----------------------------------
  177.   
  178. ! The procmail mail processing program. (v2.03 1991/06/20)
  179.   
  180.   Can be used to create mail-servers, mailing lists, sort your incoming mail
  181.   into separate folders/files (real convenient when subscribing to one or more
  182. ***************
  183. *** 73,78 ****
  184. --- 73,86 ----
  185.       6369 ZG Simpelveld
  186.       The Netherlands
  187.   
  188. + ----------------------
  189. + A recent version can be picked up at various comp.sources.misc archives.
  190. + The latest version can be obtained directly from the ftp-archive at:
  191. +     amaru.informatik.rwth-aachen.de (137.226.112.31)
  192. +     as compressed tar file:        pub/unix/procmail.tar.Z
  193. +     or in compressed shar format:    pub/unix/procmail.0?.Z
  194.   ----------------------
  195.   
  196.   P.S. I don't mind if you feed the program files through your favourite C
  197. diff -rc ../old/autoconf ./autoconf
  198. *** ../old/autoconf    Tue Jun 18 16:12:48 1991
  199. --- ./autoconf    Thu Jun 20 11:56:59 1991
  200. ***************
  201. *** 1,10 ****
  202. - #!/bin/sh
  203. - #$Id: autoconf,v 2.1 1991/06/11 12:59:16 berg Rel $
  204.   
  205. ! SHELL=/bin/sh || exec /bin/sh <autoconf # we're in a csh, feed myself to sh
  206.   
  207.   ACONF=autoconf.h
  208. ! trap "rm $ACONF;exit 1" 1 2 3 15
  209.   cat >$ACONF <<HERE
  210.   /* This file was automagically generated by autoconf */
  211.   
  212. --- 1,37 ----
  213.   
  214. ! #$Id: autoconf,v 2.4 1991/06/20 09:54:14 berg Rel $
  215.   
  216. + SHELL=/bin/sh || exec /bin/sh autoconf $1 # we're in a csh, feed myself to sh
  217. + # All possible entries in autoconf.h:
  218. + #
  219. + #    #define const
  220. + #    #define volatile
  221. + #    #define void char
  222. + #    typedef int mode_t;
  223. + #    typedef int pid_t;
  224. + #    typedef unsigned size_t;
  225. + #    typedef long time_t;
  226. + #    #define NOmemmove
  227. + #    #define NObcopy
  228. + #    #define NOstrstr
  229. + #    #define strtol(str,ptr,base) ((long)atoi(str))
  230. + PATH=:$PATH
  231. + export SHELL
  232.   ACONF=autoconf.h
  233. ! trap "exit 1" 1 2 3 15
  234. ! cat >grepfor <<HERE
  235. ! if fgrep "\$1" _autotst.rrr >/dev/null
  236. ! then
  237. !  echo "\$2" >>$ACONF
  238. !  exit 0
  239. ! fi
  240. ! exit 1
  241. ! HERE
  242. ! chmod 0755 grepfor
  243.   cat >$ACONF <<HERE
  244.   /* This file was automagically generated by autoconf */
  245.   
  246. ***************
  247. *** 14,43 ****
  248.   #       hence the const test has to precede all others.
  249.   
  250.   cat >_autotst.c <<HERE
  251. ! main(){const int i;return 0;}
  252.   HERE
  253.   
  254.   echo 'Testing for const'
  255. ! if make _autotst >/dev/null 2>&1
  256. ! then
  257. ! :
  258. ! else
  259. !  echo '#define const' >>$ACONF
  260. ! fi
  261. ! rm -f _autotst _autotst.o
  262.   
  263.   cat >_autotst.c <<HERE
  264.   main(){volatile int i;return 0;}
  265.   HERE
  266.    
  267.   echo 'Testing for volatile'
  268. ! if make _autotst >/dev/null 2>&1
  269.   then
  270.   :
  271.   else
  272.    echo '#define volatile' >>$ACONF
  273.   fi
  274. ! rm -f _autotst _autotst.o
  275.   
  276.   cat >_autotst.c <<HERE
  277.   main(){int i;i= -1;return i=-i;}
  278. --- 41,68 ----
  279.   #       hence the const test has to precede all others.
  280.   
  281.   cat >_autotst.c <<HERE
  282. ! main(){const char*p;const char*q;
  283. !  p="t";q=p;return 0;}
  284.   HERE
  285.   
  286.   echo 'Testing for const'
  287. ! make _autotst.$1 >_autotst.rrr 2>&1
  288. ! rm -f _autotst.$1
  289.   
  290. + grepfor const '#define const'
  291.   cat >_autotst.c <<HERE
  292.   main(){volatile int i;return 0;}
  293.   HERE
  294.    
  295.   echo 'Testing for volatile'
  296. ! if make _autotst.$1 >/dev/null 2>&1
  297.   then
  298.   :
  299.   else
  300.    echo '#define volatile' >>$ACONF
  301.   fi
  302. ! rm -f _autotst.$1
  303.   
  304.   cat >_autotst.c <<HERE
  305.   main(){int i;i= -1;return i=-i;}
  306. ***************
  307. *** 51,57 ****
  308.    echo 'Aha, this one is genuine antique!'
  309.    echo '#define void char' >>$ACONF
  310.   fi
  311. ! rm -f _autotst _autotst.o
  312.   
  313.   
  314.   cat >_autotst.c <<HERE
  315. --- 76,82 ----
  316.    echo 'Aha, this one is genuine antique!'
  317.    echo '#define void char' >>$ACONF
  318.   fi
  319. ! rm -f _autotst _autotst.$1
  320.   
  321.   
  322.   cat >_autotst.c <<HERE
  323. ***************
  324. *** 66,81 ****
  325.   HERE
  326.   
  327.   echo 'Testing for void*,size_t,pid_t,time_t,mode_t'
  328. ! make _autotst >_autotst.rrr 2>&1
  329. ! rm -f _autotst _autotst.o
  330.   
  331. - grepfor(){
  332. - if fgrep "$1" _autotst.rrr >/dev/null
  333. - then
  334. -  echo "$2" >>$ACONF
  335. - fi
  336. - }
  337.   grepfor void '#define void char'
  338.   grepfor size_t 'typedef unsigned size_t;'
  339.   grepfor pid_t 'typedef int pid_t;'
  340. --- 91,99 ----
  341.   HERE
  342.   
  343.   echo 'Testing for void*,size_t,pid_t,time_t,mode_t'
  344. ! make _autotst.$1 >_autotst.rrr 2>&1
  345. ! rm -f _autotst.$1
  346.   
  347.   grepfor void '#define void char'
  348.   grepfor size_t 'typedef unsigned size_t;'
  349.   grepfor pid_t 'typedef int pid_t;'
  350. ***************
  351. *** 84,107 ****
  352.   
  353.   cat >_autotst.c <<HERE
  354.   #include "includes.h"
  355. ! main(){char a[1];
  356. !  setpwent();endpwent();memmove(a,"t",1);bcopy("t",a,1);strstr(a,"t");return 0;}
  357.   HERE
  358.   
  359. ! echo 'Testing for memmove & strstr'
  360.   make _autotst >_autotst.rrr 2>&1
  361. ! rm -f _autotst _autotst.o
  362.   
  363. ! if fgrep memmove _autotst.rrr >/dev/null
  364. ! then
  365. !  echo '#define NOmemmove' >>$ACONF
  366. !  grepfor bcopy '#define NObcopy'
  367. ! fi
  368.   grepfor strstr '#define NOstrstr'
  369.   grepfor setpwent '#define setpwent()'
  370.   grepfor endpwent '#define endpwent()'
  371.   
  372. ! rm -f _autotst*
  373.   
  374.   echo -----------------------------autoconf.h-----------------------------------
  375.   cat autoconf.h
  376. --- 102,124 ----
  377.   
  378.   cat >_autotst.c <<HERE
  379.   #include "includes.h"
  380. ! main(){char a[2];
  381. !  setpwent();endpwent();memmove(a,"0",1);bcopy("0",a,1);strstr(a,"0");
  382. !  strtol("0",(char**)0,10);return 0;}
  383.   HERE
  384.   
  385. ! echo 'Testing for memmove, strstr & strtol'
  386. ! make _autotst.$1 >/dev/null 2>&1
  387.   make _autotst >_autotst.rrr 2>&1
  388. ! rm -f _autotst _autotst.$1
  389.   
  390. ! grepfor memmove '#define NOmemmove' && grepfor bcopy '#define NObcopy'
  391.   grepfor strstr '#define NOstrstr'
  392.   grepfor setpwent '#define setpwent()'
  393.   grepfor endpwent '#define endpwent()'
  394. + grepfor strtol '#define strtol(str,ptr,base) ((long)atoi(str))'
  395.   
  396. ! rm -f _autotst* grepfor
  397.   
  398.   echo -----------------------------autoconf.h-----------------------------------
  399.   cat autoconf.h
  400. diff -rc ../old/common.c ./common.c
  401. *** ../old/common.c    Tue Jun 18 16:12:30 1991
  402. --- ./common.c    Thu Jun 20 11:57:00 1991
  403. ***************
  404. *** 9,15 ****
  405.    *                                    *
  406.    ************************************************************************/
  407.   #ifdef    RCS
  408. ! static char rcsid[]="$Id: common.c,v 2.0 1991/06/10 14:35:35 berg Rel $";
  409.   #endif
  410.   #include "includes.h"
  411.   
  412. --- 9,15 ----
  413.    *                                    *
  414.    ************************************************************************/
  415.   #ifdef    RCS
  416. ! static char rcsid[]="$Id: common.c,v 2.1 1991/06/19 17:41:41 berg Rel $";
  417.   #endif
  418.   #include "includes.h"
  419.   
  420. ***************
  421. *** 42,48 ****
  422.   
  423.   #include "shell.h"
  424.   
  425. ! shexec(argv)const char *const*argv;{int i;const char**newargv,**p;
  426.    execvp(*argv,argv);     /* if this one fails, we retry it as a shell script */
  427.    for(p=(const char**)argv,i=1;i++,*p++;);          /* count the arguments */
  428.    newargv=malloc(i*sizeof*p);
  429. --- 42,48 ----
  430.   
  431.   #include "shell.h"
  432.   
  433. ! shexec(argv)const char*const*argv;{int i;const char**newargv,**p;
  434.    execvp(*argv,argv);     /* if this one fails, we retry it as a shell script */
  435.    for(p=(const char**)argv,i=1;i++,*p++;);          /* count the arguments */
  436.    newargv=malloc(i*sizeof*p);
  437. diff -rc ../old/formail.c ./formail.c
  438. *** ../old/formail.c    Tue Jun 18 16:12:51 1991
  439. --- ./formail.c    Thu Jun 20 11:57:09 1991
  440. ***************
  441. *** 11,19 ****
  442.    *                                    *
  443.    ************************************************************************/
  444.   #ifdef    RCS
  445. ! static char rcsid[]="$Id: formail.c,v 2.3 1991/06/12 10:50:21 berg Rel $";
  446.   #endif
  447. ! static char rcsdate[]="$Date: 1991/06/12 10:50:21 $";
  448.   #include "config.h"            /* I know, overkill, only need BinSh */
  449.   #include "includes.h"
  450.   
  451. --- 11,19 ----
  452.    *                                    *
  453.    ************************************************************************/
  454.   #ifdef    RCS
  455. ! static char rcsid[]="$Id: formail.c,v 2.6 1991/06/19 17:47:00 berg Rel $";
  456.   #endif
  457. ! static char rcsdate[]="$Date: 1991/06/19 17:47:00 $";
  458.   #include "config.h"            /* I know, overkill, only need BinSh */
  459.   #include "includes.h"
  460.   
  461. ***************
  462. *** 32,38 ****
  463.   static const char From[]=FROM,replyto[]="Reply-To:",Fromm[]="From:",
  464.    returnpath[]="Return-Path",sender[]="Sender:",outofmem[]="Out of memory\n",
  465.    subject[]="Subject:",re[]=" Re:",couldntw[]="Couldn't write to stdout",
  466. !  references[]="References:",messageid[]="Message-ID:",Date[]="Date:";
  467.   const char binsh[]=BinSh;
  468.   static struct {const char*const head;const int len,wrepl;}sest[]={
  469.    {sender,STRLEN(sender),0},{replyto,STRLEN(replyto),4},
  470. --- 32,39 ----
  471.   static const char From[]=FROM,replyto[]="Reply-To:",Fromm[]="From:",
  472.    returnpath[]="Return-Path",sender[]="Sender:",outofmem[]="Out of memory\n",
  473.    subject[]="Subject:",re[]=" Re:",couldntw[]="Couldn't write to stdout",
  474. !  references[]="References:",messageid[]="Message-ID:",Date[]="Date:",
  475. !  article[]="Article ";
  476.   const char binsh[]=BinSh;
  477.   static struct {const char*const head;const int len,wrepl;}sest[]={
  478.    {sender,STRLEN(sender),0},{replyto,STRLEN(replyto),4},
  479. ***************
  480. *** 44,50 ****
  481.   #define refr    rex[1]
  482.   #define msid    rex[2]
  483.   static struct {const char*const hedr;const int lnr;}cdigest[]={
  484. !  {Fromm,STRLEN(Fromm)},{Date,STRLEN(Date)},{subject,STRLEN(subject)}};
  485.   #define mxl(a,b)    mx(STRLEN(a),STRLEN(b))
  486.   #define dig_HDR_LEN    mx(mxl(From,Fromm),mxl(Date,subject))
  487.   static errout,oldstdout;
  488. --- 45,52 ----
  489.   #define refr    rex[1]
  490.   #define msid    rex[2]
  491.   static struct {const char*const hedr;const int lnr;}cdigest[]={
  492. !  {Fromm,STRLEN(Fromm)},{Date,STRLEN(Date)},{subject,STRLEN(subject)},
  493. !  {article,STRLEN(article)}};
  494.   #define mxl(a,b)    mx(STRLEN(a),STRLEN(b))
  495.   #define dig_HDR_LEN    mx(mxl(From,Fromm),mxl(Date,subject))
  496.   static errout,oldstdout;
  497. ***************
  498. *** 73,80 ****
  499.   
  500.   #include "shell.h"
  501.   
  502. ! main(argc,argv)const char*const argv[];{time_t t;
  503. !  int i,lastm,nowm,thelen=0,split=0,force=0,bogus=1,every=0,areply=0,
  504.      trust=0,digest=0,nowait=0;
  505.    size_t buflen,p=0,lnl=0,thename,ll;
  506.    char*buf,*chp;
  507. --- 75,82 ----
  508.   
  509.   #include "shell.h"
  510.   
  511. ! main(lastm,argv)const char*const argv[];{time_t t;
  512. !  int i,nowm,thelen=0,split=0,force=0,bogus=1,every=0,areply=0,
  513.      trust=0,digest=0,nowait=0;
  514.    size_t buflen,p=0,lnl=0,thename,ll;
  515.    char*buf,*chp;
  516. diff -rc ../old/goodies.c ./goodies.c
  517. *** ../old/goodies.c    Tue Jun 18 16:12:36 1991
  518. --- ./goodies.c    Thu Jun 20 11:57:11 1991
  519. ***************
  520. *** 9,15 ****
  521.    *                                    *
  522.    ************************************************************************/
  523.   #ifdef    RCS
  524. ! static char rcsid[]="$Id: goodies.c,v 2.1 1991/06/11 12:59:16 berg Rel $";
  525.   #endif
  526.   #include "config.h"
  527.   #include "procmail.h"
  528. --- 9,15 ----
  529.    *                                    *
  530.    ************************************************************************/
  531.   #ifdef    RCS
  532. ! static char rcsid[]="$Id: goodies.c,v 2.3 1991/06/19 17:41:41 berg Rel $";
  533.   #endif
  534.   #include "config.h"
  535.   #include "procmail.h"
  536. ***************
  537. *** 34,40 ****
  538.        if(got>NORMAL_TEXT)
  539.   early_eof:  log(unexpeof);
  540.   ready:     if(got!=SKIPPING_SPACE||sarg)      /* not terminated yet or sarg==2 ? */
  541. ! ready0:        *p++='\0';
  542.        *p=TMNATE;return;
  543.         case '\\':
  544.        if(got==SINGLE_QUOTED)
  545. --- 34,40 ----
  546.        if(got>NORMAL_TEXT)
  547.   early_eof:  log(unexpeof);
  548.   ready:     if(got!=SKIPPING_SPACE||sarg)      /* not terminated yet or sarg==2 ? */
  549. !         *p++='\0';
  550.        *p=TMNATE;return;
  551.         case '\\':
  552.        if(got==SINGLE_QUOTED)
  553. ***************
  554. *** 108,114 ****
  555.              *startb++=i;
  556.           *startb='\0';
  557.           if(i!='}'){
  558. ! badsubst:      log("Bad substitution of");logqnl(buf2);continue;}
  559.           i='\0';}
  560.        else if(alphanum(i)){                        /* $name */
  561.           do *startb++=i;
  562. --- 108,114 ----
  563.              *startb++=i;
  564.           *startb='\0';
  565.           if(i!='}'){
  566. !            log("Bad substitution of");logqnl(buf2);continue;}
  567.           i='\0';}
  568.        else if(alphanum(i)){                        /* $name */
  569.           do *startb++=i;
  570. ***************
  571. *** 117,123 ****
  572.              i='\0';
  573.           *startb='\0';}
  574.        else if(i=='$'){                       /* $$=pid */
  575. !         ultostr(0,(unsigned long)thepid,p);i='\0';goto eofstr;}
  576.        else{
  577.           *p++='$';goto newchar;}               /* not a substitution */
  578.        startb=(char*)tgetenv(buf2);
  579. --- 117,123 ----
  580.              i='\0';
  581.           *startb='\0';}
  582.        else if(i=='$'){                       /* $$=pid */
  583. !         ultstr(0,(unsigned long)thepid,p);i='\0';goto eofstr;}
  584.        else{
  585.           *p++='$';goto newchar;}               /* not a substitution */
  586.        startb=(char*)tgetenv(buf2);
  587. ***************
  588. *** 151,157 ****
  589.      if(got<=SKIPPING_SPACE)         /* should we bother to change mode? */
  590.         got=NORMAL_TEXT;}}
  591.   
  592. ! ultostr(minwidth,val,dest)unsigned long val;char*dest;{int i;unsigned long j;
  593.    j=val;i=0;                       /* a beauty, isn't it :-) */
  594.    do i++;                       /* determine needed width */
  595.    while(j/=10);
  596. --- 151,157 ----
  597.      if(got<=SKIPPING_SPACE)         /* should we bother to change mode? */
  598.         got=NORMAL_TEXT;}}
  599.   
  600. ! ultstr(minwidth,val,dest)unsigned long val;char*dest;{int i;unsigned long j;
  601.    j=val;i=0;                       /* a beauty, isn't it :-) */
  602.    do i++;                       /* determine needed width */
  603.    while(j/=10);
  604. diff -rc ../old/includes.h ./includes.h
  605. *** ../old/includes.h    Tue Jun 18 16:12:26 1991
  606. --- ./includes.h    Thu Jun 20 12:03:05 1991
  607. ***************
  608. *** 1,4 ****
  609. ! /*$Id: includes.h,v 2.2 1991/06/11 13:06:52 berg Rel $*/
  610.   
  611.   #include "autoconf.h"
  612.       /* not all the "library identifiers" specified here need to be
  613. --- 1,4 ----
  614. ! /*$Id: includes.h,v 2.3 1991/06/18 11:39:23 berg Rel $*/
  615.   
  616.   #include "autoconf.h"
  617.       /* not all the "library identifiers" specified here need to be
  618. ***************
  619. *** 15,21 ****
  620.   #include <stdlib.h>        /* getenv() malloc() realloc() free()
  621.                      strtol() */
  622.   #include <time.h>        /* time() ctime() time_t */
  623. ! #include <fcntl.h>        /* O_RDONLY O_WRONLY O_APPEND */
  624.   #include <pwd.h>        /* getpwuid() struct passwd */
  625.   #include <sys/wait.h>        /* wait() */
  626.   #include <sys/utsname.h>    /* uname() utsname */
  627. --- 15,21 ----
  628.   #include <stdlib.h>        /* getenv() malloc() realloc() free()
  629.                      strtol() */
  630.   #include <time.h>        /* time() ctime() time_t */
  631. ! #include <fcntl.h>        /* O_RDONLY O_WRONLY O_APPEND O_CREAT O_EXCL */
  632.   #include <pwd.h>        /* getpwuid() struct passwd */
  633.   #include <sys/wait.h>        /* wait() */
  634.   #include <sys/utsname.h>    /* uname() utsname */
  635. ***************
  636. *** 26,32 ****
  637.                      strspn() strcspn() strchr() strcmp()
  638.                      strncmp() strpbrk() strstr() memmove() */
  639.   #include <errno.h>        /* EINTR EEXIST EMFILE ENFILE */
  640. ! #include <sysexits.h>        /* EX_OK EX_UNAVAILABLE EX_OSERR
  641.                      EX_CANTCREAT EX_IOERR */
  642.   #ifndef O_SYNC
  643.   #define O_SYNC        0
  644. --- 26,32 ----
  645.                      strspn() strcspn() strchr() strcmp()
  646.                      strncmp() strpbrk() strstr() memmove() */
  647.   #include <errno.h>        /* EINTR EEXIST EMFILE ENFILE */
  648. ! #include <sysexits.h>        /* EX_OK EX_UNAVAILABLE EX_OSERR EX_OSFILE
  649.                      EX_CANTCREAT EX_IOERR */
  650.   #ifndef O_SYNC
  651.   #define O_SYNC        0
  652. diff -rc ../old/lockfile.c ./lockfile.c
  653. *** ../old/lockfile.c    Tue Jun 18 16:12:35 1991
  654. --- ./lockfile.c    Thu Jun 20 11:57:13 1991
  655. ***************
  656. *** 7,15 ****
  657.    *    This file can be freely copied for any use.            *
  658.    ************************************************************************/
  659.   #ifdef    RCS
  660. ! static char rcsid[]="$Id: lockfile.c,v 2.1 1991/06/11 14:00:41 berg Rel $";
  661.   #endif
  662. ! static char rcsdate[]="$Date: 1991/06/11 14:00:41 $";
  663.   #include "config.h"               /* overkill, I know, only need DIRSEP */
  664.   #include "includes.h"
  665.   
  666. --- 7,15 ----
  667.    *    This file can be freely copied for any use.            *
  668.    ************************************************************************/
  669.   #ifdef    RCS
  670. ! static char rcsid[]="$Id: lockfile.c,v 2.3 1991/06/19 17:41:41 berg Rel $";
  671.   #endif
  672. ! static char rcsdate[]="$Date: 1991/06/19 17:41:41 $";
  673.   #include "config.h"               /* overkill, I know, only need DIRSEP */
  674.   #include "includes.h"
  675.   
  676. ***************
  677. *** 21,27 ****
  678.    exitflag=1;}
  679.   
  680.   main(argc,argv)const int argc;const char*argv[];{const char**p,*cp;
  681. !  int sleepsec,retries,i,invert,force,suspend,retval=0;
  682.    static char usage[]=
  683.      "Usage: lockfile -nnn | -rnnn | -! | -lnnn | -snnn | file ...\n";
  684.    sleepsec=8;force=retries=invert=0;suspend=16;thepid=getpid();
  685. --- 21,27 ----
  686.    exitflag=1;}
  687.   
  688.   main(argc,argv)const int argc;const char*argv[];{const char**p,*cp;
  689. !  int sleepsec,retries,invert,force,suspend,retval=0;
  690.    static char usage[]=
  691.      "Usage: lockfile -nnn | -rnnn | -! | -lnnn | -snnn | file ...\n";
  692.    sleepsec=8;force=retries=invert=0;suspend=16;thepid=getpid();
  693. ***************
  694. *** 39,45 ****
  695.          case 's':suspend=strtol(cp+2,(char**)0,10);break;
  696.          default:
  697.         if(cp[1]-'0'>(unsigned)9){
  698. !          putse(usage);retval=EX_USAGE;goto failure;}
  699.         if(sleepsec>=0)
  700.            sleepsec=strtol(cp+1,(char**)0,10);}
  701.       else
  702. --- 39,45 ----
  703.          case 's':suspend=strtol(cp+2,(char**)0,10);break;
  704.          default:
  705.         if(cp[1]-'0'>(unsigned)9){
  706. !          putse(usage);retval=EX_USAGE;goto failurel;}
  707.         if(sleepsec>=0)
  708.            sleepsec=strtol(cp+1,(char**)0,10);}
  709.       else
  710. ***************
  711. *** 48,54 ****
  712.         else{
  713.        while(0>NFSxopen(cp)){struct stat buf;time_t t;
  714.           if(exitflag||retries==1){
  715. ! failure:       sleepsec= -1;p[-1]=0;goto again;}
  716.           if(force&&(t=time((time_t*)0),!stat(cp,&buf))&&
  717.              force<t-buf.st_mtime){
  718.              unlink(cp);putse("Forcing lock on \"");putse(cp);putse("\"\n");
  719. --- 48,54 ----
  720.         else{
  721.        while(0>NFSxopen(cp)){struct stat buf;time_t t;
  722.           if(exitflag||retries==1){
  723. ! failurel:      sleepsec= -1;p[-1]=0;goto again;}
  724.           if(force&&(t=time((time_t*)0),!stat(cp,&buf))&&
  725.              force<t-buf.st_mtime){
  726.              unlink(cp);putse("Forcing lock on \"");putse(cp);putse("\"\n");
  727. ***************
  728. *** 62,68 ****
  729.   putse(a)char*a;{char*b;
  730.    b=a-1;
  731.    while(*++b);
  732. !  write(STDERR,a,b-a);}
  733.   
  734.   #include "exopen.h"
  735.   
  736. --- 62,68 ----
  737.   putse(a)char*a;{char*b;
  738.    b=a-1;
  739.    while(*++b);
  740. !  write(STDERR,a,(size_t)(b-a));}
  741.   
  742.   #include "exopen.h"
  743.   
  744. ***************
  745. *** 79,86 ****
  746.   void*tmalloc(len)const size_t len;{                     /* stub */
  747.    return malloc(len);}
  748.   
  749. ! ropen(name,mode,mask)const char*const name;const mode_t mask;{         /* stub */
  750. !  return open(name,mode,mask);}
  751.   
  752.   rclose(fd)const int fd;{                         /* stub */
  753.    return close(fd);}
  754. --- 79,86 ----
  755.   void*tmalloc(len)const size_t len;{                     /* stub */
  756.    return malloc(len);}
  757.   
  758. ! ropen(name,mode,mask)const char*const name;const int mode;const mode_t mask;{
  759. !  return open(name,mode,mask);}                         /* stub */
  760.   
  761.   rclose(fd)const int fd;{                         /* stub */
  762.    return close(fd);}
  763. diff -rc ../old/nonint.c ./nonint.c
  764. *** ../old/nonint.c    Tue Jun 18 16:12:38 1991
  765. --- ./nonint.c    Thu Jun 20 11:57:17 1991
  766. ***************
  767. *** 9,15 ****
  768.    *                                    *
  769.    ************************************************************************/
  770.   #ifdef    RCS
  771. ! static char rcsid[]="$Id: nonint.c,v 2.0 1991/06/10 14:35:35 berg Rel $";
  772.   #endif
  773.   #include "config.h"
  774.   #include "procmail.h"
  775. --- 9,15 ----
  776.    *                                    *
  777.    ************************************************************************/
  778.   #ifdef    RCS
  779. ! static char rcsid[]="$Id: nonint.c,v 2.2 1991/06/19 17:41:41 berg Rel $";
  780.   #endif
  781.   #include "config.h"
  782.   #include "procmail.h"
  783. ***************
  784. *** 73,79 ****
  785.   void sterminate(){static const char*const msg[]={newline,0,
  786.    "memory\n","fork\n","file descriptor\n"};
  787.    signal(SIGTERM,SIG_IGN);signal(SIGHUP,SIG_IGN);signal(SIGINT,SIG_IGN);
  788. !  if(pidchild)            /* don't kill what is not ours, we might be root */
  789.      kill(pidchild,SIGTERM);
  790.    if(!nextexit){
  791.      nextexit=1;log("Terminating prematurely");
  792. --- 73,79 ----
  793.   void sterminate(){static const char*const msg[]={newline,0,
  794.    "memory\n","fork\n","file descriptor\n"};
  795.    signal(SIGTERM,SIG_IGN);signal(SIGHUP,SIG_IGN);signal(SIGINT,SIG_IGN);
  796. !  if(pidchild>0)            /* don't kill what is not ours, we might be root */
  797.      kill(pidchild,SIGTERM);
  798.    if(!nextexit){
  799.      nextexit=1;log("Terminating prematurely");
  800. ***************
  801. *** 84,91 ****
  802.   
  803.   void stermchild(){
  804.    signal(SIGHUP,SIG_IGN);signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN);
  805. !  signal(SIGTERM,SIG_IGN);kill(pidfilt,SIGTERM);kill(thepid,SIGQUIT);
  806. !  log("Rescue of unfiltered data ");
  807.    if(dump(PWRB,backblock,backlen)) /* pump back the data through the backpipe */
  808.       log("failed\n");
  809.    else
  810. --- 84,93 ----
  811.   
  812.   void stermchild(){
  813.    signal(SIGHUP,SIG_IGN);signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN);
  814. !  signal(SIGTERM,SIG_IGN);
  815. !  if(pidfilt>0)            /* don't kill what is not ours, we might be root */
  816. !    kill(pidfilt,SIGTERM);
  817. !  kill(thepid,SIGQUIT);log("Rescue of unfiltered data ");
  818.    if(dump(PWRB,backblock,backlen)) /* pump back the data through the backpipe */
  819.       log("failed\n");
  820.    else
  821. ***************
  822. *** 174,180 ****
  823.   char*tstrdup(a)const char*const a;{int i;
  824.    i=strlen(a)+1;return tmemmove(malloc(i),a,i);}
  825.   
  826. ! const char*tgetenv(a)const char*a;{const char*b;
  827.    return(b=getenv(a))?b:"";}
  828.   
  829.   char*cstr(a,b)const char*const a,*const b;{    /* dynamic buffer management */
  830. --- 176,182 ----
  831.   char*tstrdup(a)const char*const a;{int i;
  832.    i=strlen(a)+1;return tmemmove(malloc(i),a,i);}
  833.   
  834. ! const char*tgetenv(a)const char*const a;{const char*b;
  835.    return(b=getenv(a))?b:"";}
  836.   
  837.   char*cstr(a,b)const char*const a,*const b;{    /* dynamic buffer management */
  838. diff -rc ../old/procmail.c ./procmail.c
  839. *** ../old/procmail.c    Tue Jun 18 16:12:37 1991
  840. --- ./procmail.c    Thu Jun 20 11:57:18 1991
  841. ***************
  842. *** 11,17 ****
  843.    *                                    *
  844.    ************************************************************************/
  845.   #ifdef    RCS
  846. ! static char rcsid[]="$Id: procmail.c,v 2.3 1991/06/12 10:23:06 berg Rel $";
  847.   #endif
  848.   #include "config.h"
  849.   #define MAIN
  850. --- 11,17 ----
  851.    *                                    *
  852.    ************************************************************************/
  853.   #ifdef    RCS
  854. ! static char rcsid[]="$Id: procmail.c,v 2.6 1991/06/19 17:41:41 berg Rel $";
  855.   #endif
  856.   #include "config.h"
  857.   #define MAIN
  858. ***************
  859. *** 18,24 ****
  860.   #include "procmail.h"
  861.   #include "shell.h"
  862.   
  863. ! #define VERSION "procmail v2.02 1991/06/12 written by Stephen R.van den Berg\n\
  864.   \t\t\t\tberg@messua.informatik.rwth-aachen.de\n\
  865.   \t\t\t\tberg@physik.tu-muenchen.de\n"
  866.   
  867. --- 18,24 ----
  868.   #include "procmail.h"
  869.   #include "shell.h"
  870.   
  871. ! #define VERSION "procmail v2.03 1991/06/20 written by Stephen R.van den Berg\n\
  872.   \t\t\t\tberg@messua.informatik.rwth-aachen.de\n\
  873.   \t\t\t\tberg@physik.tu-muenchen.de\n"
  874.   
  875. ***************
  876. *** 58,64 ****
  877.    if(0>opena(devnull)||0>opena(console))
  878.      return EX_OSFILE;
  879.    setbuf(stdin,(char*)0);buf=malloc(linebuf);buf2=malloc(linebuf);chdir(tmp);
  880. !  ultostr(0,(unsigned long)(i=getuid()),buf);
  881.    setpwent();
  882.    {struct passwd*pass;
  883.    if(pass=getpwuid(i)){            /* find user defaults in /etc/passwd */
  884. --- 58,64 ----
  885.    if(0>opena(devnull)||0>opena(console))
  886.      return EX_OSFILE;
  887.    setbuf(stdin,(char*)0);buf=malloc(linebuf);buf2=malloc(linebuf);chdir(tmp);
  888. !  ultstr(0,(unsigned long)(i=getuid()),buf);
  889.    setpwent();
  890.    {struct passwd*pass;
  891.    if(pass=getpwuid(i)){            /* find user defaults in /etc/passwd */
  892. ***************
  893. *** 279,285 ****
  894.    log(buf);i-=i%TABWIDTH;             /* tell where we last dumped it */
  895.    do log(TABCHAR);
  896.    while((i+=TABWIDTH)<LENoffset);
  897. !  ultostr(7,lastdump,buf);log(buf);log(newline);terminate();}
  898.   
  899.   dirmail(){struct stat stbuf;        /* directory name is expected in buf */
  900.    strcpy(buf2,strcat(buf,MCDIRSEP));
  901. --- 279,285 ----
  902.    log(buf);i-=i%TABWIDTH;             /* tell where we last dumped it */
  903.    do log(TABCHAR);
  904.    while((i+=TABWIDTH)<LENoffset);
  905. !  ultstr(7,lastdump,buf);log(buf);log(newline);terminate();}
  906.   
  907.   dirmail(){struct stat stbuf;        /* directory name is expected in buf */
  908.    strcpy(buf2,strcat(buf,MCDIRSEP));
  909. diff -rc ../old/retint.c ./retint.c
  910. *** ../old/retint.c    Tue Jun 18 16:12:40 1991
  911. --- ./retint.c    Thu Jun 20 11:57:21 1991
  912. ***************
  913. *** 9,15 ****
  914.    *                                    *
  915.    ************************************************************************/
  916.   #ifdef    RCS
  917. ! static char rcsid[]="$Id: retint.c,v 2.0 1991/06/10 14:35:35 berg Rel $";
  918.   #endif
  919.   #include "config.h"
  920.   #include "procmail.h"
  921. --- 9,15 ----
  922.    *                                    *
  923.    ************************************************************************/
  924.   #ifdef    RCS
  925. ! static char rcsid[]="$Id: retint.c,v 2.4 1991/06/19 17:45:35 berg Rel $";
  926.   #endif
  927.   #include "config.h"
  928.   #include "procmail.h"
  929. ***************
  930. *** 52,59 ****
  931.    while(!flaggerd)
  932.      suspend();}                           /* to prevent polling */
  933.   
  934. ! grepin(expr,source,len,casesens)const char*const expr,*const source;long len;{
  935. !  pid_t pid;int poutfd[2];static const char*newargv[5]={0,"-e"};
  936.    newargv[3]=casesens?(char*)0:"-i";*newargv=tgetenv(grep);newargv[2]=expr;
  937.    rpipe(poutfd);
  938.    if(!(pid=sfork())){                           /* start grep */
  939. --- 52,60 ----
  940.    while(!flaggerd)
  941.      suspend();}                           /* to prevent polling */
  942.   
  943. ! grepin(expr,source,len,casesens)const char*const expr,*const source;long len;
  944. !  const int casesens;{pid_t pid;int poutfd[2];
  945. !  static const char*newargv[5]={0,"-e"};
  946.    newargv[3]=casesens?(char*)0:"-i";*newargv=tgetenv(grep);newargv[2]=expr;
  947.    rpipe(poutfd);
  948.    if(!(pid=sfork())){                           /* start grep */
  949. ***************
  950. *** 153,159 ****
  951.    while(0>(i=read(fd,a,(size_t)len))&&errno==EINTR);
  952.    return i;}
  953.   
  954. ! ropen(name,mode,mask)const char*const name;const mode_t mask;{int i,r;
  955.    for(r=noresretry;0>(i=open(name,mode,mask));)           /* a sysV secure open */
  956.      if(errno!=EINTR)
  957.         if(!((errno==EMFILE||errno==ENFILE)&&(r<0||r--)))
  958. --- 154,161 ----
  959.    while(0>(i=read(fd,a,(size_t)len))&&errno==EINTR);
  960.    return i;}
  961.   
  962. ! ropen(name,mode,mask)const char*const name;const int mode;const mode_t mask;{
  963. !  int i,r;
  964.    for(r=noresretry;0>(i=open(name,mode,mask));)           /* a sysV secure open */
  965.      if(errno!=EINTR)
  966.         if(!((errno==EMFILE||errno==ENFILE)&&(r<0||r--)))
  967. ***************
  968. *** 191,200 ****
  969.        else{
  970.           log("Forcing lock on");logqnl(name);suspend();}}}
  971.      else{               /* maybe filename too long, shorten and retry */
  972. !       if(0<(i=strlen(name)-1)&&!strchr(dirsep,(name[i-1]))){
  973.        name[i]='\0';continue;}
  974.         log("Lockfailure on");logqnl(name);return;}
  975. !    sleep(DEFlocksleep,locksleep);
  976.      if(nextexit)
  977.         goto term;}}
  978.   
  979. --- 193,202 ----
  980.        else{
  981.           log("Forcing lock on");logqnl(name);suspend();}}}
  982.      else{               /* maybe filename too long, shorten and retry */
  983. !       if(0<(i=strlen(name)-1)&&!strchr(dirsep,name[i-1])){
  984.        name[i]='\0';continue;}
  985.         log("Lockfailure on");logqnl(name);return;}
  986. !    sleep((unsigned)locksleep);
  987.      if(nextexit)
  988.         goto term;}}
  989.   
  990. diff -rc ../old/include/stdlib.h ./include/stdlib.h
  991. *** ../old/include/stdlib.h    Tue Jun 18 16:12:14 1991
  992. --- ./include/stdlib.h    Thu Jun 20 11:56:35 1991
  993. ***************
  994. *** 1,3 ****
  995. - #define strtol(str,ptr,base)    ((long)atoi(str))
  996.   void*malloc(),*realloc();
  997.   const char*getenv();
  998. --- 1,2 ----
  999. diff -rc ../old/include/string.h ./include/string.h
  1000. *** ../old/include/string.h    Tue Jun 18 16:12:18 1991
  1001. --- ./include/string.h    Thu Jun 20 11:56:36 1991
  1002. ***************
  1003. *** 1,3 ****
  1004.   #include <strings.h>
  1005.   
  1006. ! char*strchr(),*strpbrk(),*strspn(),*strcspn();
  1007. --- 1,3 ----
  1008.   #include <strings.h>
  1009.   
  1010. ! char*strchr(),*strpbrk();
  1011. diff -rc ../old/include/sysexits.h ./include/sysexits.h
  1012. *** ../old/include/sysexits.h    Tue Jun 18 16:12:17 1991
  1013. --- ./include/sysexits.h    Thu Jun 20 11:56:36 1991
  1014. ***************
  1015. *** 1,8 ****
  1016. !                 /* Standard exit codes, original list maintained
  1017. !                    by Eric Allman (eric@berkeley, ucbvax!eric)   */
  1018. ! #define EX_OK           0
  1019. ! #define EX_USAGE        64
  1020. ! #define EX_UNAVAILABLE  69
  1021. ! #define EX_OSERR        71
  1022. ! #define EX_CANTCREAT    73
  1023. ! #define EX_IOERR        74
  1024. --- 1,9 ----
  1025. !         /* Standard exit codes, original list maintained
  1026. !            by Eric Allman (eric@berkeley, ucbvax!eric)     */
  1027. ! #define EX_OK        0
  1028. ! #define EX_USAGE    64
  1029. ! #define EX_UNAVAILABLE    69
  1030. ! #define EX_OSERR    71
  1031. ! #define EX_OSFILE    72
  1032. ! #define EX_CANTCREAT    73
  1033. ! #define EX_IOERR    74
  1034. diff -rc ../old/man/formail.1 ./man/formail.1
  1035. *** ../old/man/formail.1    Tue Jun 18 16:12:23 1991
  1036. --- ./man/formail.1    Thu Jun 20 11:57:15 1991
  1037. ***************
  1038. *** 2,8 ****
  1039.   .ds Rv \\$3
  1040.   .ds Dt \\$4
  1041.   ..
  1042. ! .Id $Id: formail.1,v 2.0 1991/06/10 17:37:18 berg Rel $
  1043.   .de Sh
  1044.   .br
  1045.   .ne 9
  1046. --- 2,8 ----
  1047.   .ds Rv \\$3
  1048.   .ds Dt \\$4
  1049.   ..
  1050. ! .Id $Id: formail.1,v 2.1 1991/06/18 11:30:15 berg Rel $
  1051.   .de Sh
  1052.   .br
  1053.   .ne 9
  1054. ***************
  1055. *** 42,48 ****
  1056.   .B formail
  1057.   is a filter that can be used to force mail into mailbox format, perform real
  1058.   rigorous `From ' escaping, generate auto-replying headers or split up a
  1059. ! mailbox/digest file.  The mail/mailbox contents will be expected on stdin.
  1060.   .LP
  1061.   If formail is supposed to determine the sender of the mail, but is unable
  1062.   to find any, it will substitute `foo@bar'.
  1063. --- 42,49 ----
  1064.   .B formail
  1065.   is a filter that can be used to force mail into mailbox format, perform real
  1066.   rigorous `From ' escaping, generate auto-replying headers or split up a
  1067. ! mailbox/digest/articles file.  The mail/mailbox/article contents will be
  1068. ! expected on stdin.
  1069.   .LP
  1070.   If formail is supposed to determine the sender of the mail, but is unable
  1071.   to find any, it will substitute `foo@bar'.
  1072. ***************
  1073. *** 85,91 ****
  1074.   message (this is normally not the case).
  1075.   .Tp
  1076.   .B \-d
  1077. ! Enables formail to split up digests into their original messages.
  1078.   .Tp
  1079.   .I "\fB\+\fPskip"
  1080.   Skip the first
  1081. --- 86,92 ----
  1082.   message (this is normally not the case).
  1083.   .Tp
  1084.   .B \-d
  1085. ! Enables formail to split up digests/articles into their original parts.
  1086.   .Tp
  1087.   .I "\fB\+\fPskip"
  1088.   Skip the first
  1089. -----------------------------cut here------------------------------
  1090.  
  1091.  
  1092. -- 
  1093. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1094. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1095. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1096. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1097.  
  1098. exit 0 # Just in case...
  1099. -- 
  1100. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1101. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1102. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1103. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1104.