home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / mail / elm / 3259 < prev    next >
Encoding:
Internet Message Format  |  1992-11-10  |  54.9 KB

  1. Xref: sparky comp.mail.elm:3259 comp.sources.bugs:269
  2. Newsgroups: comp.mail.elm,comp.sources.bugs
  3. Path: sparky!uunet!caen!spool.mu.edu!dsinc!syd
  4. From: syd@dsinc.DSI.COM (Syd Weinstein)
  5. Subject: elm 2.4 Patch #8
  6. Message-ID: <1992Nov10.202348.22938@DSI.COM>
  7. Followup-To: poster
  8. Summary: This is an official patch for elm 2.4 system.  Please apply it.
  9. Sender: syd@DSI.COM (Syd Weinstein)
  10. Priority: HIGH
  11. Organization: Datacomp Systems, Inc., Huntingdon Valley, PA 19006
  12. Date: Tue, 10 Nov 1992 20:23:48 GMT
  13. Lines: 1623
  14.  
  15. This is part 2 of a 2 part patch
  16.  
  17. Fix:    From rn, say "| patch -p -N -d DIR", where DIR is your elm source
  18.     directory.  Outside of rn, say "cd DIR; patch -p -N <thisarticle".
  19.     If you don't have the patch program, apply the following by hand,
  20.     or get patch (version 2.0, latest patchlevel).
  21.  
  22.     After patching:
  23.         sh lib/Makefile.SH
  24.         sh doc/Makefile.SH
  25.         make
  26.         make install
  27.  
  28.     If patch indicates that patchlevel is the wrong version, you may need
  29.     to apply one or more previous patches, or the patch may already
  30.     have been applied.  See the patchlevel.h file to find out what has or
  31.     has not been applied.  In any event, don't continue with the patch.
  32.  
  33.     If you are missing previous patches they can be obtained from our:
  34.     archive server.
  35.  
  36.     Syd Weinstein
  37.     elm@DSI.COM
  38.  
  39.     The patches are available from the dsinc archive server
  40.     Send the following message to archive-server@DSI.COM for
  41.     a list of available patches:
  42.  
  43.     Subject: patch list
  44.     send index elm
  45.  
  46. Index: hdrs/patchlevel.h
  47. Prereq: "7"
  48. *** ../elm2.4/hdrs/patchlevel.h    Mon Nov  2 15:51:37 1992
  49. --- hdrs/patchlevel.h    Sat Nov  7 15:29:38 1992
  50. ***************
  51. *** 1 ****
  52. ! #define PATCHLEVEL "7"
  53. --- 1 ----
  54. ! #define PATCHLEVEL "8"
  55.  
  56. Index: src/mime.c
  57. Prereq: 5.4
  58. *** ../elm2.4/src/mime.c    Mon Nov  2 15:51:48 1992
  59. --- src/mime.c    Sat Nov  7 11:21:58 1992
  60. ***************
  61. *** 1,5 ****
  62.   /*******************************************************************************
  63. !  *  The Elm Mail System  -  $Revision: 5.4 $   $State: Exp $
  64.    *
  65.    *            Copyright (c) 1988-1992 USENET Community Trust
  66.    *            Copyright (c) 1986,1987 Dave Taylor
  67. --- 1,5 ----
  68.   /*******************************************************************************
  69. !  *  The Elm Mail System  -  $Revision: 5.5 $   $State: Exp $
  70.    *
  71.    *            Copyright (c) 1988-1992 USENET Community Trust
  72.    *            Copyright (c) 1986,1987 Dave Taylor
  73. ***************
  74. *** 11,16 ****
  75. --- 11,20 ----
  76.    *
  77.    ******************************************************************************
  78.    * $Log: mime.c,v $
  79. +  * Revision 5.5  1992/11/07  16:21:56  syd
  80. +  * There is no need to write out the MIME-Version header in subparts
  81. +  * From: Klaus Steinberger <Klaus.Steinberger@Physik.Uni-Muenchen.DE>
  82. +  *
  83.    * Revision 5.4  1992/10/30  21:10:39  syd
  84.    * it invokes metamail (the pseudo is because "text" isn't a legal Content-Type).
  85.    * in src/mime.c notplain() tries to check for text but fails because it should
  86. ***************
  87. *** 174,180 ****
  88.       sleep(2);
  89.       return(-1);
  90.       }
  91. -     fprintf(dest, "%s\n", MIME_HEADER);
  92.       fprintf(dest, "%s %s\n", MIME_CONTENTTYPE, Content_Type);
  93.       fprintf(dest, "Content-Name: %s\n", Include_Filename);
  94.       fprintf(dest, "Content-Length: %d\n", file_status.st_size);
  95. --- 178,183 ----
  96.  
  97. Index: src/newmbox.c
  98. Prereq: 5.4
  99. *** ../elm2.4/src/newmbox.c    Mon Nov  2 15:51:49 1992
  100. --- src/newmbox.c    Sat Nov  7 15:06:13 1992
  101. ***************
  102. *** 1,8 ****
  103.   
  104. ! static char rcsid[] = "@(#)$Id: newmbox.c,v 5.4 1992/10/31 18:52:51 syd Exp $";
  105.   
  106.   /*******************************************************************************
  107. !  *  The Elm Mail System  -  $Revision: 5.4 $   $State: Exp $
  108.    *
  109.    *            Copyright (c) 1988-1992 USENET Community Trust
  110.    *            Copyright (c) 1986,1987 Dave Taylor
  111. --- 1,8 ----
  112.   
  113. ! static char rcsid[] = "@(#)$Id: newmbox.c,v 5.6 1992/11/07 20:05:52 syd Exp $";
  114.   
  115.   /*******************************************************************************
  116. !  *  The Elm Mail System  -  $Revision: 5.6 $   $State: Exp $
  117.    *
  118.    *            Copyright (c) 1988-1992 USENET Community Trust
  119.    *            Copyright (c) 1986,1987 Dave Taylor
  120. ***************
  121. *** 14,19 ****
  122. --- 14,27 ----
  123.    *
  124.    *******************************************************************************
  125.    * $Log: newmbox.c,v $
  126. +  * Revision 5.6  1992/11/07  20:05:52  syd
  127. +  * change to use header_cmp to allow for linear white space around the colon
  128. +  * From: Syd
  129. +  *
  130. +  * Revision 5.5  1992/11/07  16:08:52  syd
  131. +  * add tolerance for incorrect content length line
  132. +  * From: Syd
  133. +  *
  134.    * Revision 5.4  1992/10/31  18:52:51  syd
  135.    * Corrections to Unix date parsing and time zone storage
  136.    * From: eotto@hvlpa.att.com
  137. ***************
  138. *** 252,262 ****
  139.       struct header_rec *current_header = NULL;
  140.       char buffer[LONG_STRING], tbuffer[LONG_STRING], *c;
  141.       long fbytes = 0L, line_bytes = 0L, content_start = 0L,
  142. !       content_remaining = -1L;
  143. !     register int line = 0, count = 0, another_count,
  144.         subj = 0, copyit = 0, in_header = FALSE;
  145.       int count_x, count_y = 17, err;
  146. !     int in_to_list = FALSE, forwarding_mail = FALSE, first_line = TRUE;
  147.   
  148.       static int first_read = 0;
  149.   #ifdef MMDF
  150. --- 260,272 ----
  151.       struct header_rec *current_header = NULL;
  152.       char buffer[LONG_STRING], tbuffer[LONG_STRING], *c;
  153.       long fbytes = 0L, line_bytes = 0L, content_start = 0L,
  154. !       content_remaining = -1L, lines_start = 0L;
  155. !     register long line = 0;
  156. !     register int count = 0, another_count,
  157.         subj = 0, copyit = 0, in_header = FALSE;
  158.       int count_x, count_y = 17, err;
  159. !     int in_to_list = FALSE, forwarding_mail = FALSE, first_line = TRUE,
  160. !       content_length_found = FALSE;
  161.   
  162.       static int first_read = 0;
  163.   #ifdef MMDF
  164. ***************
  165. *** 465,472 ****
  166.   
  167.             if (real_from(buffer, headers[count])) {
  168.   
  169. !             dprint(1, (debugfile, "content_remaining = %ld, content_start = %ld, fbytes = %ld\n",
  170. !             content_remaining, content_start, fbytes));
  171.   
  172.           current_header = headers[count];
  173.   
  174. --- 475,482 ----
  175.   
  176.             if (real_from(buffer, headers[count])) {
  177.   
  178. !             dprint(1, (debugfile, "content_remaining = %ld, content_start = %ld, lines_start = %ld, fbytes = %ld\n",
  179. !             content_remaining, content_start, lines_start, fbytes));
  180.   
  181.           current_header = headers[count];
  182.   
  183. ***************
  184. *** 473,478 ****
  185. --- 483,489 ----
  186.           current_header->offset = (long) fbytes;
  187.           current_header->content_length = -1; /* not found yet */
  188.           current_header->index_number = count+1;
  189. +         content_length_found = FALSE;
  190.           /* set default status - always 'visible'  - and
  191.            * if a spool file, presume 'new', otherwise
  192.            * 'read', for the time being until overridden
  193. ***************
  194. *** 579,584 ****
  195. --- 590,618 ----
  196.             dprint(1, (debugfile, "Line is;\n\t%s\n\n", buffer));
  197.             mail_only++;    /* to avoid leave() cursor motion */
  198.             leave();
  199. +         } else if (in_header == FALSE && content_length_found == TRUE && line_bytes > 1) {
  200. +         /* invalid content length, skip back to beginning of
  201. +          * this messages text and ignore the content length
  202. +          * field.  This requires restoring the current position
  203. +          * in the spool file and the number of lines in the
  204. +          * message.
  205. +          */
  206. +           if (fseek(mailfile, content_start, 0) == -1) {
  207. +         err = errno;
  208. +         Write_to_screen(catgets(elm_msg_cat, ElmSet, ElmCouldntSeekBytesIntoFolder,
  209. +            "\n\rCouldn't seek %ld bytes into folder.\n\r"),
  210. +            1, mailfile_size);    
  211. +         Write_to_screen("** %s. **\n\r", 1, error_description(err));
  212. +         dprint(1, (debugfile,
  213. +       "Error: Couldn't seek folder %s: (offset %ld) Errno %s (%s)\n",
  214. +            cur_folder, mailfile_size, error_description(err), "reset - read_headers"));
  215. +         emergency_exit();
  216. +           }
  217. +           fbytes = content_start;
  218. +           line = lines_start;
  219. +           content_length_found = FALSE;
  220. +           current_header->content_length = -1; /* mark as if not found yet */
  221. +           line_bytes = 0;
  222.           }
  223.         }
  224.   
  225. ***************
  226. *** 596,608 ****
  227.             real_from(buffer, current_header);
  228.           else
  229.   #endif /* MMDF */
  230. !         if (first_word_nc(buffer,">From:"))
  231.             parse_arpa_who(buffer, current_header->from, FALSE);
  232.           else if (first_word_nc(buffer,">From")) 
  233.             forwarded(buffer, current_header); /* return address */
  234. !         else if (first_word_nc(buffer,"Subject:") ||
  235. !              first_word_nc(buffer,"Subj:") ||
  236. !              first_word_nc(buffer,"Re:")) {
  237.             if (! subj++) {
  238.           strncpy(tbuffer, buffer, sizeof(tbuffer));
  239.               remove_header_keyword(tbuffer);
  240. --- 630,642 ----
  241.             real_from(buffer, current_header);
  242.           else
  243.   #endif /* MMDF */
  244. !         if (header_cmp(buffer,">From", NULL))
  245.             parse_arpa_who(buffer, current_header->from, FALSE);
  246.           else if (first_word_nc(buffer,">From")) 
  247.             forwarded(buffer, current_header); /* return address */
  248. !         else if (header_cmp(buffer,"Subject", NULL) ||
  249. !              header_cmp(buffer,"Subj", NULL) ||
  250. !              header_cmp(buffer,"Re", NULL)) {
  251.             if (! subj++) {
  252.           strncpy(tbuffer, buffer, sizeof(tbuffer));
  253.               remove_header_keyword(tbuffer);
  254. ***************
  255. *** 610,616 ****
  256.           remove_possible_trailing_spaces(current_header->subject);
  257.             }
  258.           }
  259. !         else if (first_word_nc(buffer,"From:")) {
  260.             dprint(1, (debugfile, 
  261.              "\n\n**** Calling parse_arpa_who for from ****\n\n"));
  262.   #ifdef MMDF
  263. --- 644,650 ----
  264.           remove_possible_trailing_spaces(current_header->subject);
  265.             }
  266.           }
  267. !         else if (header_cmp(buffer,"From", NULL)) {
  268.             dprint(1, (debugfile, 
  269.              "\n\n**** Calling parse_arpa_who for from ****\n\n"));
  270.   #ifdef MMDF
  271. ***************
  272. *** 620,643 ****
  273.   #endif /* MMDF */
  274.   
  275.           }
  276. !         else if (first_word_nc(buffer, "Message-Id:")) {
  277.             buffer[line_bytes - 1] = '\0';
  278.             strcpy(current_header->messageid,
  279.                (char *) buffer + 12);
  280.           }
  281.   
  282. !         else if (first_word_nc(buffer, "Content-Length:")) {
  283.             buffer[line_bytes - 1] = '\0';
  284.             current_header->content_length = atol((char *) buffer + 15);
  285.           }
  286.   
  287. !         else if (first_word_nc(buffer, "Expires:"))
  288.             process_expiration_date((char *) buffer + 9, 
  289.                         &(current_header->status));
  290.           
  291.           /** when it was sent... **/
  292.   
  293. !         else if (first_word_nc(buffer, "Date:")) {
  294.             dprint(1, (debugfile, 
  295.                  "\n\n**** Calling parse_arpa_date ****\n\n"));
  296.             strncpy(tbuffer, buffer, sizeof(tbuffer));
  297. --- 654,678 ----
  298.   #endif /* MMDF */
  299.   
  300.           }
  301. !         else if (header_cmp(buffer, "Message-Id", NULL)) {
  302.             buffer[line_bytes - 1] = '\0';
  303.             strcpy(current_header->messageid,
  304.                (char *) buffer + 12);
  305.           }
  306.   
  307. !         else if (header_cmp(buffer, "Content-Length", NULL)) {
  308.             buffer[line_bytes - 1] = '\0';
  309.             current_header->content_length = atol((char *) buffer + 15);
  310. +           content_length_found = TRUE;
  311.           }
  312.   
  313. !         else if (header_cmp(buffer, "Expires", NULL))
  314.             process_expiration_date((char *) buffer + 9, 
  315.                         &(current_header->status));
  316.           
  317.           /** when it was sent... **/
  318.   
  319. !         else if (header_cmp(buffer, "Date", NULL)) {
  320.             dprint(1, (debugfile, 
  321.                  "\n\n**** Calling parse_arpa_date ****\n\n"));
  322.             strncpy(tbuffer, buffer, sizeof(tbuffer));
  323. ***************
  324. *** 647,677 ****
  325.   
  326.           /** some status things about the message... **/
  327.   
  328. !         else if ((first_word_nc(buffer, "Priority:") ||
  329. !              first_word_nc(buffer, "Importance: 2")) &&
  330. !            !(first_word_nc(buffer, "priority: normal") ||
  331. !              first_word_nc(buffer, "priority: non-urgent")))
  332.             current_header->status |= URGENT;
  333. !         else if (first_word_nc(buffer, "Sensitivity: 2"))
  334.             current_header->status |= PRIVATE;
  335. !         else if (first_word_nc(buffer, "Sensitivity: 3"))
  336.             current_header->status |= CONFIDENTIAL;
  337. !         else if (first_word_nc(buffer, "Content-Type: mailform"))
  338.             current_header->status |= FORM_LETTER;
  339. !         else if (first_word_nc(buffer, "Action:"))
  340.             current_header->status |= ACTION;
  341.   #ifdef    MIME
  342. !         else if (first_word_nc(buffer, MIME_HEADER))
  343.             current_header->status |= MIME_MESSAGE;
  344.           /* Next two lines for backward compatability to old drafts */
  345. !         else if (first_word_nc(buffer, MIME_OLDVERSION))
  346.             current_header->status |= MIME_MESSAGE;
  347. !         else if (first_word_nc(buffer, MIME_CONTENTTYPE) &&
  348.           (current_header->status & MIME_MESSAGE)) {
  349.             if (notplain(buffer+strlen(MIME_CONTENTTYPE)))
  350.           current_header->status |= MIME_NOTPLAIN;
  351.           }
  352. !         else if (first_word_nc(buffer, MIME_CONTENTENCOD)) {
  353.             if (needs_mmdecode(buffer+strlen(MIME_CONTENTENCOD)))
  354.           current_header->status |= MIME_NEEDDECOD;
  355.           }
  356. --- 682,712 ----
  357.   
  358.           /** some status things about the message... **/
  359.   
  360. !         else if ((header_cmp(buffer, "Priority", NULL) ||
  361. !              header_cmp(buffer, "Importance", "2")) &&
  362. !            !(header_cmp(buffer, "priority", "normal") ||
  363. !              header_cmp(buffer, "priority", "non-urgent")))
  364.             current_header->status |= URGENT;
  365. !         else if (header_cmp(buffer, "Sensitivity", "2"))
  366.             current_header->status |= PRIVATE;
  367. !         else if (header_cmp(buffer, "Sensitivity", "3"))
  368.             current_header->status |= CONFIDENTIAL;
  369. !         else if (header_cmp(buffer, "Content-Type", "mailform"))
  370.             current_header->status |= FORM_LETTER;
  371. !         else if (header_cmp(buffer, "Action", NULL))
  372.             current_header->status |= ACTION;
  373.   #ifdef    MIME
  374. !         else if (header_cmp(buffer, MIME_HEADER_NAME, MIME_HEADER_VERSION))
  375.             current_header->status |= MIME_MESSAGE;
  376.           /* Next two lines for backward compatability to old drafts */
  377. !         else if (header_cmp(buffer, MIME_HEADER_NAME, MIME_HEADER_OLDVERSION))
  378.             current_header->status |= MIME_MESSAGE;
  379. !         else if (header_cmp(buffer, MIME_HEADER_CONTENTTYPE, NULL) &&
  380.           (current_header->status & MIME_MESSAGE)) {
  381.             if (notplain(buffer+strlen(MIME_CONTENTTYPE)))
  382.           current_header->status |= MIME_NOTPLAIN;
  383.           }
  384. !         else if (header_cmp(buffer, MIME_HEADER_CONTENTENCOD, NULL)) {
  385.             if (needs_mmdecode(buffer+strlen(MIME_CONTENTENCOD)))
  386.           current_header->status |= MIME_NEEDDECOD;
  387.           }
  388. ***************
  389. *** 679,691 ****
  390.   
  391.           /** next let's see if it's to us or not... **/
  392.   
  393. !         else if (first_word_nc(buffer, "To:")) {
  394.             in_to_list = TRUE;
  395.             current_header->to[0] = '\0';    /* nothing yet */
  396.             figure_out_addressee((char *) buffer +3, 
  397.                      current_header->to);
  398.           }
  399. !         else if (first_word_nc(buffer, "Status:")) {
  400.             strncpy(tbuffer, buffer, sizeof(tbuffer));
  401.             remove_header_keyword(tbuffer);
  402.             strncpy(current_header->mailx_status, tbuffer, WLEN-1);
  403. --- 714,726 ----
  404.   
  405.           /** next let's see if it's to us or not... **/
  406.   
  407. !         else if (header_cmp(buffer, "To", NULL)) {
  408.             in_to_list = TRUE;
  409.             current_header->to[0] = '\0';    /* nothing yet */
  410.             figure_out_addressee((char *) buffer +3, 
  411.                      current_header->to);
  412.           }
  413. !         else if (header_cmp(buffer, "Status", NULL)) {
  414.             strncpy(tbuffer, buffer, sizeof(tbuffer));
  415.             remove_header_keyword(tbuffer);
  416.             strncpy(current_header->mailx_status, tbuffer, WLEN-1);
  417. ***************
  418. *** 714,719 ****
  419. --- 749,755 ----
  420.             in_to_list = FALSE;
  421.             content_remaining = current_header->content_length;
  422.             content_start = fbytes + 1;
  423. +           lines_start = line;
  424.           }
  425.           if (in_header == TRUE) {
  426.              if ((!whitespace(buffer[0])) && index(buffer, ':') == NULL) {
  427. ***************
  428. *** 721,726 ****
  429. --- 757,763 ----
  430.               in_to_list = FALSE;
  431.               content_remaining = current_header->content_length;
  432.               content_start = fbytes;
  433. +             lines_start = line;
  434.             }
  435.           }
  436.           if (in_to_list == TRUE) {
  437.  
  438. Index: src/options.c
  439. Prereq: 5.2
  440. *** ../elm2.4/src/options.c    Tue Oct 27 11:17:30 1992
  441. --- src/options.c    Sat Nov  7 14:37:23 1992
  442. ***************
  443. *** 1,8 ****
  444.   
  445. ! static char rcsid[] = "@(#)$Id: options.c,v 5.2 1992/10/24 13:35:39 syd Exp $";
  446.   
  447.   /*******************************************************************************
  448. !  *  The Elm Mail System  -  $Revision: 5.2 $   $State: Exp $
  449.    *
  450.    *             Copyright (c) 1986,1987 Dave Taylor
  451.    *             Copyright (c) 1988-1992 USENET Community Trust
  452. --- 1,8 ----
  453.   
  454. ! static char rcsid[] = "@(#)$Id: options.c,v 5.3 1992/11/07 19:37:21 syd Exp $";
  455.   
  456.   /*******************************************************************************
  457. !  *  The Elm Mail System  -  $Revision: 5.3 $   $State: Exp $
  458.    *
  459.    *             Copyright (c) 1986,1987 Dave Taylor
  460.    *             Copyright (c) 1988-1992 USENET Community Trust
  461. ***************
  462. *** 14,19 ****
  463. --- 14,24 ----
  464.    *
  465.    *******************************************************************************
  466.    * $Log: options.c,v $
  467. +  * Revision 5.3  1992/11/07  19:37:21  syd
  468. +  * Enhanced printing support.  Added "-I" to readmsg to
  469. +  * suppress spurious diagnostic messages.
  470. +  * From: chip@chinacat.unicom.com (Chip Rosenthal)
  471. +  *
  472.    * Revision 5.2  1992/10/24  13:35:39  syd
  473.    * changes found by using codecenter on Elm 2.4.3
  474.    * From: Graham Hudspith <gwh@inmos.co.uk>
  475. ***************
  476. *** 148,154 ****
  477.   "This is where copies of outbound messages are saved automatically.", ElmOptionOutboundHelp},
  478.   
  479.   {'p', "P)rint mail using", ElmOptionPrintMenu,    "print",    post_print,
  480. ! "This is how printouts are generated.  \"%s\" will be replaced by the filename.", ElmOptionPrintHelp},
  481.   
  482.   {'r', "R)eply copies msg", ElmOptionReplyMenu,    "autocopy",    NULL,
  483.   "Whether to copy the message being replied to into the reply.", ElmOptionReplyHelp},
  484. --- 153,159 ----
  485.   "This is where copies of outbound messages are saved automatically.", ElmOptionOutboundHelp},
  486.   
  487.   {'p', "P)rint mail using", ElmOptionPrintMenu,    "print",    post_print,
  488. ! "This is the command used to print mail messages.", ElmOptionPrintHelp},
  489.   
  490.   {'r', "R)eply copies msg", ElmOptionReplyMenu,    "autocopy",    NULL,
  491.   "Whether to copy the message being replied to into the reply.", ElmOptionReplyHelp},
  492.  
  493. Index: src/read_rc.c
  494. Prereq: 5.7
  495. *** ../elm2.4/src/read_rc.c    Tue Oct 27 11:17:31 1992
  496. --- src/read_rc.c    Sat Nov  7 11:27:34 1992
  497. ***************
  498. *** 1,8 ****
  499.   
  500. ! static char rcsid[] = "@(#)$Id: read_rc.c,v 5.7 1992/10/24 13:44:41 syd Exp $";
  501.   
  502.   /*******************************************************************************
  503. !  *  The Elm Mail System  -  $Revision: 5.7 $   $State: Exp $
  504.    *
  505.    *            Copyright (c) 1988-1992 USENET Community Trust
  506.    *            Copyright (c) 1986,1987 Dave Taylor
  507. --- 1,8 ----
  508.   
  509. ! static char rcsid[] = "@(#)$Id: read_rc.c,v 5.8 1992/11/07 16:27:33 syd Exp $";
  510.   
  511.   /*******************************************************************************
  512. !  *  The Elm Mail System  -  $Revision: 5.8 $   $State: Exp $
  513.    *
  514.    *            Copyright (c) 1988-1992 USENET Community Trust
  515.    *            Copyright (c) 1986,1987 Dave Taylor
  516. ***************
  517. *** 14,19 ****
  518. --- 14,25 ----
  519.    *
  520.    *******************************************************************************
  521.    * $Log: read_rc.c,v $
  522. +  * Revision 5.8  1992/11/07  16:27:33  syd
  523. +  * Fix where elm duplicates the entry's from the global elm.rc.
  524. +  * It will however still copy the global weedout headers to your local
  525. +  * elmrc if they where not already in it.
  526. +  * From: janw@fwi.uva.nl (Jan Wortelboer)
  527. +  *
  528.    * Revision 5.7  1992/10/24  13:44:41  syd
  529.    * There is now an additional elmrc option "displaycharset", which
  530.    * sets the charset supported on your terminal. This is to prevent
  531. ***************
  532. *** 691,698 ****
  533.           for (i=0, len = strlen(header); i< len; i++)
  534.             if (header[i] == '_') header[i] = ' ';
  535.   
  536. !         strcpy(weedlist[weedcount], header);
  537. !         weedcount++;
  538.   /* since this used both for system defaults and user's */
  539.           if (equal(header, "*end-of-defaults*")) break;
  540.         }
  541. --- 697,706 ----
  542.           for (i=0, len = strlen(header); i< len; i++)
  543.             if (header[i] == '_') header[i] = ' ';
  544.   
  545. !             if(!matches_weedlist(header)) {
  546. !           strcpy(weedlist[weedcount], header);
  547. !           weedcount++;
  548. !         }
  549.   /* since this used both for system defaults and user's */
  550.           if (equal(header, "*end-of-defaults*")) break;
  551.         }
  552.  
  553. Index: src/reply.c
  554. Prereq: 5.3
  555. *** ../elm2.4/src/reply.c    Tue Oct 27 11:17:31 1992
  556. --- src/reply.c    Sat Nov  7 15:06:14 1992
  557. ***************
  558. *** 1,8 ****
  559.   
  560. ! static char rcsid[] = "@(#)$Id: reply.c,v 5.3 1992/10/24 13:35:39 syd Exp $";
  561.   
  562.   /*******************************************************************************
  563. !  *  The Elm Mail System  -  $Revision: 5.3 $   $State: Exp $
  564.    *
  565.    *            Copyright (c) 1988-1992 USENET Community Trust
  566.    *            Copyright (c) 1986,1987 Dave Taylor
  567. --- 1,8 ----
  568.   
  569. ! static char rcsid[] = "@(#)$Id: reply.c,v 5.4 1992/11/07 20:05:52 syd Exp $";
  570.   
  571.   /*******************************************************************************
  572. !  *  The Elm Mail System  -  $Revision: 5.4 $   $State: Exp $
  573.    *
  574.    *            Copyright (c) 1988-1992 USENET Community Trust
  575.    *            Copyright (c) 1986,1987 Dave Taylor
  576. ***************
  577. *** 14,19 ****
  578. --- 14,23 ----
  579.    *
  580.    *******************************************************************************
  581.    * $Log: reply.c,v $
  582. +  * Revision 5.4  1992/11/07  20:05:52  syd
  583. +  * change to use header_cmp to allow for linear white space around the colon
  584. +  * From: Syd
  585. +  *
  586.    * Revision 5.3  1992/10/24  13:35:39  syd
  587.    * changes found by using codecenter on Elm 2.4.3
  588.    * From: Graham Hudspith <gwh@inmos.co.uk>
  589. ***************
  590. *** 202,208 ****
  591.       return;
  592.   
  593.         /* we only want lines with addresses */
  594. !       if (!first_word_nc(buf, "To:") && !first_word_nc(buf, "cc:"))
  595.       continue;
  596.   
  597.         /* extract the addresses from this line and possible continuation lines */
  598. --- 206,212 ----
  599.       return;
  600.   
  601.         /* we only want lines with addresses */
  602. !       if (!header_cmp(buf, "To", NULL) && !header_cmp(buf, "cc", NULL))
  603.       continue;
  604.   
  605.         /* extract the addresses from this line and possible continuation lines */
  606.  
  607. Index: src/returnadd.c
  608. Prereq: 5.1
  609. *** ../elm2.4/src/returnadd.c    Sat Oct  3 18:59:15 1992
  610. --- src/returnadd.c    Sat Nov  7 15:06:14 1992
  611. ***************
  612. *** 1,8 ****
  613.   
  614. ! static char rcsid[] = "@(#)$Id: returnadd.c,v 5.1 1992/10/03 22:58:40 syd Exp $";
  615.   
  616.   /*******************************************************************************
  617. !  *  The Elm Mail System  -  $Revision: 5.1 $   $State: Exp $
  618.    *
  619.    *            Copyright (c) 1988-1992 USENET Community Trust
  620.    *            Copyright (c) 1986,1987 Dave Taylor
  621. --- 1,8 ----
  622.   
  623. ! static char rcsid[] = "@(#)$Id: returnadd.c,v 5.3 1992/11/07 20:05:52 syd Exp $";
  624.   
  625.   /*******************************************************************************
  626. !  *  The Elm Mail System  -  $Revision: 5.3 $   $State: Exp $
  627.    *
  628.    *            Copyright (c) 1988-1992 USENET Community Trust
  629.    *            Copyright (c) 1986,1987 Dave Taylor
  630. ***************
  631. *** 14,19 ****
  632. --- 14,27 ----
  633.    *
  634.    *******************************************************************************
  635.    * $Log: returnadd.c,v $
  636. +  * Revision 5.3  1992/11/07  20:05:52  syd
  637. +  * change to use header_cmp to allow for linear white space around the colon
  638. +  * From: Syd
  639. +  *
  640. +  * Revision 5.2  1992/11/07  14:59:05  syd
  641. +  * fix format variable for long
  642. +  * From: Syd
  643. +  *
  644.    * Revision 5.1  1992/10/03  22:58:40  syd
  645.    * Initial checkin as of 2.4 Release at PL0
  646.    *
  647. ***************
  648. *** 75,81 ****
  649.               headers[msgnum]->offset, error_description(errno), 
  650.               "get_existing_address"));
  651.           error2(catgets(elm_msg_cat, ElmSet, ElmCouldntSeekBytesIntoFlle,
  652. !            "Couldn't seek %d bytes into file (%s)."),
  653.                  headers[msgnum]->offset, error_description(errno));
  654.           return;
  655.           }
  656. --- 83,89 ----
  657.               headers[msgnum]->offset, error_description(errno), 
  658.               "get_existing_address"));
  659.           error2(catgets(elm_msg_cat, ElmSet, ElmCouldntSeekBytesIntoFlle,
  660. !            "Couldn't seek %ld bytes into file (%s)."),
  661.                  headers[msgnum]->offset, error_description(errno));
  662.           return;
  663.           }
  664. ***************
  665. *** 86,99 ****
  666.             ok = (int) (mail_gets(mybuf, LONG_STRING, mailfile) != 0);
  667.         no_ret(mybuf);    /* remove return character */
  668.   
  669. !           if (first_word_nc(mybuf, "To: ")) {
  670.           in_to = TRUE;
  671. !         strcpy(buffer, (char *) mybuf + strlen("To: "));
  672.             }
  673. -       else if (first_word_nc(mybuf, "Original-To:")) {
  674. -         in_to = TRUE;
  675. -         strcpy(buffer, (char *) mybuf + strlen("Original-To:"));
  676. -       }
  677.         else if (in_to && whitespace(mybuf[0])) {
  678.           strcat(buffer, " ");        /* tag a space in   */
  679.           strcat(buffer, (char *) mybuf + 1);    /* skip 1 whitespace */
  680. --- 94,104 ----
  681.             ok = (int) (mail_gets(mybuf, LONG_STRING, mailfile) != 0);
  682.         no_ret(mybuf);    /* remove return character */
  683.   
  684. !           if (header_cmp(mybuf, "To", NULL) ||
  685. !           header_cmp(mybuf, "Original-To", NULL)) {
  686.           in_to = TRUE;
  687. !         strcpy(buffer, index(mybuf, ':') + 1);
  688.             }
  689.         else if (in_to && whitespace(mybuf[0])) {
  690.           strcat(buffer, " ");        /* tag a space in   */
  691.           strcat(buffer, (char *) mybuf + 1);    /* skip 1 whitespace */
  692. ***************
  693. *** 141,147 ****
  694.           headers[msgnum]->offset, error_description(errno), 
  695.               "get_return"));
  696.         error2(catgets(elm_msg_cat, ElmSet, ElmCouldntSeekBytesIntoFlle,
  697. !         "Couldn't seek %d bytes into file (%s)."),
  698.              headers[msgnum]->offset, error_description(errno));
  699.         return(using_to);
  700.       }
  701. --- 146,152 ----
  702.           headers[msgnum]->offset, error_description(errno), 
  703.               "get_return"));
  704.         error2(catgets(elm_msg_cat, ElmSet, ElmCouldntSeekBytesIntoFlle,
  705. !         "Couldn't seek %ld bytes into file (%s)."),
  706.              headers[msgnum]->offset, error_description(errno));
  707.         return(using_to);
  708.       }
  709. ***************
  710. *** 195,206 ****
  711.   
  712.   #ifdef USE_EMBEDDED_ADDRESSES
  713.   
  714. !       else if (first_word_nc(buf, "From:")) {
  715. !         get_address_from("From:", buf, hold_return);
  716.           buffer[0] = '\0';
  717.             }
  718. !           else if (first_word_nc(buf, "Reply-To:")) {
  719. !         get_address_from("Reply-To:", buf, buffer);
  720.           return(using_to);
  721.             }
  722.   
  723. --- 200,211 ----
  724.   
  725.   #ifdef USE_EMBEDDED_ADDRESSES
  726.   
  727. !       else if (header_cmp(buf, "From", NULL)) {
  728. !         get_address_from(buf, hold_return);
  729.           buffer[0] = '\0';
  730.             }
  731. !           else if (header_cmp(buf, "Reply-To", NULL)) {
  732. !         get_address_from(buf, buffer);
  733.           return(using_to);
  734.             }
  735.   
  736. ***************
  737. *** 215,222 ****
  738.       else
  739.         add_site(buffer, name1, lastname);    /* get the user name too! */
  740.   
  741. !     if (first_word_nc(buffer, "To:")) {    /* for backward compatibility */
  742. !       get_existing_address(buffer,msgnum);
  743.         using_to = TRUE;
  744.       }
  745.       else {
  746. --- 220,227 ----
  747.       else
  748.         add_site(buffer, name1, lastname);    /* get the user name too! */
  749.   
  750. !     if (header_cmp(buffer, "To")) {    /* for backward compatibility */
  751. !       get_existing_address(buffer, msgnum);
  752.         using_to = TRUE;
  753.       }
  754.       else {
  755.  
  756. Index: src/showmsg.c
  757. Prereq: 5.4
  758. *** ../elm2.4/src/showmsg.c    Mon Nov  2 15:51:49 1992
  759. --- src/showmsg.c    Sat Nov  7 11:23:48 1992
  760. ***************
  761. *** 1,8 ****
  762.   
  763. ! static char rcsid[] = "@(#)$Id: showmsg.c,v 5.4 1992/10/30 21:47:30 syd Exp $";
  764.   
  765.   /*******************************************************************************
  766. !  *  The Elm Mail System  -  $Revision: 5.4 $   $State: Exp $
  767.    *
  768.    *             Copyright (c) 1988-1992 USENET Community Trust
  769.    *             Copyright (c) 1986,1987 Dave Taylor
  770. --- 1,8 ----
  771.   
  772. ! static char rcsid[] = "@(#)$Id: showmsg.c,v 5.5 1992/11/07 16:23:48 syd Exp $";
  773.   
  774.   /*******************************************************************************
  775. !  *  The Elm Mail System  -  $Revision: 5.5 $   $State: Exp $
  776.    *
  777.    *             Copyright (c) 1988-1992 USENET Community Trust
  778.    *             Copyright (c) 1986,1987 Dave Taylor
  779. ***************
  780. *** 14,19 ****
  781. --- 14,23 ----
  782.    *
  783.    *******************************************************************************
  784.    * $Log: showmsg.c,v $
  785. +  * Revision 5.5  1992/11/07  16:23:48  syd
  786. +  * fix null dereferences from patch 5
  787. +  * From: Jukka Ukkonen <ukkonen@csc.fi>
  788. +  *
  789.    * Revision 5.4  1992/10/30  21:47:30  syd
  790.    * Use copy_message in mime shows to get encode processing
  791.    * From: bjoerns@stud.cs.uit.no (Bjoern Stabell)
  792. ***************
  793. *** 141,151 ****
  794.           if (fseek(mailfile, current_header->offset, 0) != -1) {
  795.           sprintf(fname, "%semm.%d.%d", temp_dir, getpid(), getuid());
  796.           if ((fpout = fopen(fname, "w")) != NULL) {
  797. !             copy_message(NULL, fpout, FALSE, FALSE, FALSE, FALSE, FALSE);
  798.               sprintf(Cmd, "metamail -p -z -m Elm %s", fname);
  799.               Raw(OFF);
  800.               code = system_call(Cmd, SY_ENAB_SIGINT);
  801.               Raw(ON);
  802.               PutLine0(LINES,0, catgets(elm_msg_cat, ElmSet, ElmPressAnyKeyIndex,
  803.                    "Press any key to return to index."));
  804.               (void) ReadCh();
  805. --- 145,157 ----
  806.           if (fseek(mailfile, current_header->offset, 0) != -1) {
  807.           sprintf(fname, "%semm.%d.%d", temp_dir, getpid(), getuid());
  808.           if ((fpout = fopen(fname, "w")) != NULL) {
  809. !             copy_message("", fpout, FALSE, FALSE, FALSE, FALSE, FALSE);
  810. !             (void) fclose (fpout);
  811.               sprintf(Cmd, "metamail -p -z -m Elm %s", fname);
  812.               Raw(OFF);
  813.               code = system_call(Cmd, SY_ENAB_SIGINT);
  814.               Raw(ON);
  815. +             (void) unlink (fname);
  816.               PutLine0(LINES,0, catgets(elm_msg_cat, ElmSet, ElmPressAnyKeyIndex,
  817.                    "Press any key to return to index."));
  818.               (void) ReadCh();
  819.  
  820. Index: src/showmsg_c.c
  821. Prereq: 5.1
  822. *** ../elm2.4/src/showmsg_c.c    Sat Oct  3 18:59:18 1992
  823. --- src/showmsg_c.c    Sat Nov  7 14:37:23 1992
  824. ***************
  825. *** 1,8 ****
  826.   
  827. ! static char rcsid[] = "@(#)$Id: showmsg_c.c,v 5.1 1992/10/03 22:58:40 syd Exp $";
  828.   
  829.   /*******************************************************************************
  830. !  *  The Elm Mail System  -  $Revision: 5.1 $   $State: Exp $
  831.    *
  832.    *            Copyright (c) 1988-1992 USENET Community Trust
  833.    *            Copyright (c) 1986,1987 Dave Taylor
  834. --- 1,8 ----
  835.   
  836. ! static char rcsid[] = "@(#)$Id: showmsg_c.c,v 5.2 1992/11/07 19:37:21 syd Exp $";
  837.   
  838.   /*******************************************************************************
  839. !  *  The Elm Mail System  -  $Revision: 5.2 $   $State: Exp $
  840.    *
  841.    *            Copyright (c) 1988-1992 USENET Community Trust
  842.    *            Copyright (c) 1986,1987 Dave Taylor
  843. ***************
  844. *** 14,19 ****
  845. --- 14,24 ----
  846.    *
  847.    *******************************************************************************
  848.    * $Log: showmsg_c.c,v $
  849. +  * Revision 5.2  1992/11/07  19:37:21  syd
  850. +  * Enhanced printing support.  Added "-I" to readmsg to
  851. +  * suppress spurious diagnostic messages.
  852. +  * From: chip@chinacat.unicom.com (Chip Rosenthal)
  853. +  *
  854.    * Revision 5.1  1992/10/03  22:58:40  syd
  855.    * Initial checkin as of 2.4 Release at PL0
  856.    *
  857. ***************
  858. *** 195,202 ****
  859.   
  860.           case 'p' : put_cmd_name(catgets(elm_msg_cat, ElmSet, ElmPrintMessage,
  861.                   "Print message"), FALSE);
  862. !                print_msg();
  863. !                store_msg("Queued for printing.");
  864.                  break;
  865.   
  866.           case 'r' : put_cmd_name(catgets(elm_msg_cat, ElmSet, ElmReplyToMessage,
  867. --- 200,206 ----
  868.   
  869.           case 'p' : put_cmd_name(catgets(elm_msg_cat, ElmSet, ElmPrintMessage,
  870.                   "Print message"), FALSE);
  871. !                (void) print_msg(FALSE);
  872.                  break;
  873.   
  874.           case 'r' : put_cmd_name(catgets(elm_msg_cat, ElmSet, ElmReplyToMessage,
  875.  
  876. Index: src/syscall.c
  877. Prereq: 5.1
  878. *** ../elm2.4/src/syscall.c    Sat Oct  3 18:59:22 1992
  879. --- src/syscall.c    Sat Nov  7 15:45:53 1992
  880. ***************
  881. *** 1,8 ****
  882.   
  883. ! static char rcsid[] = "@(#)$Id: syscall.c,v 5.1 1992/10/03 22:58:40 syd Exp $";
  884.   
  885.   /*******************************************************************************
  886. !  *  The Elm Mail System  -  $Revision: 5.1 $   $State: Exp $
  887.    *
  888.    *            Copyright (c) 1988-1992 USENET Community Trust
  889.    *            Copyright (c) 1986,1987 Dave Taylor
  890. --- 1,8 ----
  891.   
  892. ! static char rcsid[] = "@(#)$Id: syscall.c,v 5.3 1992/11/07 20:45:39 syd Exp $";
  893.   
  894.   /*******************************************************************************
  895. !  *  The Elm Mail System  -  $Revision: 5.3 $   $State: Exp $
  896.    *
  897.    *            Copyright (c) 1988-1992 USENET Community Trust
  898.    *            Copyright (c) 1986,1987 Dave Taylor
  899. ***************
  900. *** 14,19 ****
  901. --- 14,28 ----
  902.    *
  903.    *******************************************************************************
  904.    * $Log: syscall.c,v $
  905. +  * Revision 5.3  1992/11/07  20:45:39  syd
  906. +  * add no tite flag on options that should not use ti/te
  907. +  * Hack by Syd
  908. +  *
  909. +  * Revision 5.2  1992/11/07  19:37:21  syd
  910. +  * Enhanced printing support.  Added "-I" to readmsg to
  911. +  * suppress spurious diagnostic messages.
  912. +  * From: chip@chinacat.unicom.com (Chip Rosenthal)
  913. +  *
  914.    * Revision 5.1  1992/10/03  22:58:40  syd
  915.    * Initial checkin as of 2.4 Release at PL0
  916.    *
  917. ***************
  918. *** 145,150 ****
  919. --- 154,162 ----
  920.   #endif
  921.       extern int errno;
  922.   
  923. +     /* flush any pending output */
  924. +     fflush(stdout);
  925.       /* figure out what shell we are using here */
  926.       sh = ((options & SY_USER_SHELL) ? shell : "/bin/sh");
  927.       dprint(2, (debugfile, "System Call: %s\n\t%s\n", sh, string));
  928. ***************
  929. *** 302,308 ****
  930.       if (cursor_control)
  931.         transmit_functions(OFF);
  932.       
  933. !     sprintf(buffer, "%s -h|%s", readmsg, command);
  934.       ret = system_call(buffer, SY_USER_SHELL|SY_ENAB_SIGINT|SY_DUMPSTATE);
  935.   
  936.       SetXYLocation(0, 40);    /* a location not near the next request, so an absolute is used */
  937. --- 314,320 ----
  938.       if (cursor_control)
  939.         transmit_functions(OFF);
  940.       
  941. !     sprintf(buffer, "%s -Ih|%s", readmsg, command);
  942.       ret = system_call(buffer, SY_USER_SHELL|SY_ENAB_SIGINT|SY_DUMPSTATE);
  943.   
  944.       SetXYLocation(0, 40);    /* a location not near the next request, so an absolute is used */
  945. ***************
  946. *** 319,371 ****
  947.       return(1);
  948.   }
  949.   
  950. ! print_msg()
  951.   {
  952. !     /** Print current message or tagged messages using 'printout' 
  953. !         variable.  Error message iff printout not defined! **/
  954.   
  955.       char buffer[SLEN], filename[SLEN], printbuffer[SLEN];
  956. !     register int  retcode;
  957.   
  958. !     if (strlen(printout) == 0) {
  959. !       error(catgets(elm_msg_cat, ElmSet, ElmDontKnowHowToPrint,
  960.           "Don't know how to print - option \"printmail\" undefined!"));
  961. !       return;
  962.       }
  963.   
  964. !     sprintf(filename,"%s%s%d", temp_dir, temp_print, getpid());
  965. !     if (in_string(printout, "%s"))
  966. !       sprintf(printbuffer, printout, filename);
  967. !     else
  968. !       sprintf(printbuffer, "%s %s", printout, filename);
  969.   
  970. !     sprintf(buffer,"(%s -p > %s; %s 2>&1) > /dev/null",
  971.           readmsg, filename, printbuffer);
  972. !     
  973. !     dprint(2, (debugfile, "Printing system call...\n"));
  974.   
  975. !       Centerline(LINES, catgets(elm_msg_cat, ElmSet, ElmQueuing, "Queuing..."));
  976.   
  977. !     if ((retcode = system_call(buffer, SY_DUMPSTATE)) == 0) {
  978. !       int tag_count, i;
  979. !       for (tag_count = 0, i = 0 ; i < message_count ; ++i)  {
  980. !         if (headers[i]->status & TAGGED)
  981. !           ++tag_count;
  982. !       }
  983. !       if (tag_count > 1)
  984. !         sprintf(buffer, catgets(elm_msg_cat, ElmSet, ElmMessagesQueuedToPrint,
  985. !         "Messages queued up to print."));
  986. !       else
  987. !         strcpy(buffer, catgets(elm_msg_cat, ElmSet, ElmMessageQueuedToPrint,
  988. !         "Message queued up to print."));
  989. !       Centerline(LINES, buffer);
  990.       }
  991. !     else
  992. !       error1(catgets(elm_msg_cat, ElmSet, ElmPrintoutFailed,
  993. !         "Printout failed with return code %d."), retcode);
  994.   
  995. !     unlink(filename);    /* remove da temp file! */
  996.   }
  997.   
  998.   
  999. --- 331,465 ----
  1000.       return(1);
  1001.   }
  1002.   
  1003. ! int print_msg(pause_on_scroll)
  1004. ! int pause_on_scroll;
  1005.   {
  1006. !     /*
  1007. !      * Print the tagged messages, or the current message if none are
  1008. !      * tagged.  Message(s) are passed passed into the command specified
  1009. !      * by "printout".  An error is given if "printout" is undefined.
  1010. !      *
  1011. !      * Printing will be done through a pipe so we can print the number
  1012. !      * of lines output.  This is used to determine whether the screen
  1013. !      * got trashed by the print command.  One limitation is that only
  1014. !      * stdout lines are counted, not stderr output.  A nonzero result
  1015. !      * is returned if we think enough output was generated to trash
  1016. !      * the display, a zero result indicates the display is probably
  1017. !      * alright.  Further, if the display is trashed and "pause_on_scroll"
  1018. !      * is true then we'll give a "hit any key" prompt before returning.
  1019. !      *
  1020. !      * This routine has two modes of behavior, depending upon whether
  1021. !      * there is a "%s" embedded in the "printout" string.  If there,
  1022. !      * the old Elm behavior is used (a temp file is used, all output
  1023. !      * from the print command is chucked out).  If there isn't a "%s"
  1024. !      * then the new behavior is used (message(s) piped right into
  1025. !      * print command, output is left attached to the terminal).
  1026. !      *
  1027. !      * The old behaviour is bizarre.  I hope we can ditch it someday.
  1028. !      */
  1029.   
  1030.       char buffer[SLEN], filename[SLEN], printbuffer[SLEN];
  1031. !     int  nlines, retcode, old_raw;
  1032. !     FILE *fp;
  1033.   
  1034. !     /*
  1035. !      * Make sure we know how to print.
  1036. !      */
  1037. !     if (printout[0] == '\0') {
  1038. !         error(catgets(elm_msg_cat, ElmSet, ElmPrintDontKnowHow,
  1039.           "Don't know how to print - option \"printmail\" undefined!"));
  1040. !         return 0;
  1041.       }
  1042.   
  1043. !     /*
  1044. !      * Temp file name used by "old style" printing.
  1045. !      */
  1046. !         sprintf(filename,"%s%s%d", temp_dir, temp_print, getpid());
  1047.   
  1048. !     /*
  1049. !      * Setup print command.  Select old or new behavior based
  1050. !      * upon the presence of "%s" in the print command string.
  1051. !      */
  1052. !     if (in_string(printout, "%s")) {
  1053. !         sprintf(printbuffer, printout, filename);
  1054. !         sprintf(buffer,"(%s -Ip > %s; %s 2>&1) > /dev/null",
  1055.           readmsg, filename, printbuffer);
  1056. !     } else {
  1057. !         sprintf(buffer,"%s -Ip | %s", readmsg, printout);
  1058. !     }
  1059.   
  1060. !     /*
  1061. !      * Create information for "readmsg" command.
  1062. !      */
  1063. !     if (create_folder_state_file() != 0)
  1064. !         return 0;
  1065.   
  1066. !     /*
  1067. !      * Put keyboard into normal state.
  1068. !      */
  1069. !     if ((old_raw = RawState()) == ON)
  1070. !         Raw(OFF | NO_TITE);
  1071. !     softkeys_off();
  1072. !     if (cursor_control)
  1073. !         transmit_functions(OFF);
  1074. !     /*
  1075. !      * Run the print command in a pipe and grab the output.
  1076. !      */
  1077. !     putchar('\n');
  1078. !     fflush(stdout);
  1079. !     nlines = 0;
  1080. !     if ((fp = popen(buffer, "r")) == NULL) {
  1081. !         error(catgets(elm_msg_cat, ElmSet, ElmPrintPipeFailed,
  1082. !         "Cannot create pipe to print command."));
  1083. !         goto done;
  1084. !     }
  1085. !     while (fgets(buffer, sizeof(buffer), fp) != NULL) {
  1086. !         fputs(buffer, stdout);
  1087. !         ++nlines;
  1088.       }
  1089. !     /*
  1090. !      * See if there were enough lines printed to trash the screen.
  1091. !      */
  1092. !     if (pause_on_scroll && nlines > 1) {
  1093. !         printf("\n%s ", catgets(elm_msg_cat, ElmSet, ElmPrintPressAKey,
  1094. !         "Press any key to continue:"));
  1095. !         fflush(stdout);
  1096. !         Raw(ON | NO_TITE);
  1097. !         (void) getchar();
  1098. !     }
  1099.   
  1100. !     /*
  1101. !      * Display a status message.
  1102. !      */
  1103. !     if ((retcode = pclose(fp)) == 0) {
  1104. !         error(catgets(elm_msg_cat, ElmSet, ElmPrintJobSpooled,
  1105. !         "Print job has been spooled."));
  1106. !     } else if ((retcode & 0xFF) == 0) {
  1107. !         error1(catgets(elm_msg_cat, ElmSet, ElmPrintFailCode,
  1108. !         "Printout failed with return code %d."), (retcode>>8));
  1109. !     } else {
  1110. !         error1(catgets(elm_msg_cat, ElmSet, ElmPrintFailStatus,
  1111. !         "Printout failed with status 0x%04x."), (retcode>>8));
  1112. !     }
  1113. !     /*
  1114. !      * Hack alert:  The only place we use "pause_on_scroll" false is when
  1115. !      * printing while reading a mail message.  This newline prevents the
  1116. !      * above message from being wiped out by the command prompt.
  1117. !      */
  1118. !     if (!pause_on_scroll)
  1119. !         putchar('\n');
  1120. ! done:
  1121. !     Raw(old_raw | NO_TITE);
  1122. !     softkeys_on();
  1123. !     if (cursor_control)
  1124. !         transmit_functions(ON);
  1125. !     (void) unlink(filename);
  1126. !     (void) remove_folder_state_file();
  1127. !     return (nlines > 1);
  1128.   }
  1129.   
  1130.   
  1131. ***************
  1132. *** 389,395 ****
  1133.   
  1134.       char buffer[SLEN];
  1135.   
  1136. !     Raw(OFF);
  1137.       ClearScreen();
  1138.       MoveCursor(LINES, 0);
  1139.       if(helpmsg)
  1140. --- 483,489 ----
  1141.   
  1142.       char buffer[SLEN];
  1143.   
  1144. !     Raw(OFF | NO_TITE);
  1145.       ClearScreen();
  1146.       MoveCursor(LINES, 0);
  1147.       if(helpmsg)
  1148. ***************
  1149. *** 419,425 ****
  1150.       }
  1151.       while(numlines--)
  1152.           printf("\n\r");
  1153. !     Raw(ON);
  1154.   }
  1155.   
  1156.   
  1157. --- 513,519 ----
  1158.       }
  1159.       while(numlines--)
  1160.           printf("\n\r");
  1161. !     Raw(ON | NO_TITE);
  1162.   }
  1163.   
  1164.   
  1165.  
  1166. Index: utils/arepdaem.c
  1167. Prereq: 5.4
  1168. *** ../elm2.4/utils/arepdaem.c    Tue Oct 27 11:17:32 1992
  1169. --- utils/arepdaem.c    Sat Nov  7 15:06:15 1992
  1170. ***************
  1171. *** 1,8 ****
  1172.   
  1173. ! static char rcsid[] = "@(#)$Id: arepdaem.c,v 5.4 1992/10/27 01:43:40 syd Exp $";
  1174.   
  1175.   /*******************************************************************************
  1176. !  *  The Elm Mail System  -  $Revision: 5.4 $   $State: Exp $
  1177.    *
  1178.    *             Copyright (c) 1988-1992 USENET Community Trust
  1179.    *             Copyright (c) 1986,1987 Dave Taylor
  1180. --- 1,8 ----
  1181.   
  1182. ! static char rcsid[] = "@(#)$Id: arepdaem.c,v 5.5 1992/11/07 20:05:52 syd Exp $";
  1183.   
  1184.   /*******************************************************************************
  1185. !  *  The Elm Mail System  -  $Revision: 5.5 $   $State: Exp $
  1186.    *
  1187.    *             Copyright (c) 1988-1992 USENET Community Trust
  1188.    *             Copyright (c) 1986,1987 Dave Taylor
  1189. ***************
  1190. *** 14,19 ****
  1191. --- 14,23 ----
  1192.    *
  1193.    *******************************************************************************
  1194.    * $Log: arepdaem.c,v $
  1195. +  * Revision 5.5  1992/11/07  20:05:52  syd
  1196. +  * change to use header_cmp to allow for linear white space around the colon
  1197. +  * From: Syd
  1198. +  *
  1199.    * Revision 5.4  1992/10/27  01:43:40  syd
  1200.    * Move posix_signal to lib directory
  1201.    * From: tom@osf.org
  1202. ***************
  1203. *** 384,399 ****
  1204.         if (first_word(buffer, "From ")) 
  1205.       in_header++;
  1206.         else if (in_header) {
  1207. !     if (first_word_nc(buffer, "From:"))
  1208. !       get_address_from("From:", buffer, from);
  1209. !     else if (first_word_nc(buffer, "Reply-To:"))
  1210. !       get_address_from("Reply_To:", buffer, from);
  1211.   #endif
  1212. !         else if (first_word_nc(buffer,"Subject:")) {
  1213.         remove_return(buffer);
  1214.         strcpy(subject, (char *) (buffer + 8));
  1215.           }
  1216. !         else if (first_word_nc(buffer,"X-Mailer: fastmail"))
  1217.         *sendit = 0;
  1218.           else if (strlen(buffer) == 1)
  1219.         done = 1;
  1220. --- 388,402 ----
  1221.         if (first_word(buffer, "From ")) 
  1222.       in_header++;
  1223.         else if (in_header) {
  1224. !     if (header_cmp(buffer, "From", NULL) ||
  1225. !         header_cmp(buffer, "Reply-To", NULL))
  1226. !       get_address_from(buffer, from);
  1227.   #endif
  1228. !         else if (header_cmp(buffer,"Subject", NULL)) {
  1229.         remove_return(buffer);
  1230.         strcpy(subject, (char *) (buffer + 8));
  1231.           }
  1232. !         else if (header_cmp(buffer,"X-Mailer", "fastmail"))
  1233.         *sendit = 0;
  1234.           else if (strlen(buffer) == 1)
  1235.         done = 1;
  1236.  
  1237. Index: utils/from.c
  1238. Prereq: 5.1
  1239. *** ../elm2.4/utils/from.c    Sat Oct  3 20:46:59 1992
  1240. --- utils/from.c    Sat Nov  7 16:03:34 1992
  1241. ***************
  1242. *** 1,8 ****
  1243.   
  1244. ! static char rcsid[] = "@(#)$Id: from.c,v 5.1 1992/10/04 00:46:45 syd Exp $";
  1245.   
  1246.   /*******************************************************************************
  1247. !  *  The Elm Mail System  -  $Revision: 5.1 $   $State: Exp $
  1248.    *
  1249.    *             Copyright (c) 1988-1992 USENET Community Trust
  1250.    *             Copyright (c) 1986,1987 Dave Taylor
  1251. --- 1,8 ----
  1252.   
  1253. ! static char rcsid[] = "@(#)$Id: from.c,v 5.3 1992/11/07 21:03:33 syd Exp $";
  1254.   
  1255.   /*******************************************************************************
  1256. !  *  The Elm Mail System  -  $Revision: 5.3 $   $State: Exp $
  1257.    *
  1258.    *             Copyright (c) 1988-1992 USENET Community Trust
  1259.    *             Copyright (c) 1986,1987 Dave Taylor
  1260. ***************
  1261. *** 14,19 ****
  1262. --- 14,26 ----
  1263.    *
  1264.    *******************************************************************************
  1265.    * $Log: from.c,v $
  1266. +  * Revision 5.3  1992/11/07  21:03:33  syd
  1267. +  * fix typo
  1268. +  *
  1269. +  * Revision 5.2  1992/11/07  20:05:52  syd
  1270. +  * change to use header_cmp to allow for linear white space around the colon
  1271. +  * From: Syd
  1272. +  *
  1273.    * Revision 5.1  1992/10/04  00:46:45  syd
  1274.    * Initial checkin as of 2.4 Release at PL0
  1275.    *
  1276. ***************
  1277. *** 438,456 ****
  1278.   #endif /* MMDF */
  1279.           if (first_word(buffer,">From ")) 
  1280.             forwarded(buffer, from_whom); /* return address */
  1281. !         else if (first_word_nc(buffer,"Subject:") ||
  1282. !              first_word_nc(buffer,"Re:")) {
  1283.             if (subject[0] == '\0') {
  1284.               remove_header_keyword(buffer);
  1285.           strcpy(subject, buffer);
  1286.             }
  1287.           }
  1288. !         else if (first_word_nc(buffer,"From:") ||
  1289. !             first_word_nc(buffer, ">From:"))
  1290.             parse_arpa_who(buffer, from_whom, FALSE);
  1291. !         else if (first_word_nc(buffer,"To:"))
  1292. !           figure_out_addressee(buffer+3, to_whom);
  1293. !         else if (first_word_nc(buffer,"Status:")) {
  1294.             remove_header_keyword(buffer);
  1295.             switch (*buffer) {
  1296.           case 'N': status = NEW_MSG;    break;
  1297. --- 445,463 ----
  1298.   #endif /* MMDF */
  1299.           if (first_word(buffer,">From ")) 
  1300.             forwarded(buffer, from_whom); /* return address */
  1301. !         else if (header_cmp(buffer,"Subject", NULL) ||
  1302. !              header_cmp(buffer,"Re", NULL)) {
  1303.             if (subject[0] == '\0') {
  1304.               remove_header_keyword(buffer);
  1305.           strcpy(subject, buffer);
  1306.             }
  1307.           }
  1308. !         else if (header_cmp(buffer,"From", NULL) ||
  1309. !              header_cmp(buffer, ">From", NULL))
  1310.             parse_arpa_who(buffer, from_whom, FALSE);
  1311. !         else if (header_cmp(buffer, "To", NULL))
  1312. !           figure_out_addressee(index(buffer, ':') + 1, to_whom);
  1313. !         else if (header_cmp(buffer, "Status", NULL)) {
  1314.             remove_header_keyword(buffer);
  1315.             switch (*buffer) {
  1316.           case 'N': status = NEW_MSG;    break;
  1317.  
  1318. Index: utils/newmail.c
  1319. Prereq: 5.4
  1320. *** ../elm2.4/utils/newmail.c    Tue Oct 27 11:17:32 1992
  1321. --- utils/newmail.c    Sat Nov  7 15:06:16 1992
  1322. ***************
  1323. *** 1,8 ****
  1324.   
  1325. ! static char rcsid[] = "@(#)$Id: newmail.c,v 5.4 1992/10/27 01:43:40 syd Exp $";
  1326.   
  1327.   /*******************************************************************************
  1328. !  *  The Elm Mail System  -  $Revision: 5.4 $   $State: Exp $
  1329.    *
  1330.    *             Copyright (c) 1988-1992 USENET Community Trust
  1331.    *             Copyright (c) 1986,1987 Dave Taylor
  1332. --- 1,8 ----
  1333.   
  1334. ! static char rcsid[] = "@(#)$Id: newmail.c,v 5.5 1992/11/07 20:05:52 syd Exp $";
  1335.   
  1336.   /*******************************************************************************
  1337. !  *  The Elm Mail System  -  $Revision: 5.5 $   $State: Exp $
  1338.    *
  1339.    *             Copyright (c) 1988-1992 USENET Community Trust
  1340.    *             Copyright (c) 1986,1987 Dave Taylor
  1341. ***************
  1342. *** 14,19 ****
  1343. --- 14,23 ----
  1344.    *
  1345.    *******************************************************************************
  1346.    * $Log: newmail.c,v $
  1347. +  * Revision 5.5  1992/11/07  20:05:52  syd
  1348. +  * change to use header_cmp to allow for linear white space around the colon
  1349. +  * From: Syd
  1350. +  *
  1351.    * Revision 5.4  1992/10/27  01:43:40  syd
  1352.    * Move posix_signal to lib directory
  1353.    * From: tom@osf.org
  1354. ***************
  1355. *** 409,431 ****
  1356.   #endif /* MMDF */
  1357.           if (first_word_nc(buffer,">From")) 
  1358.             forwarded(buffer, from_whom); /* return address */
  1359. !         else if (first_word_nc(buffer,"Subject:") ||
  1360. !              first_word_nc(buffer,"Re:")) {
  1361.             if (! subj++) {
  1362.               remove_header_keyword(buffer);
  1363.           strcpy(subject, buffer);
  1364.             }
  1365.           }
  1366. !         else if (first_word_nc(buffer, "Priority:") ||
  1367. !              first_word_nc(buffer, "Importance: 2")) {
  1368. !            if (!(first_word_nc(buffer, "priority: normal") ||
  1369. !              first_word_nc(buffer, "priority: non-urgent")))
  1370.                 priority++;
  1371.              }
  1372. !         else if (first_word_nc(buffer,"From:")) 
  1373.             parse_arpa_who(buffer, from_whom, 0);
  1374. !         else if (first_word_nc(buffer,"To:"))
  1375. !           figure_out_addressee(buffer+3, to_whom);
  1376.           else if (buffer[0] == LINEFEED) {
  1377.             in_header = 0;    /* in body of message! */
  1378.   #ifdef MMDF
  1379. --- 413,435 ----
  1380.   #endif /* MMDF */
  1381.           if (first_word_nc(buffer,">From")) 
  1382.             forwarded(buffer, from_whom); /* return address */
  1383. !         else if (header_cmp(buffer,"Subject", NULL) ||
  1384. !              header_cmp(buffer,"Re", NULL)) {
  1385.             if (! subj++) {
  1386.               remove_header_keyword(buffer);
  1387.           strcpy(subject, buffer);
  1388.             }
  1389.           }
  1390. !         else if (header_cmp(buffer, "Priority", NULL) ||
  1391. !              header_cmp(buffer, "Importance", "2")) {
  1392. !            if (!(header_cmp(buffer, "priority", "normal") ||
  1393. !              header_cmp(buffer, "priority", "non-urgent")))
  1394.                 priority++;
  1395.              }
  1396. !         else if (header_cmp(buffer,"From", NULL)) 
  1397.             parse_arpa_who(buffer, from_whom, 0);
  1398. !         else if (header_cmp(buffer, "To", NULL))
  1399. !           figure_out_addressee(index(buffer, ':') + 1, to_whom);
  1400.           else if (buffer[0] == LINEFEED) {
  1401.             in_header = 0;    /* in body of message! */
  1402.   #ifdef MMDF
  1403.  
  1404. Index: utils/readmsg.c
  1405. Prereq: 5.1
  1406. *** ../elm2.4/utils/readmsg.c    Sat Oct  3 20:47:01 1992
  1407. --- utils/readmsg.c    Sat Nov  7 14:37:25 1992
  1408. ***************
  1409. *** 1,8 ****
  1410.   
  1411. ! static char rcsid[] = "@(#)$Id: readmsg.c,v 5.1 1992/10/04 00:46:45 syd Exp $";
  1412.   
  1413.   /*******************************************************************************
  1414. !  *  The Elm Mail System  -  $Revision: 5.1 $   $State: Exp $
  1415.    *
  1416.    *            Copyright (c) 1988-1992 USENET Community Trust
  1417.    *            Copyright (c) 1986,1987 Dave Taylor
  1418. --- 1,8 ----
  1419.   
  1420. ! static char rcsid[] = "@(#)$Id: readmsg.c,v 5.2 1992/11/07 19:37:21 syd Exp $";
  1421.   
  1422.   /*******************************************************************************
  1423. !  *  The Elm Mail System  -  $Revision: 5.2 $   $State: Exp $
  1424.    *
  1425.    *            Copyright (c) 1988-1992 USENET Community Trust
  1426.    *            Copyright (c) 1986,1987 Dave Taylor
  1427. ***************
  1428. *** 14,19 ****
  1429. --- 14,24 ----
  1430.    *
  1431.    *******************************************************************************
  1432.    * $Log: readmsg.c,v $
  1433. +  * Revision 5.2  1992/11/07  19:37:21  syd
  1434. +  * Enhanced printing support.  Added "-I" to readmsg to
  1435. +  * suppress spurious diagnostic messages.
  1436. +  * From: chip@chinacat.unicom.com (Chip Rosenthal)
  1437. +  *
  1438.    * Revision 5.1  1992/10/04  00:46:45  syd
  1439.    * Initial checkin as of 2.4 Release at PL0
  1440.    *
  1441. ***************
  1442. *** 60,65 ****
  1443. --- 65,81 ----
  1444.               sel == $ -- selects last message in folder
  1445.               sel == 0 -- selects last message in folder
  1446.   
  1447. +     The undocumented "-I" option is a kludge to deal with an Elm race
  1448. +     condition.  The problem is that Elm does piping/printing/etc. by
  1449. +     running "readmsg|command" and placing the mail message selection
  1450. +     into a folder state file.  However, if the "command" portion of
  1451. +     the pipeline craps out, Elm might regain control before "readmsg"
  1452. +     completes.  The first thing Elm does is unlink the folder state
  1453. +     file.  Thus "readmsg" can't figure out what to do -- there is no
  1454. +     state file or command line args to select a message.  In this
  1455. +     case, "readmsg" normally gives a usage diagnostic message.  The
  1456. +     "-I" option says to ignore this condition and silently terminate.
  1457.   **/
  1458.   
  1459.   #include "elmutil.h"
  1460. ***************
  1461. *** 131,136 ****
  1462. --- 147,153 ----
  1463.       int hdr_disp_level;        /* amount of headers to show        */
  1464.       int do_page_breaks;        /* true to FORMFEED between messages    */
  1465.       int do_all_matches;        /* true to show all mssgs which match pat*/
  1466. +     int ign_no_request;        /* terminate if no actions requested    */
  1467.       int exit_status;        /* normally zero, set to one on error    */
  1468.       FILE *fp;            /* file stream for opened folder    */
  1469.       long idx;            /* seek offset within folder        */
  1470. ***************
  1471. *** 155,160 ****
  1472. --- 172,178 ----
  1473.       hdr_disp_level = WEED;    /* only display interesting headers    */
  1474.       do_page_breaks = FALSE;    /* suppress formfeed between mssgs    */
  1475.       do_all_matches = FALSE;    /* only show 1st mssg which matches pat    */
  1476. +     ign_no_request = FALSE;    /* no action requested is an error    */
  1477.       exit_status = 0;        /* will set nonzero on error        */
  1478.   
  1479.       /* see if an external folder state file exists */
  1480. ***************
  1481. *** 167,173 ****
  1482.       fstate_valid = (fstate.folder_name != NULL);
  1483.   
  1484.       /* crack the command line */
  1485. !     while ((i = getopt(argc, argv, "anhf:p")) != EOF) {
  1486.       switch (i) {
  1487.       case 'a' :
  1488.           do_all_matches = TRUE;
  1489. --- 185,191 ----
  1490.       fstate_valid = (fstate.folder_name != NULL);
  1491.   
  1492.       /* crack the command line */
  1493. !     while ((i = getopt(argc, argv, "anhf:pI")) != EOF) {
  1494.       switch (i) {
  1495.       case 'a' :
  1496.           do_all_matches = TRUE;
  1497. ***************
  1498. *** 192,197 ****
  1499. --- 210,218 ----
  1500.       case 'p' :
  1501.           do_page_breaks = TRUE;
  1502.           break;
  1503. +     case 'I':
  1504. +         ign_no_request = TRUE;
  1505. +         break;
  1506.       default:
  1507.           usage_error();
  1508.       }
  1509. ***************
  1510. *** 236,241 ****
  1511. --- 257,264 ----
  1512.       if (argc == optind) {
  1513.       if (!fstate_valid) {
  1514.           /* no applicable state file or it didn't select anything */
  1515. +         if (ign_no_request)
  1516. +             exit(0);
  1517.           usage_error();
  1518.       }
  1519.       if (folder_size < 1) {
  1520.  
  1521. Index: Patchlist
  1522. *** ../elm2.4/Patchlist    Tue Oct 27 11:17:22 1992
  1523. --- Patchlist    Sat Nov  7 15:55:04 1992
  1524. ***************
  1525. *** 1,4 ****
  1526. --- 1,98 ----
  1527.   =========================================================
  1528. + Patch Set - Patches 7 and 8 : Sat Nov  7 15:54:44 EST 1992
  1529. + Elm 2.4PL6 -> Elm 2.4PL8
  1530. + Add some tolerance for incorrect Content-Length header (fixes bug where
  1531. + Elm would combine two messages if content-length header was incorrect.
  1532. + Still has problem if incorrect content-length exactly matches multiple
  1533. + messages)
  1534. + From: Syd
  1535. + Change Makefile in doc to use -f as some shells don't have -x in test
  1536. + From: Syd
  1537. + The first is that when doing a summary, macros are expanded when printing the
  1538. + rule. IMHO they should be printed as with the -r option (i.e. %t is
  1539. + printed as "<time>" and so on).
  1540. + The second one is that the summary printed "applied n time" regardless of
  1541. + the value of n, not "applied n times" when n > 1.
  1542. + From: Jan Djarv <Jan.Djarv@sa.erisoft.se>
  1543. + There is no need to write out the MIME-Version header in subparts
  1544. + From: Klaus Steinberger <Klaus.Steinberger@Physik.Uni-Muenchen.DE>
  1545. + fix null dereferences from patch 5
  1546. + From: Jukka Ukkonen <ukkonen@csc.fi>
  1547. + Fix where elm duplicates the entry's from the global elm.rc.
  1548. + It will however still copy the global weedout headers to your local
  1549. + elmrc if they where not already in it.
  1550. + From: janw@fwi.uva.nl (Jan Wortelboer)
  1551. + another typo (2.4.6 Ref.guide)
  1552. + From: David.W.Tamkin@gagme.chi.il.us (David W. Tamkin)
  1553. + comments should be allowed anywhere in the alias file.
  1554. + From: "Robert L. Howard" <robert.howard@matd.gatech.edu>
  1555. + Symbol change for AIX370
  1556. + From: uri@watson.ibm.com
  1557. + Fix redefinition complaint by SCO 3.2v2.0.
  1558. + From: chip@chinacat.unicom.com (Chip Rosenthal)
  1559. + Enhanced printing support.  Added "-I" to readmsg to
  1560. + suppress spurious diagnostic messages.
  1561. + From: chip@chinacat.unicom.com (Chip Rosenthal)
  1562. + These small typos stopped me from making forms, so here is a patch.
  1563. + From: andrew.mcparland@rd.eng.bbc.co.uk (Andrew McParland)
  1564. + Add a hack to not use ti/te on list folders and do print
  1565. + From: Syd
  1566. + New header parsing routine header_cmp to allow for linear
  1567. + white space around the : in headers
  1568. + From: Syd
  1569. + =========================================================
  1570. + Patch Set - Patch 6 : Mon Nov  2 15:52:00 EST 1992
  1571. + Elm 2.4PL5 -> Elm 2.4PL6
  1572. + Things I found in doc/Ref.guide looking over patches 4 & 5:
  1573. + From: dwolfe@pffft.sps.mot.com (Dave Wolfe)
  1574. + More changes to folder creation confirmation
  1575. + From: Larry Philps <larryp@sco.COM>
  1576. + fix a bug in the forms reply caused by the Cc: buffer not being
  1577. + cleared.  If one has sent mail just prior to replying to the form and
  1578. + specified a Cc:  address, the form reply is also sent to those Cc:
  1579. + address(es).
  1580. + From: dwolfe@pffft.sps.mot.com (Dave Wolfe)
  1581. + Add missing MAKE variable in doc/Makefile.SH
  1582. + From: Syd
  1583. + it invokes metamail (the pseudo is because "text" isn't a legal Content-Type).
  1584. + in src/mime.c notplain() tries to check for text but fails because it should
  1585. + look for "text\n" not "text".
  1586. + From: Jan Djarv <Jan.Djarv@sa.erisoft.se>
  1587. + Use copy_message in mime shows to get encode processing
  1588. + From: bjoerns@stud.cs.uit.no (Bjoern Stabell)
  1589. + Corrections to Unix date parsing and time zone storage
  1590. + From: eotto@hvlpa.att.com
  1591. + Prevent index underflow when wildchar is in first three chars of string
  1592. + From: Syd via note from gwh@dogmatix.inmos.co.uk
  1593. + =========================================================
  1594.   Patch Set - Patches 4 and 5 : Sat Oct 24 22:48:00 EDT 1992
  1595.   Elm 2.4PL3 -> Elm 2.4PL5
  1596.   
  1597.  
  1598. -- 
  1599. ========================================================================
  1600. Sydney S. Weinstein, CDP, CCP          Elm Coordinator - Current 2.4PL06
  1601. Datacomp Systems, Inc.                 Projected 3.0 Release: ??? ?,1994
  1602. syd@DSI.COM or dsinc!syd      Voice: (215) 947-9900, FAX: (215) 938-0235
  1603.