home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume21 / procmail2.10 / patch01 next >
Text File  |  1991-07-21  |  17KB  |  510 lines

  1. Newsgroups: comp.sources.misc
  2. From: Stephen R. van den Berg <berg@messua.informatik.rwth-aachen.de>
  3. Subject:  v21i001:  procmail2.10 - mail processing program v2.10, Patch01
  4. Message-ID: <1991Jul19.072410.17897@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: 884bedcb4a550a15c14c94626403f46e
  6. Date: Fri, 19 Jul 1991 07:24:10 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 21, Issue 1
  11. Archive-name: procmail2.10/patch01
  12. Patch-To: procmail2.10: Volume 20, Issue 89-91
  13. Environment: UNIX, sendmail, smail, MMDF
  14.  
  15. This patch will:
  16.     - enhance the new MMDF support (which was a bit sparse, I admit).
  17.     - fix 2 bugs (a minor annoying one, and a major one), the last ones,
  18.       I hope.
  19.     - increment the version count to v2.11 (the last digit will represent
  20.       the patch count).
  21.  
  22. To apply the patch:
  23.  
  24.     cd procmail; patch <the_file_with_the_patches ; rm *.orig
  25.     ls *.rej    # should not list any files
  26.  
  27. -- 
  28. Sincerely,                                berg@messua.informatik.rwth-aachen.de
  29.            Stephen R. van den Berg.       berg@physik.tu-muenchen.de
  30.  
  31. ----------------------------------cut here------------------------------------
  32. diff -rc ../old/HISTORY ./HISTORY
  33. *** ../old/HISTORY    Wed Jul 10 20:08:12 1991
  34. --- ./HISTORY    Wed Jul 17 16:59:54 1991
  35. ***************
  36. *** 159,161 ****
  37. --- 159,167 ----
  38.              A better example for splitting up digests
  39.              Extended the 'advanced' examples by an elaborate ':A' option
  40.             example
  41. + 1991/07/12: v2.11
  42. +         Enhanced MMDF support
  43. +         Ignoring SIGPIPE now, how could I ever have left it out?
  44. +            This should take care of any, previously inexplicable,
  45. +           mysterious failures of formail or procmail
  46. +         Blanks are really ignored now on action lines
  47. diff -rc ../old/README ./README
  48. *** ../old/README    Wed Jul 10 20:08:01 1991
  49. --- ./README    Wed Jul 17 16:59:57 1991
  50. ***************
  51. *** 24,30 ****
  52.   
  53.   ------------------------------ DESCRIPTION -----------------------------------
  54.   
  55. ! The procmail mail processing program. (v2.10 1991/07/08)
  56.   
  57.   Can be used to create mail-servers, mailing lists, sort your incoming mail
  58.   into separate folders/files (real convenient when subscribing to one or more
  59. --- 24,30 ----
  60.   
  61.   ------------------------------ DESCRIPTION -----------------------------------
  62.   
  63. ! The procmail mail processing program. (v2.11 1991/07/17)
  64.   
  65.   Can be used to create mail-servers, mailing lists, sort your incoming mail
  66.   into separate folders/files (real convenient when subscribing to one or more
  67. diff -rc ../old/common.c ./common.c
  68. *** ../old/common.c    Wed Jul 10 20:08:02 1991
  69. --- ./common.c    Wed Jul 17 16:59:59 1991
  70. ***************
  71. *** 9,15 ****
  72.    *                                    *
  73.    ************************************************************************/
  74.   #ifdef    RCS
  75. ! static char rcsid[]="$Id: common.c,v 2.1 1991/06/19 17:41:41 berg Rel $";
  76.   #endif
  77.   #include "includes.h"
  78.   
  79. --- 9,15 ----
  80.    *                                    *
  81.    ************************************************************************/
  82.   #ifdef    RCS
  83. ! static char rcsid[]="$Id: common.c,v 2.2 1991/07/17 14:58:38 berg Rel $";
  84.   #endif
  85.   #include "includes.h"
  86.   
  87. ***************
  88. *** 43,49 ****
  89.   #include "shell.h"
  90.   
  91.   shexec(argv)const char*const*argv;{int i;const char**newargv,**p;
  92. !  execvp(*argv,argv);     /* if this one fails, we retry it as a shell script */
  93.    for(p=(const char**)argv,i=1;i++,*p++;);          /* count the arguments */
  94.    newargv=malloc(i*sizeof*p);
  95.    for(*(p=newargv)=binsh;*++p= *++argv;);
  96. --- 43,52 ----
  97.   #include "shell.h"
  98.   
  99.   shexec(argv)const char*const*argv;{int i;const char**newargv,**p;
  100. ! #ifdef SIGXCPU
  101. !  signal(SIGXCPU,SIG_DFL);signal(SIGXFSZ,SIG_DFL);
  102. ! #endif
  103. !  signal(SIGPIPE,SIG_DFL);execvp(*argv,argv); /* -- or is it a shell script ? */
  104.    for(p=(const char**)argv,i=1;i++,*p++;);          /* count the arguments */
  105.    newargv=malloc(i*sizeof*p);
  106.    for(*(p=newargv)=binsh;*++p= *++argv;);
  107. diff -rc ../old/formail.c ./formail.c
  108. *** ../old/formail.c    Wed Jul 10 20:08:11 1991
  109. --- ./formail.c    Wed Jul 17 17:00:08 1991
  110. ***************
  111. *** 11,23 ****
  112.    *                                    *
  113.    ************************************************************************/
  114.   #ifdef    RCS
  115. ! static char rcsid[]="$Id: formail.c,v 2.7 1991/07/03 18:49:25 berg Rel $";
  116.   #endif
  117. ! static char rcsdate[]="$Date: 1991/07/03 18:49:25 $";
  118.   #include "config.h"        /* overkill, only need BinSh & MAILBOX_SEPARATOR */
  119.   #include "includes.h"
  120.   
  121. ! #define BSIZE    4096
  122.   
  123.   #define FROM        "From "
  124.   #define UNKNOWN        "foo@bar"
  125. --- 11,23 ----
  126.    *                                    *
  127.    ************************************************************************/
  128.   #ifdef    RCS
  129. ! static char rcsid[]="$Id: formail.c,v 2.8 1991/07/17 14:35:09 berg Rel $";
  130.   #endif
  131. ! static char rcsdate[]="$Date: 1991/07/17 14:35:09 $";
  132.   #include "config.h"        /* overkill, only need BinSh & MAILBOX_SEPARATOR */
  133.   #include "includes.h"
  134.   
  135. ! #define BSIZE        4096
  136.   
  137.   #define FROM        "From "
  138.   #define UNKNOWN        "foo@bar"
  139. ***************
  140. *** 48,54 ****
  141. --- 48,64 ----
  142.    {Fromm,STRLEN(Fromm)},{Date,STRLEN(Date)},{subject,STRLEN(subject)},
  143.    {article,STRLEN(article)},{Path,STRLEN(Path)},{Received,STRLEN(Received)}};
  144.   #define mxl(a,b)    mx(STRLEN(a),STRLEN(b))
  145. + #ifndef MAILBOX_SEPARATOR
  146.   #define dig_HDR_LEN    mx(mxl(From,Fromm),mxl(Date,subject))
  147. + #define mboxseparator        From
  148. + #define flushseparator(i,p)
  149. + #else
  150. + static const char mboxseparator[]=MAILBOX_SEPARATOR;
  151. + #define flushseparator(i,p)    \
  152. +  do{i=p;p=0;do{int x;Nextchar(x);}while(--i);}while(0)
  153. + #define dig_HDR_LEN    \
  154. +  mx(mx(mxl(From,Fromm),mxl(Date,subject)),STRLEN(mboxseparator))
  155. + #endif
  156.   static errout,oldstdout;
  157.   static pid_t child= -1;
  158.   static FILE*mystdout;
  159. ***************
  160. *** 114,136 ****
  161.        case '\0':;}
  162.         break;}}
  163.   parsedoptions:
  164. ! #ifndef MAILBOX_SEPARATOR
  165. ! #define mboxseparator        From
  166. ! #define flushseparator()
  167. ! #else
  168. ! #define mboxseparator        MAILBOX_SEPARATOR
  169. ! #define flushseparator()    (p=0)
  170.    if(split){
  171.      bogus=0;every=1;}
  172.   #endif
  173. !  mystdout=stdout;
  174.    if(split){
  175.      oldstdout=dup(STDOUT);fclose(stdout);startprog(argv);}
  176.    while('\n'==(i=getchar()));
  177.    buf=malloc(buflen=BSIZE);t=time((time_t*)0);
  178.    for(;;){                     /* start parsing the header */
  179.      if((buf[p++]=i)=='\n'){
  180. !       chp=buf+lnl;i=maxindex(rex);
  181.         while(strnicmp(rex[i].headr,chp,rex[i].lenr)&&i--);
  182.         if(i>=0)                      /* found anything already? */
  183.        rex[i].offset=lnl+rex[i].lenr;
  184. --- 124,153 ----
  185.        case '\0':;}
  186.         break;}}
  187.   parsedoptions:
  188. ! #ifdef MAILBOX_SEPARATOR
  189.    if(split){
  190.      bogus=0;every=1;}
  191.   #endif
  192. !  mystdout=stdout;signal(SIGPIPE,SIG_IGN);
  193.    if(split){
  194.      oldstdout=dup(STDOUT);fclose(stdout);startprog(argv);}
  195. +  else if(every)
  196. +    goto usg;
  197.    while('\n'==(i=getchar()));
  198.    buf=malloc(buflen=BSIZE);t=time((time_t*)0);
  199.    for(;;){                     /* start parsing the header */
  200.      if((buf[p++]=i)=='\n'){
  201. !       chp=buf+lnl;
  202. ! #ifdef MAILBOX_SEPARATOR
  203. !       if(!strncmp(mboxseparator,chp,STRLEN(mboxseparator))){
  204. !      if(!lnl){
  205. !         if(split){
  206. !            p=0;goto redigest;}
  207. !         force=1;}         /* separator up front, don't add a 'From ' line */
  208. !      else if(bogus)
  209. !         *chp=' ';}
  210. ! #endif
  211. !       i=maxindex(rex);
  212.         while(strnicmp(rex[i].headr,chp,rex[i].lenr)&&i--);
  213.         if(i>=0)                      /* found anything already? */
  214.        rex[i].offset=lnl+rex[i].lenr;
  215. ***************
  216. *** 139,146 ****
  217.           if(!areply)
  218.              goto endofheader;
  219.           nowm=trust?1:3/*wreply*/;ll=lnl+STRLEN(From);goto foundfrom;}
  220.        if(bogus){
  221. !         tmemmove(chp+1,chp,p++-lnl);*chp='>';}}           /* disarm */
  222.         else{
  223.        i=maxindex(sest);
  224.        do
  225. --- 156,166 ----
  226.           if(!areply)
  227.              goto endofheader;
  228.           nowm=trust?1:3/*wreply*/;ll=lnl+STRLEN(From);goto foundfrom;}
  229. + #ifndef MAILBOX_SEPARATOR
  230.        if(bogus){
  231. !         tmemmove(chp+1,chp,p++-lnl);*chp='>';}           /* disarm */
  232. ! #endif
  233. !      }
  234.         else{
  235.        i=maxindex(sest);
  236.        do
  237. ***************
  238. *** 200,211 ****
  239.         Nextchar(i=buf[p]);
  240.         if(++p==STRLEN(mboxseparator))
  241.        if(!strncmp(mboxseparator,buf,STRLEN(mboxseparator))){
  242. !         if(bogus&&!lnl){
  243. !            putcs('>');break;}                   /* disarm */
  244. !         else if(every){
  245. !            flushseparator();goto splitit;}         /* optionally flush */
  246.           else if(split&&lnl)
  247. !            lnl=2;}               /* mark line as possible postmark */
  248.         if(lnl==1&&digest){
  249.        thelen=maxindex(cdigest);
  250.        do                      /* check for new digest header */
  251. --- 220,235 ----
  252.         Nextchar(i=buf[p]);
  253.         if(++p==STRLEN(mboxseparator))
  254.        if(!strncmp(mboxseparator,buf,STRLEN(mboxseparator))){
  255. !         if(every){
  256. !            flushseparator(i,p);goto splitit;}     /* optionally flush */
  257.           else if(split&&lnl)
  258. !            lnl=2;               /* mark line as possible postmark */
  259. !         else if(bogus){                       /* disarm */
  260. ! #ifndef MAILBOX_SEPARATOR
  261. !            putcs('>');break;}}
  262. ! #else
  263. !            Nextchar(i);*buf=' ';putssn(buf,p);*buf=i;p=1;continue;}}
  264. ! #endif
  265.         if(lnl==1&&digest){
  266.        thelen=maxindex(cdigest);
  267.        do                      /* check for new digest header */
  268. diff -rc ../old/nonint.c ./nonint.c
  269. *** ../old/nonint.c    Wed Jul 10 20:08:06 1991
  270. --- ./nonint.c    Wed Jul 17 17:00:14 1991
  271. ***************
  272. *** 9,15 ****
  273.    *                                    *
  274.    ************************************************************************/
  275.   #ifdef    RCS
  276. ! static char rcsid[]="$Id: nonint.c,v 2.3 1991/07/08 10:47:56 berg Rel $";
  277.   #endif
  278.   #include "config.h"
  279.   #include "procmail.h"
  280. --- 9,15 ----
  281.    *                                    *
  282.    ************************************************************************/
  283.   #ifdef    RCS
  284. ! static char rcsid[]="$Id: nonint.c,v 2.4 1991/07/11 11:22:56 berg Rel $";
  285.   #endif
  286.   #include "config.h"
  287.   #include "procmail.h"
  288. ***************
  289. *** 106,112 ****
  290.   
  291.   long dump(s,source,len)const int s;const char*source;long len;{int i;
  292.    if(s>=0){
  293. !     lastdump=len;
  294.       while(i=rwrite(s,source,BLKSIZ<len?BLKSIZ:(int)len)){
  295.          if(i<0){
  296.         i=0;goto writefin;}
  297. --- 106,112 ----
  298.   
  299.   long dump(s,source,len)const int s;const char*source;long len;{int i;
  300.    if(s>=0){
  301. !     lastdump=len;mboxseparator(s);    /* prepend optional custom separator */
  302.       while(i=rwrite(s,source,BLKSIZ<len?BLKSIZ:(int)len)){
  303.          if(i<0){
  304.         i=0;goto writefin;}
  305. diff -rc ../old/procmail.c ./procmail.c
  306. *** ../old/procmail.c    Wed Jul 10 20:08:05 1991
  307. --- ./procmail.c    Wed Jul 17 17:00:14 1991
  308. ***************
  309. *** 11,17 ****
  310.    *                                    *
  311.    ************************************************************************/
  312.   #ifdef    RCS
  313. ! static char rcsid[]="$Id: procmail.c,v 2.9 1991/07/08 13:03:07 berg Rel $";
  314.   #endif
  315.   #include "config.h"
  316.   #define MAIN
  317. --- 11,17 ----
  318.    *                                    *
  319.    ************************************************************************/
  320.   #ifdef    RCS
  321. ! static char rcsid[]="$Id: procmail.c,v 2.10 1991/07/17 14:58:38 berg Rel $";
  322.   #endif
  323.   #include "config.h"
  324.   #define MAIN
  325. ***************
  326. *** 18,24 ****
  327.   #include "procmail.h"
  328.   #include "shell.h"
  329.   
  330. ! #define VERSION "procmail v2.10 1991/07/08 written by Stephen R.van den Berg\n\
  331.   \t\t\t\tberg@messua.informatik.rwth-aachen.de\n\
  332.   \t\t\t\tberg@physik.tu-muenchen.de\n"
  333.   
  334. --- 18,24 ----
  335.   #include "procmail.h"
  336.   #include "shell.h"
  337.   
  338. ! #define VERSION "procmail v2.11 1991/07/17 written by Stephen R.van den Berg\n\
  339.   \t\t\t\tberg@messua.informatik.rwth-aachen.de\n\
  340.   \t\t\t\tberg@physik.tu-muenchen.de\n"
  341.   
  342. ***************
  343. *** 39,45 ****
  344.    {"NORESRETRY",DEFnoresretry},{"TIMEOUT",DEFtimeout}};
  345.   long lastdump;
  346.   int retval=EX_CANTCREAT,sh,pwait,lcking,locknext,verbose,linebuf=DEFlinebuf,
  347. !  rc= -1;
  348.   volatile int flaggerd=2,nextexit;
  349.   volatile time_t alrmtime;
  350.   pid_t thepid;
  351. --- 39,45 ----
  352.    {"NORESRETRY",DEFnoresretry},{"TIMEOUT",DEFtimeout}};
  353.   long lastdump;
  354.   int retval=EX_CANTCREAT,sh,pwait,lcking,locknext,verbose,linebuf=DEFlinebuf,
  355. !  rc= -1,tofolder;
  356.   volatile int flaggerd=2,nextexit;
  357.   volatile time_t alrmtime;
  358.   pid_t thepid;
  359. ***************
  360. *** 73,79 ****
  361.    setdef(orgmail,DEForgmail);setdef(grep,DEFgrep);setdef(sendmail,DEFsendmail);
  362.    setdef(lockext,DEFlockext);setdef(msgprefix,DEFmsgprefix);
  363.    chdir(getenv(maildir));nextrcfile();thebody=themail=malloc(1);filled=0;
  364. !  signal(SIGTERM,sterminate);signal(SIGINT,sterminate);
  365.    signal(SIGHUP,sterminate);signal(SIGQUIT,flagger);signal(SIGALRM,ftimeout);
  366.   changedmail:
  367.    themail=readdyn(themail,&filled);             /* read in the mail */
  368. --- 73,82 ----
  369.    setdef(orgmail,DEForgmail);setdef(grep,DEFgrep);setdef(sendmail,DEFsendmail);
  370.    setdef(lockext,DEFlockext);setdef(msgprefix,DEFmsgprefix);
  371.    chdir(getenv(maildir));nextrcfile();thebody=themail=malloc(1);filled=0;
  372. ! #ifdef SIGXCPU
  373. !  signal(SIGXCPU,SIG_IGN);signal(SIGXFSZ,SIG_IGN);
  374. ! #endif
  375. !  signal(SIGPIPE,SIG_IGN);signal(SIGTERM,sterminate);signal(SIGINT,sterminate);
  376.    signal(SIGHUP,sterminate);signal(SIGQUIT,flagger);signal(SIGALRM,ftimeout);
  377.   changedmail:
  378.    themail=readdyn(themail,&filled);             /* read in the mail */
  379. ***************
  380. *** 158,164 ****
  381.         else if(strchr(flags,'b'))
  382.        tobesent-=(startchar=thebody)-themail;
  383.         chp=strchr(strcpy(buf,tgetenv(sendmail)),'\0');sh=0;
  384. !       pwait=!!strchr(flags,'w');
  385.         if(testb('!')){                     /* forward the mail */
  386.        readparse(chp+1,getb,0);
  387.        if(i)
  388. --- 161,167 ----
  389.         else if(strchr(flags,'b'))
  390.        tobesent-=(startchar=thebody)-themail;
  391.         chp=strchr(strcpy(buf,tgetenv(sendmail)),'\0');sh=0;
  392. !       pwait=!!strchr(flags,'w');skipspace();
  393.         if(testb('!')){                     /* forward the mail */
  394.        readparse(chp+1,getb,0);
  395.        if(i)
  396. ***************
  397. *** 206,212 ****
  398.           if(dump(deliver(buf2),startchar,tobesent))
  399.              writeerr(buf);
  400.           else if(!strchr(flags,'c'))
  401. !            goto mailed;}}}
  402.      else if(testb('#'))                       /* no comment :-) */
  403.         getbl(buf);
  404.      else{                    /* then it must be an assignment */
  405. --- 209,216 ----
  406.           if(dump(deliver(buf2),startchar,tobesent))
  407.              writeerr(buf);
  408.           else if(!strchr(flags,'c'))
  409. !            goto mailed;
  410. !         tofolder=0;}}}
  411.      else if(testb('#'))                       /* no comment :-) */
  412.         getbl(buf);
  413.      else{                    /* then it must be an assignment */
  414. diff -rc ../old/procmail.h ./procmail.h
  415. *** ../old/procmail.h    Wed Jul 10 20:08:12 1991
  416. --- ./procmail.h    Wed Jul 17 17:14:19 1991
  417. ***************
  418. *** 1,4 ****
  419. ! /*$Id: procmail.h,v 2.2 1991/07/08 14:29:31 berg Rel $*/
  420.   
  421.   #include "includes.h"
  422.   
  423. --- 1,4 ----
  424. ! /*$Id: procmail.h,v 2.3 1991/07/11 11:22:56 berg Rel $*/
  425.   
  426.   #include "includes.h"
  427.   
  428. ***************
  429. *** 9,16 ****
  430.   #endif
  431.   
  432.   #ifdef MAILBOX_SEPARATOR
  433. ! #define mboxseparator(fd)    rwrite(fd,MAILBOX_SEPARATOR,\
  434. !  STRLEN(MAILBOX_SEPARATOR))
  435.   #else
  436.   #define mboxseparator(fd)
  437.   #endif
  438. --- 9,16 ----
  439.   #endif
  440.   
  441.   #ifdef MAILBOX_SEPARATOR
  442. ! #define mboxseparator(fd)    \
  443. !  (tofolder?rwrite(fd,MAILBOX_SEPARATOR,STRLEN(MAILBOX_SEPARATOR)):0)
  444.   #else
  445.   #define mboxseparator(fd)
  446.   #endif
  447. ***************
  448. *** 43,49 ****
  449.    devnull[],executing[],oquote[],cquote[],whilstwfor[];
  450.   extern struct varval strenvvar[];
  451.   extern long lastdump;
  452. ! extern sh,pwait,retval,lcking,locknext,verbose,linebuf,rc;
  453.   extern volatile flaggerd,nextexit;
  454.   extern volatile time_t alrmtime;
  455.   extern pid_t thepid;
  456. --- 43,49 ----
  457.    devnull[],executing[],oquote[],cquote[],whilstwfor[];
  458.   extern struct varval strenvvar[];
  459.   extern long lastdump;
  460. ! extern sh,pwait,retval,lcking,locknext,verbose,linebuf,rc,tofolder;
  461.   extern volatile flaggerd,nextexit;
  462.   extern volatile time_t alrmtime;
  463.   extern pid_t thepid;
  464. diff -rc ../old/retint.c ./retint.c
  465. *** ../old/retint.c    Wed Jul 10 20:08:07 1991
  466. --- ./retint.c    Wed Jul 17 17:00:16 1991
  467. ***************
  468. *** 9,15 ****
  469.    *                                    *
  470.    ************************************************************************/
  471.   #ifdef    RCS
  472. ! static char rcsid[]="$Id: retint.c,v 2.6 1991/07/04 12:57:36 berg Rel $";
  473.   #endif
  474.   #include "config.h"
  475.   #include "procmail.h"
  476. --- 9,15 ----
  477.    *                                    *
  478.    ************************************************************************/
  479.   #ifdef    RCS
  480. ! static char rcsid[]="$Id: retint.c,v 2.7 1991/07/11 11:22:56 berg Rel $";
  481.   #endif
  482.   #include "config.h"
  483.   #include "procmail.h"
  484. ***************
  485. *** 268,274 ****
  486.                          /* open file or new file in directory */
  487.   deliver(boxname)char*const boxname;{struct stat stbuf;
  488.    strcpy(buf,boxname);             /* boxname can be found back in buf */
  489. !  return stat(buf,&stbuf)||!S_ISDIR(stbuf.st_mode)?opena(buf):dirmail();}
  490.   
  491.   #include "exopen.h"
  492.                       /* an NFS secure exclusive file open */
  493. --- 268,275 ----
  494.                          /* open file or new file in directory */
  495.   deliver(boxname)char*const boxname;{struct stat stbuf;
  496.    strcpy(buf,boxname);             /* boxname can be found back in buf */
  497. !  return stat(buf,&stbuf)||!S_ISDIR(stbuf.st_mode)?
  498. !    (tofolder=1,opena(buf)):dirmail();}
  499.   
  500.   #include "exopen.h"
  501.                       /* an NFS secure exclusive file open */
  502. ----------------------------------cut here------------------------------------
  503.  
  504. exit 0 # Just in case...
  505. -- 
  506. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  507. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  508. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  509. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  510.