Xref: utzoo comp.sources.bugs:1699 comp.mail.elm:1427 Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!csd4.milw.wisc.edu!dogie.macc.wisc.edu!uwvax!rutgers!att!homxb!opus!ki4pv!cdin-1!dsinc!syd From: syd@dsinc.DSI.COM (Syd Weinstein) Newsgroups: comp.sources.bugs,comp.mail.elm Subject: elm 2.2 Patch #6 Keywords: elm patch Message-ID: <127@dsinc.DSI.COM> Date: 3 May 89 13:37:51 GMT Followup-To: comp.mail.elm Organization: Datacomp Systems, Inc., Huntingdon Valley, PA Lines: 513 Summary: This is an official patch for elm 2.2 system. Please apply it. Priority: MEDIUM When you convert from printf to curses, you must remember that it treats \n as a RAW \n, and that you must also send \r. Either that or make sure the _col variable gets reset to the proper column. From: jbuck@epimass.EPI.COM (Joe Buck) Need to go leave raw mode before doing shell escapes and system() calls. These changes of mode were accidentally removed when the builtin editor was fixed by making it operate in raw mode. From: Rob Bernardo Remove extra definition of whitespace from src/string2.c Allow setvbuf not to exist, silently. It is for efficiency only. Make termio routine code depend on TERMIO symbol not BSD symbol in src/init.c The function remove_possible_trailing_spaces could 'spin backwards' over a great deal more than its input.... consider the case that the input contained nothing but whitespace characters. Also, the original nulls out every trailing whitespace character, not just the first. From: Randy Wright Added missing routine name to usage call in newmail. Fix: From rn, say "| patch -p -N -d DIR", where DIR is your elm source directory. Outside of rn, say "cd DIR; patch -p -N 60) fprintf(fd, "\nMail from %s\n\tabout %s\n", from, subject); Index: src/editmsg.c Prereq: 2.15 *** ../elm2.2/src/editmsg.c Wed Apr 26 12:12:05 1989 --- src/editmsg.c Wed May 3 08:54:40 1989 *************** *** 1,8 **** ! static char rcsid[] = "@(#)$Id: editmsg.c,v 2.15 89/04/26 11:39:10 syd Exp $"; /******************************************************************************* ! * The Elm Mail System - $Revision: 2.15 $ $State: Exp $ * * Copyright (c) 1986, 1987 Dave Taylor * Copyright (c) 1988, 1989 USENET Community Trust --- 1,8 ---- ! static char rcsid[] = "@(#)$Id: editmsg.c,v 2.17 89/05/03 08:54:38 syd Exp $"; /******************************************************************************* ! * The Elm Mail System - $Revision: 2.17 $ $State: Exp $ * * Copyright (c) 1986, 1987 Dave Taylor * Copyright (c) 1988, 1989 USENET Community Trust *************** *** 14,19 **** --- 14,28 ---- * ******************************************************************************* * $Log: editmsg.c,v $ + * Revision 2.17 89/05/03 08:54:38 syd + * Need to go leave raw mode before doing shell escapes and system() calls. + * These changes of mode were accidentally removed when the builtin editor + * was fixed by making it operate in raw mode. + * From: Rob Bernardo + * + * Revision 2.16 89/05/03 08:53:40 syd + * Make it use cr/lf on output + * * Revision 2.15 89/04/26 11:39:10 syd * Fix the pattern-matching feature of ~f/~m in the builtin editor * and fix the documentation for the builtin editor in the Reference Guide. *************** *** 71,77 **** instead... **/ char buffer[SLEN]; ! register int stat, return_value = 0; buffer[0] = '\0'; --- 80,86 ---- instead... **/ char buffer[SLEN]; ! register int stat, return_value = 0, old_raw; buffer[0] = '\0'; *************** *** 88,93 **** --- 97,105 ---- chown(filename, userid, groupid); /* file was owned by root! */ + if (( old_raw = RawState()) == ON) + Raw(OFF); + if (cursor_control) transmit_functions(OFF); /* function keys are local */ *************** *** 103,108 **** --- 115,123 ---- return_value = 1; } + if (old_raw == ON) + Raw(ON); + if (cursor_control) transmit_functions(ON); /* function keys are local */ *************** *** 134,140 **** FILE *edit_fd; char buffer[SLEN], editor_name[SLEN], buf[SLEN]; ! int edit_interrupt(); #ifdef VOIDSIG void (*oldint)(), (*oldquit)(); #else --- 149,155 ---- FILE *edit_fd; char buffer[SLEN], editor_name[SLEN], buf[SLEN]; ! int edit_interrupt(), old_raw; #ifdef VOIDSIG void (*oldint)(), (*oldquit)(); #else *************** *** 278,284 **** --- 293,303 ---- else { sprintf(buf, " > %s.%d 2>&1", temp_edit, getpid()); strcat(buffer, buf); + if (( old_raw = RawState()) == ON) + Raw(OFF); (void) system_call((char *) buffer+2, SH, TRUE); + if (old_raw == ON) + Raw(ON); sprintf(buffer, "~r %s.%d", temp_edit, getpid()); read_in_file(edit_fd, (char *) buffer + 3, 0); (void) unlink((char *) buffer+3); *************** *** 286,296 **** --- 305,319 ---- goto more_input; case '!' : NewLine(); + if (( old_raw = RawState()) == ON) + Raw(OFF); if (strlen(buffer) < 3) (void) system_call(shell, USER_SHELL, TRUE); else (void) system_call((char *) buffer+2, USER_SHELL, TRUE); + if (old_raw == ON) + Raw(ON); Write_to_screen(SIMPLE_CONTINUE, 0); goto more_input; *************** *** 489,496 **** Write_to_screen("Bcc: %s\n\r", 1, format_long(bcc, 5)); Write_to_screen("Subject: %s\n\r\n\r", 1, subject); ! while (fgets(buffer, SLEN, edit_fd) != NULL) Write_to_screen(buffer, 0); fclose(edit_fd); --- 512,521 ---- Write_to_screen("Bcc: %s\n\r", 1, format_long(bcc, 5)); Write_to_screen("Subject: %s\n\r\n\r", 1, subject); ! while (fgets(buffer, SLEN, edit_fd) != NULL) { Write_to_screen(buffer, 0); + CarriageReturn(); + } fclose(edit_fd); Index: src/init.c Prereq: 2.26 *** ../elm2.2/src/init.c Mon Apr 24 20:57:34 1989 --- src/init.c Wed May 3 09:13:14 1989 *************** *** 1,8 **** ! static char rcsid[] = "@(#)$Id: init.c,v 2.26 89/04/24 20:47:04 syd Exp $"; /******************************************************************************* ! * The Elm Mail System - $Revision: 2.26 $ $State: Exp $ * * Copyright (c) 1986, 1987 Dave Taylor * Copyright (c) 1988, 1989 USENET Community Trust --- 1,8 ---- ! static char rcsid[] = "@(#)$Id: init.c,v 2.27 89/05/03 09:13:06 syd Exp $"; /******************************************************************************* ! * The Elm Mail System - $Revision: 2.27 $ $State: Exp $ * * Copyright (c) 1986, 1987 Dave Taylor * Copyright (c) 1988, 1989 USENET Community Trust *************** *** 14,19 **** --- 14,22 ---- * ******************************************************************************* * $Log: init.c,v $ + * Revision 2.27 89/05/03 09:13:06 syd + * Make termio defines depend on termio + * * Revision 2.26 89/04/24 20:47:04 syd * Change includes for consistency * From: Jim Brown *************** *** 372,384 **** ERASE and KILL for use in the input routine. The meaning of the characters are (dare I say it?) fairly obvious... **/ ! #ifdef BSD struct sgttyb term_buffer; # define TCGETA TIOCGETP - #else - struct termio term_buffer; #endif if (ioctl(STANDARD_INPUT, TCGETA, &term_buffer) == -1) { --- 375,387 ---- ERASE and KILL for use in the input routine. The meaning of the characters are (dare I say it?) fairly obvious... **/ ! #ifdef TERMIO ! struct termio term_buffer; ! #else struct sgttyb term_buffer; # define TCGETA TIOCGETP #endif if (ioctl(STANDARD_INPUT, TCGETA, &term_buffer) == -1) { *************** *** 390,401 **** kill_line = ctrl('U'); } else { ! #ifdef BSD ! backspace = term_buffer.sg_erase; ! kill_line = term_buffer.sg_kill; ! #else backspace = term_buffer.c_cc[VERASE]; kill_line = term_buffer.c_cc[VKILL]; #endif } } --- 393,404 ---- kill_line = ctrl('U'); } else { ! #ifdef TERMIO backspace = term_buffer.c_cc[VERASE]; kill_line = term_buffer.c_cc[VKILL]; + #else + backspace = term_buffer.sg_erase; + kill_line = term_buffer.sg_kill; #endif } } Index: src/string2.c Prereq: 2.5 *** ../elm2.2/src/string2.c Mon Apr 24 20:27:43 1989 --- src/string2.c Wed May 3 09:18:38 1989 *************** *** 1,8 **** ! static char rcsid[] = "@(#)$Id: string2.c,v 2.5 89/04/24 20:25:30 syd Exp $"; /******************************************************************************* ! * The Elm Mail System - $Revision: 2.5 $ $State: Exp $ * * Copyright (c) 1986, 1987 Dave Taylor * Copyright (c) 1988, 1989 USENET Community Trust --- 1,8 ---- ! static char rcsid[] = "@(#)$Id: string2.c,v 2.7 89/05/03 09:18:24 syd Exp $"; /******************************************************************************* ! * The Elm Mail System - $Revision: 2.7 $ $State: Exp $ * * Copyright (c) 1986, 1987 Dave Taylor * Copyright (c) 1988, 1989 USENET Community Trust *************** *** 14,19 **** --- 14,25 ---- * ******************************************************************************* * $Log: string2.c,v $ + * Revision 2.7 89/05/03 09:18:24 syd + * Fix ability to write before start of string + * + * Revision 2.6 89/05/03 09:00:24 syd + * Remove extra definition of whitespace + * * Revision 2.5 89/04/24 20:25:30 syd * Move shift_lower * *************** *** 43,51 **** #undef toupper #endif - - #define whitespace(c) (c == ' ' || c == '\t') - char *shift_lower(string) char *string; { --- 49,54 ---- *************** *** 182,189 **** register int i; ! for (i=strlen(string)-1; whitespace(string[i]); i--) ! /** spin backwards **/ string[i+1] = '\0'; /* note that even in the worst case when there are no trailing spaces at all, we'll simply --- 185,192 ---- register int i; ! for ( i = strlen(string); --i >= 0 && whitespace(string[i]); ) ! /** spin backwards, semicolon intented **/ ; string[i+1] = '\0'; /* note that even in the worst case when there are no trailing spaces at all, we'll simply Index: utils/newmail.c Prereq: 2.18 *** ../elm2.2/utils/newmail.c Wed Apr 26 12:12:08 1989 --- utils/newmail.c Wed May 3 09:23:51 1989 *************** *** 1,8 **** ! static char rcsid[] = "@(#)$Id: newmail.c,v 2.18 89/04/26 12:05:52 syd Exp $"; /******************************************************************************* ! * The Elm Mail System - $Revision: 2.18 $ $State: Exp $ * * Copyright (c) 1986, 1987 Dave Taylor * Copyright (c) 1988, 1989 USENET Community Trust --- 1,8 ---- ! static char rcsid[] = "@(#)$Id: newmail.c,v 2.19 89/05/03 09:23:45 syd Exp $"; /******************************************************************************* ! * The Elm Mail System - $Revision: 2.19 $ $State: Exp $ * * Copyright (c) 1986, 1987 Dave Taylor * Copyright (c) 1988, 1989 USENET Community Trust *************** *** 14,19 **** --- 14,22 ---- * ******************************************************************************* * $Log: newmail.c,v $ + * Revision 2.19 89/05/03 09:23:45 syd + * fix missing name + * * Revision 2.18 89/04/26 12:05:52 syd * add better from_whom controls * *************** *** 156,162 **** case 'd' : debug++; break; case 'i' : interval_time = atoi(optarg); break; case 'w' : in_window = 1; break; ! default : usage(); exit(1); } } --- 159,165 ---- case 'd' : debug++; break; case 'i' : interval_time = atoi(optarg); break; case 'w' : in_window = 1; break; ! default : usage(argv[0]); exit(1); } } *************** *** 686,697 **** return( (char *) return_value); } ! usage() { /* print a nice friendly usage message */ fprintf(stderr, ! "\nUsage: %s [-d] [-i interval] [-w] {folders}\n"); fprintf(stderr, "\nWhere:\n"); fprintf(stderr, " -d\tturns on debugging output\n"); fprintf(stderr, --- 689,701 ---- return( (char *) return_value); } ! usage(name) ! char *name; { /* print a nice friendly usage message */ fprintf(stderr, ! "\nUsage: %s [-d] [-i interval] [-w] {folders}\n", name); fprintf(stderr, "\nWhere:\n"); fprintf(stderr, " -d\tturns on debugging output\n"); fprintf(stderr, -- ===================================================================== Sydney S. Weinstein, CDP, CCP Elm Coordinator Datacomp Systems, Inc. Voice: (215) 947-9900 syd@DSI.COM or {bpa,vu-vlsi}!dsinc!syd FAX: (215) 938-0235