Subject: v15i087: Mush (mail user's shell) upgrade kit, version 6.3, Part03/04 Newsgroups: comp.sources.unix Sender: sources Approved: rsalz@uunet.UU.NET Submitted-by: dheller@cory.Berkeley.EDU (Dan Heller) Posting-number: Volume 15, Issue 87 Archive-name: mush6.3kit/part03 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'Diffs.6.3.b' <<'END_OF_FILE' X! * message list if we hit the end. otherwise, stop at the end of the list. X */ X next_msg() X { X--- 23,31 ---- X } X X /* X! * loop thru all msgs starting with current_msg and find next undeleted and X! * unsaved message. If the variable "wrap" is set, wrap to the beginning of X! * the message list if we hit the end. otherwise, stop at the end of the list. X */ X next_msg() X { X*************** X*** 40,46 **** X return current_msg = msg_cnt - 1; X else X n = -1; /* increments to 0 in loop */ X! else if (isoff(msg[n].m_flags, DELETE)) X return current_msg = n; X return current_msg = 0; X } X--- 40,47 ---- X return current_msg = msg_cnt - 1; X else X n = -1; /* increments to 0 in loop */ X! else if (isoff(msg[n].m_flags, DELETE) && X! isoff(msg[n].m_flags, SAVED)) X return current_msg = n; X return current_msg = 0; X } X*************** X*** 286,291 **** X--- 287,293 ---- X case 'n' : turnon(newflag, UNREAD), turnoff(newflag, OLD); X when 'd' : turnon(newflag, DELETE); X when 'p' : turnon(newflag, PRESERVE); X+ when 's' : turnon(newflag, SAVED); X when 'u' : turnon(newflag, UNREAD); /* fall thru! */ X case 'o' : turnon(newflag, OLD); X when 'r' : X*************** X*** 313,318 **** X--- 315,322 ---- X wprint(" PRESERVE"); X if (ison(msg[i].m_flags, REPLIED)) X wprint(" REPLIED"); X+ if (ison(msg[i].m_flags, SAVED)) X+ wprint(" SAVED"); X if (ison(msg[i].m_flags, UPDATE_STATUS)) X wprint(" UPDATE_STATUS"); X wprint("\n"); X*************** X*** 342,347 **** X--- 346,352 ---- X { X static FILE *pp; X static int cnt; X+ static u_long save_echo_flag; X X #ifdef SUNTOOL X if (istool) { X*************** X*** 352,360 **** X #endif /* SUNTOOL */ X if (start_pager) { X turnon(glob_flags, IGN_SIGS); X! if (!buf) X pp = stdout; X! else { X echo_on(); X if (!(pp = popen(buf, "w"))) X error(buf); X--- 357,371 ---- X #endif /* SUNTOOL */ X if (start_pager) { X turnon(glob_flags, IGN_SIGS); X! if (!buf) { X! /* internal pager */ X! save_echo_flag = ison(glob_flags, ECHO_FLAG); X pp = stdout; X! if (save_echo_flag) { X! turnoff(glob_flags, ECHO_FLAG); X! echo_off(); X! } X! } else { X echo_on(); X if (!(pp = popen(buf, "w"))) X error(buf); X*************** X*** 364,370 **** X if (pp && pp != stdout) X pclose(pp); X pp = NULL_FILE; X! echo_off(); X turnoff(glob_flags, IGN_SIGS); X } else if (pp != stdout) X return fputs(buf, pp); /* returns EOF if user exited pager */ X--- 375,385 ---- X if (pp && pp != stdout) X pclose(pp); X pp = NULL_FILE; X! if (save_echo_flag) { X! echo_on(); X! turnon(glob_flags, ECHO_FLAG); X! } else X! echo_off(); X turnoff(glob_flags, IGN_SIGS); X } else if (pp != stdout) X return fputs(buf, pp); /* returns EOF if user exited pager */ X*** OLD/msgs.c Sat May 21 10:27:30 1988 X--- msgs.c Tue Jul 5 22:53:26 1988 X*************** X*** 1,23 **** X /* @(#)msgs.c (c) copyright 10/18/86 (Dan Heller) */ X X! #include "mush.h" X! #ifdef SYSV X! #ifndef USG X! #include X! #else /* USG */ X #include X #endif /* USG */ X! #endif /* SYSV */ X X! lock_file(filename, fd) X char *filename; X { X #ifdef SYSV X #ifndef USG X! (void) locking(fd, LK_LOCK, 0); /* xenix */ X #else X /* if unable to lock, tell them */ X! if (Access(filename, W_OK) || lockf(fd, F_TLOCK, 0)) /* system-v */ X return -1; X #endif /* USG */ X #else X--- 1,63 ---- X /* @(#)msgs.c (c) copyright 10/18/86 (Dan Heller) */ X X! #ifdef USG X #include X #endif /* USG */ X! #include "mush.h" X! #if defined(SYSV) && !defined(USG) X! #include X! #endif /* SYSV && !USG */ X X! extern int sgid; X! X! #ifdef DOT_LOCK X! dot_lock(filename) X char *filename; X { X+ char buf[MAXPATHLEN]; X+ int lockfd, cnt = 0; X+ SIGRET (*oldint)(), (*oldquit)(); X+ X+ setgid(sgid); X+ (void) sprintf(buf, "%s.lock", filename); X+ on_intr(); X+ while ((lockfd = open(buf, O_CREAT|O_WRONLY|O_EXCL, 0600)) == -1) { X+ if (errno != EEXIST) { X+ error("unable to lock %s", filename); X+ break; X+ } X+ if (cnt++ == 0) X+ print("%s already locked, waiting", filename); X+ else X+ print_more("."); X+ sleep(1); X+ if (ison(glob_flags, WAS_INTR)) { X+ print_more("\nAborted.\n"); X+ break; X+ } X+ } X+ off_intr(); X+ if (lockfd != -1) { X+ if (cnt) X+ print("done.\n"); X+ (void) close(lockfd); X+ } X+ setgid(getgid()); X+ return lockfd == -1? -1 : 0; X+ } X+ #endif /* DOT_LOCK */ X+ X+ lock_file(filename, fp) X+ char *filename; X+ FILE *fp; X+ { X+ int fd = fileno(fp); X #ifdef SYSV X #ifndef USG X! (void) locking(fd, LK_LOCK, 0); /* old xenix (sys III) */ X #else X /* if unable to lock, tell them */ X! if (Access(filename, W_OK) || lockf(fd, F_LOCK, 0L)) /* system-v */ X return -1; X #endif /* USG */ X #else X*************** X*** 31,39 **** X return 0; X } X X! close_lock(fp) X FILE *fp; X { X #ifdef SYSV X #ifndef USG X locking(fileno(fp), LK_UNLCK, 0); X--- 71,87 ---- X return 0; X } X X! void X! close_lock(filename, fp) X! char *filename; X FILE *fp; X { X+ #ifdef DOT_LOCK X+ char buf[MAXPATHLEN]; X+ setgid(sgid); X+ (void) unlink(sprintf(buf, "%s.lock", filename)); X+ setgid(getgid()); X+ #endif /* DOT_LOCK */ X #ifdef SYSV X #ifndef USG X locking(fileno(fp), LK_UNLCK, 0); X*************** X*** 65,77 **** X return; X } X set_isread(n); X! if (ison(flg, TOP)) { X turnon(flg, NO_HEADER); X print("Top of "), turnon(glob_flags, CONT_PRNT); X } X X if (!istool && isoff(flg, NO_PAGE) && X! crt < msg[n].m_lines && isoff(flg, TOP)) { X char buf[32], *pager = do_set(set_options, "pager"); X if (!pager) X pager = DEF_PAGER; X--- 113,125 ---- X return; X } X set_isread(n); X! if (ison(flg, M_TOP)) { X turnon(flg, NO_HEADER); X print("Top of "), turnon(glob_flags, CONT_PRNT); X } X X if (!istool && isoff(flg, NO_PAGE) && X! crt < msg[n].m_lines && isoff(flg, M_TOP)) { X char buf[32], *pager = do_set(set_options, "pager"); X if (!pager) X pager = DEF_PAGER; X*************** X*** 105,111 **** X char line[BUFSIZ], *show_hdrs = NULL; X X still_more = 0; X! if (ison(flags, TOP)) { X register char *p = do_set(set_options, "toplines"); X top = (p)? atoi(p) : crt; X } X--- 153,159 ---- X char line[BUFSIZ], *show_hdrs = NULL; X X still_more = 0; X! if (ison(flags, M_TOP)) { X register char *p = do_set(set_options, "toplines"); X top = (p)? atoi(p) : crt; X } X*************** X*** 184,189 **** X--- 232,239 ---- X if (isoff(msg[n].m_flags, UNREAD) && X isoff(msg[n].m_flags, PRESERVE)) X *p++ = 'R'; X+ if (ison(msg[n].m_flags, SAVED)) X+ *p++ = 'S'; X if (ison(msg[n].m_flags, REPLIED)) X *p++ = 'r'; X *p++ = '\n', *p = 0; X*************** X*** 222,228 **** X } X } X } X! if (!on_hdr && ison(flags, TOP) && !--top) X break; X if (isoff(flags, NO_HEADER)) { X /* note that function returns the number of lines */ X--- 272,278 ---- X } X } X } X! if (!on_hdr && ison(flags, M_TOP) && !--top) X break; X if (isoff(flags, NO_HEADER)) { X /* note that function returns the number of lines */ X*************** X*** 261,268 **** X } X X /* get mail from whatever the mailfile points to. open a tempfile for X! * appending, then close it and reopen it for read-only. some systems X! * have flakey read/write access. X */ X void X getmail() X--- 311,317 ---- X } X X /* get mail from whatever the mailfile points to. open a tempfile for X! * appending, then close it and reopen it for read-only. X */ X void X getmail() X*************** X*** 272,286 **** X long ftell(), bytes; X char line[BUFSIZ]; X X! #ifdef SYSV X! /* for SVID systems to lock, the file must be open for read/write */ X! if (isoff(glob_flags, READ_ONLY)) X! mail_fp = fopen(mailfile, "r+"); X! else X! #endif /* SYSV */ X! mail_fp = fopen(mailfile, "r"); X! X! if (!mail_fp) { X error("Unable to open %s", mailfile); X return; X } X--- 321,327 ---- X long ftell(), bytes; X char line[BUFSIZ]; X X! if (!(mail_fp = fopen(mailfile, "r"))) { X error("Unable to open %s", mailfile); X return; X } X*************** X*** 305,313 **** X } else if (msg_cnt) X (void) fseek(tmpf, msg[msg_cnt-1].m_offset+msg[msg_cnt-1].m_size,L_SET); X X- if (isoff(glob_flags, READ_ONLY) && lock_file(mailfile, fileno(mail_fp))) X- error("WARNING: unable to lock %s", mailfile); X- X (void) fseek(mail_fp, ftell(tmpf), L_SET); X X #ifdef MSG_SEPARATOR X--- 346,351 ---- X*************** X*** 345,351 **** X if (isoff(glob_flags, READ_ONLY)) { X fputs(line, tmpf); X if (errno == ENOSPC) X! fs_error(); X } X /* we've read the "From " line, now read the rest of X * the message headers till we get to a blank line. X--- 383,389 ---- X if (isoff(glob_flags, READ_ONLY)) { X fputs(line, tmpf); X if (errno == ENOSPC) X! fs_error(mailfile, mail_fp); X } X /* we've read the "From " line, now read the rest of X * the message headers till we get to a blank line. X*************** X*** 358,363 **** X--- 396,402 ---- X switch(*p) { X when 'R': turnoff(msg[msg_cnt].m_flags, UNREAD); X when 'P': turnon(msg[msg_cnt].m_flags, UNREAD); X+ when 'S': turnon(msg[msg_cnt].m_flags, SAVED); X when 'r': turnon(msg[msg_cnt].m_flags, REPLIED); X otherwise : X if (ison(glob_flags, WARNING)) X*************** X*** 368,374 **** X if (isoff(glob_flags, READ_ONLY)) { X fputs(line, tmpf); X if (errno == ENOSPC) X! fs_error(); X } X } X msg_cnt++, get_status = 1; X--- 407,413 ---- X if (isoff(glob_flags, READ_ONLY)) { X fputs(line, tmpf); X if (errno == ENOSPC) X! fs_error(mailfile, mail_fp); X } X } X msg_cnt++, get_status = 1; X*************** X*** 377,383 **** X if (isoff(glob_flags, READ_ONLY)) { X fputs(line, tmpf); X if (errno == ENOSPC) X! fs_error(); X } else X (void) fseek(tmpf, ftell(mail_fp), L_SET); X } X--- 416,422 ---- X if (isoff(glob_flags, READ_ONLY)) { X fputs(line, tmpf); X if (errno == ENOSPC) X! fs_error(mailfile, mail_fp); X } else X (void) fseek(tmpf, ftell(mail_fp), L_SET); X } X*************** X*** 387,409 **** X msg[msg_cnt-1].m_lines = lines; X } X X- close_lock(mail_fp); X- X- /* I've had problems with sys-v opening a file for read/write. I'd X- * try fgets after a seek to an arbitrary place and get NULL. "w+" X- * could be broken (XENIX), so play it safe anyway. X- */ X if (isoff(glob_flags, READ_ONLY)) { X fclose(tmpf); X if (!(tmpf = fopen(tempfile, "r"))) X error("unable to open %s for reading", tempfile); X } X } X X! fs_error() X { X error("WARNING: unable to write to \"%s\"", tempfile); X print("Read the manual on what to do on full file systems.\n"); X cleanup(0); X } X X--- 426,447 ---- X msg[msg_cnt-1].m_lines = lines; X } X X if (isoff(glob_flags, READ_ONLY)) { X fclose(tmpf); X if (!(tmpf = fopen(tempfile, "r"))) X error("unable to open %s for reading", tempfile); X } X+ fclose(mail_fp); X } X X! void X! fs_error(mailfile, mail_fp) X! char *mailfile; X! FILE *mail_fp; X { X error("WARNING: unable to write to \"%s\"", tempfile); X print("Read the manual on what to do on full file systems.\n"); X+ close_lock(mailfile, mail_fp); X cleanup(0); X } X X*************** X*** 413,423 **** X */ X copyback() X { X! register int new = 0, i, j=0, k=0; X register long flg = 0; X! register FILE *mbox = NULL_FILE, *mail_fp; X char *mbox_file, action = 0; X! int hold = 0, delete_it = 0, dont_unlink = FALSE; X X #ifdef SUNTOOL X if (istool) { X--- 451,461 ---- X */ X copyback() X { X! register int new = 0, i=0, j=0, k=0; X register long flg = 0; X! register FILE *mbox = NULL_FILE, *mail_fp = NULL_FILE; X char *mbox_file, action = 0; X! int hold = 0, delete_it = 0, dont_unlink = FALSE, keepsave; X X #ifdef SUNTOOL X if (istool) { X*************** X*** 467,472 **** X--- 505,513 ---- X error("Unable to write to %s", mbox_file); X } X } X+ #ifdef DOT_LOCK X+ if ((i = dot_lock(mailfile)) == 0) X+ #endif /* DOT_LOCK */ X /* reopen the mailfile; set umask accordingly */ X { X int omask = umask(077); X*************** X*** 474,491 **** X (void) umask(omask); X if (!mail_fp) { X error("Unable to rewrite %s", mailfile); X return 0; X } X } X! turnon(glob_flags, IGN_SIGS); X! print("Updating \"%s\"", mailfile); X! X! if (lock_file(mailfile, fileno(mail_fp))) X error("WARNING: unable to lock %s", mailfile); X X turnon(flg, UPDATE_STATUS); X turnon(flg, NO_IGNORE); X X for (i = 0; i < msg_cnt; i++) X /* check to see if message is marked for deletion or, if read and not X * preserved, delete it if autodelete is set. Otherwise, save the X--- 515,544 ---- X (void) umask(omask); X if (!mail_fp) { X error("Unable to rewrite %s", mailfile); X+ if (mbox) X+ fclose(mbox); X return 0; X } X } X! if (i != 0 || lock_file(mailfile, mail_fp) == -1) { X! #ifndef DOT_LOCK X error("WARNING: unable to lock %s", mailfile); X+ #endif /* DOT_LOCK */ X+ if (mail_fp) X+ close_lock(mailfile, mail_fp); X+ if (mbox) X+ fclose(mbox); X+ return 0; X+ } X X+ print("Updating \"%s\"", mailfile); X+ X turnon(flg, UPDATE_STATUS); X turnon(flg, NO_IGNORE); X+ turnon(glob_flags, IGN_SIGS); X X+ keepsave = !!do_set(set_options, "keepsave"); X+ X for (i = 0; i < msg_cnt; i++) X /* check to see if message is marked for deletion or, if read and not X * preserved, delete it if autodelete is set. Otherwise, save the X*************** X*** 492,498 **** X * message in the spool file if hold is set. If all fails, save in mbox. X */ X if (ison(msg[i].m_flags, DELETE) X! || isoff(msg[i].m_flags, UNREAD) && isoff(msg[i].m_flags, PRESERVE) X && delete_it) { X Debug("%s %d", X (action!='d')? "\ndeleting message:" : "", i+1), action = 'd'; X--- 545,553 ---- X * message in the spool file if hold is set. If all fails, save in mbox. X */ X if (ison(msg[i].m_flags, DELETE) X! || ison(msg[i].m_flags, SAVED) && !keepsave && X! isoff(msg[i].m_flags, PRESERVE) X! || isoff(msg[i].m_flags, UNREAD) && isoff(msg[i].m_flags, PRESERVE) X && delete_it) { X Debug("%s %d", X (action!='d')? "\ndeleting message:" : "", i+1), action = 'd'; X*************** X*** 524,531 **** X } X Debug("\n%s", mailfile); X X! close_lock(mail_fp); X X if (mbox) X fclose(mbox); X if (j) { X--- 579,594 ---- X } X Debug("\n%s", mailfile); X X! close_lock(mailfile, mail_fp); X X+ #ifdef SUNTOOL X+ if (istool) { X+ mail_timer.it_value.tv_sec = time_out; X+ setitimer(ITIMER_REAL, &mail_timer, NULL); X+ } X+ #endif /* SUNTOOL */ X+ X+ /* some users like to have zero length folders for frequent usage */ X if (mbox) X fclose(mbox); X if (j) { X*************** X*** 534,540 **** X if (!strcmp(mailfile, spoolfile) && utime(mailfile, times)) X error("utime"); X print_more(": saved %d message%s\n", j, (j==1)? NO_STRING: "s"); X! } else if (strcmp(mailfile, spoolfile) && !dont_unlink && !new) X if (unlink(mailfile)) X turnon(glob_flags, CONT_PRNT), error(": cannot remove"); X else X--- 597,604 ---- X if (!strcmp(mailfile, spoolfile) && utime(mailfile, times)) X error("utime"); X print_more(": saved %d message%s\n", j, (j==1)? NO_STRING: "s"); X! } else if (strcmp(mailfile, spoolfile) && !dont_unlink && !new && X! !do_set(set_options, "save_empty")) X if (unlink(mailfile)) X turnon(glob_flags, CONT_PRNT), error(": cannot remove"); X else X*************** X*** 542,557 **** X else X print_more(": empty\n"); X if (k) X! print("saved %d message%s in %s\n",k,(k==1)? NO_STRING: "s",mbox_file); X if (new && !istool) X print("New mail has arrived.\n"); X turnoff(glob_flags, IGN_SIGS); X! #ifdef SUNTOOL X! if (istool) { X! mail_timer.it_value.tv_sec = time_out; X! setitimer(ITIMER_REAL, &mail_timer, NULL); X! } X! #endif /* SUNTOOL */ X return 1; X } X X--- 606,617 ---- X else X print_more(": empty\n"); X if (k) X! print("saved %d message%s in %s\n",k,(k==1)? NO_STRING:"s", mbox_file); X if (new && !istool) X print("New mail has arrived.\n"); X+ X turnoff(glob_flags, IGN_SIGS); X! X return 1; X } X X*** OLD/mush.1 Thu May 12 21:14:45 1988 X--- mush.1 Tue Jun 28 21:38:26 1988 X*************** X*** 167,178 **** X a database of electronic mail messages under the X .I UNIX X environment. X! There are three user interfaces which allow the user to interact with X .I Mush. X The default interface is the conventional tty-based line mode X similar to command line interpreters such as X .I csh X! as well as other mailers, such as University of California, Berkeley's, X .I Mail X and Bell Lab's System V X .I mailx X--- 167,178 ---- X a database of electronic mail messages under the X .I UNIX X environment. X! There are three user interfaces that allow the user to interact with X .I Mush. X The default interface is the conventional tty-based line mode X similar to command line interpreters such as X .I csh X! as well as other mailers, such as University of California, Berkeley's X .I Mail X and Bell Lab's System V X .I mailx X*************** X*** 204,210 **** X See the corresponding sections for more information on the user X interface desired. X Most of this manual deals with commands, variables X! and actions which are common to all three interfaces although X some attention is paid to individual characteristics of each interface. X .PP X The following command line arguments are understood by X--- 204,210 ---- X See the corresponding sections for more information on the user X interface desired. X Most of this manual deals with commands, variables X! and actions that are common to all three interfaces although X some attention is paid to individual characteristics of each interface. X .PP X The following command line arguments are understood by X*************** X*** 215,221 **** X .TP X \-c cc-list X The list of Carbon Copy recipients is set on the command line. X! If more than one address is specified, the entire list should be encased in X quotes. X This applies when sending mail only. X If you are entering the shell, curses mode, or the tool mode, this option is X--- 215,221 ---- X .TP X \-c cc-list X The list of Carbon Copy recipients is set on the command line. X! If more than one address is specified, the entire list should be enclosed in X quotes. X This applies when sending mail only. X If you are entering the shell, curses mode, or the tool mode, this option is X*************** X*** 229,239 **** X .TP X \-F[!] filename X This file is the same type as the initialization file read on startup X! (see INITIALIZATION) with the exception that commands which manipulate X or search messages may be given. Normally, such commands may not exist X in the initialization file since that file is read before the folder X is scanned. This file is read after the folder is scanned, so commands X! which change folders are allowed. X The optional `!' argument prevents the shell from running after the file X has been sourced. Otherwise, X .I Mush X--- 229,239 ---- X .TP X \-F[!] filename X This file is the same type as the initialization file read on startup X! (see INITIALIZATION) with the exception that commands that manipulate X or search messages may be given. Normally, such commands may not exist X in the initialization file since that file is read before the folder X is scanned. This file is read after the folder is scanned, so commands X! that change folders are allowed. X The optional `!' argument prevents the shell from running after the file X has been sourced. Otherwise, X .I Mush X*************** X*** 269,275 **** X .I Mush X commands. X See the INITIALIZATION section for information on how to X! write scripts which deal with mail. X Note that this flag is different from the \*Qignore\*U flag of UCB Mail. X .TP X \-N X--- 269,275 ---- X .I Mush X commands. X See the INITIALIZATION section for information on how to X! write scripts that deal with mail. X Note that this flag is different from the \*Qignore\*U flag of UCB Mail. X .TP X \-N X*************** X*** 304,310 **** X \-s subject X The subject is set on the command line using this flag. X If the subject has X! any spaces or tabs, the entire subject should be encased in quotes. X This applies when sending mail only. X If you are entering the shell, X curses mode, or the tool mode, this option is ignored. X--- 304,310 ---- X \-s subject X The subject is set on the command line using this flag. X If the subject has X! any spaces or tabs, the entire subject should be enclosed in quotes. X This applies when sending mail only. X If you are entering the shell, X curses mode, or the tool mode, this option is ignored. X*************** X*** 395,401 **** X .I Mush X has command line history reminiscent of X .IR csh , X! commands which use UUCP's `!' character for user-host and host-host X separation should be escaped (preceded by a backslash). X This is not necessary in the initialization file (.mushrc) because history X referencing is ignored while these files are being sourced. X--- 395,401 ---- X .I Mush X has command line history reminiscent of X .IR csh , X! commands that use UUCP's `!' character for user-host and host-host X separation should be escaped (preceded by a backslash). X This is not necessary in the initialization file (.mushrc) because history X referencing is ignored while these files are being sourced. X*************** X*** 415,421 **** X .PP X .BR "Command Line Aliases" . X .PP X! Command aliases are different than mail aliases in that they are used X to expand to commands. X The usage of command line aliases is similar to that supplied by X .IR csh . X--- 415,421 ---- X .PP X .BR "Command Line Aliases" . X .PP X! Command aliases are different from mail aliases in that they are used X to expand to commands. X The usage of command line aliases is similar to that supplied by X .IR csh . X*************** X*** 428,434 **** X one command to be used as input to the next command in the pipeline. X However, the output of commands is not the \*Qtext\*U that is returned X (as it is in X! .IR csh ), X but the messages that are affected. X .PP X .BR Help . X--- 428,434 ---- X one command to be used as input to the next command in the pipeline. X However, the output of commands is not the \*Qtext\*U that is returned X (as it is in X! .IR csh ) X but the messages that are affected. X .PP X .BR Help . X*************** X*** 489,495 **** X The default system initialization file is read first and then the X user's personal initialization file is read. X The system default file X! is set up by the system administrator and may contain commands which X should be set system-wide. X .PP X The user's file is determined by first looking for the environment variable X--- 489,495 ---- X The default system initialization file is read first and then the X user's personal initialization file is read. X The system default file X! is set up by the system administrator and may contain commands that X should be set system-wide. X .PP X The user's file is determined by first looking for the environment variable X*************** X*** 497,503 **** X If that file isn't found, then the file X .I .mushrc X is searched for in the home directory of the user. X! If that file cannot be found, it will attempt to read the file, X .I .mailrc X from the same directory. X Finally, if that file cannot be read, no initialization is done X--- 497,503 ---- X If that file isn't found, then the file X .I .mushrc X is searched for in the home directory of the user. X! If that file cannot be found, it will attempt to read the file X .I .mailrc X from the same directory. X Finally, if that file cannot be read, no initialization is done X*************** X*** 550,556 **** X It may be anywhere on a line in the file. X When that character is encountered, X processing of that line is discontinued to the end of the line. X! If the `#' is encased in quotes (single or double), then it is not X considered a comment. X Examples: X .sp X--- 550,556 ---- X It may be anywhere on a line in the file. X When that character is encountered, X processing of that line is discontinued to the end of the line. X! If the `#' is enclosed in quotes (single or double), then it is not X considered a comment. X Examples: X .sp X*************** X*** 580,586 **** X The statements associated with an \*Qif\*U expression are never on the same X line with the conditional. X .PP X! Conditional expressions understood include the internal variables, X .IR istool , X .IR iscurses , X .IR hdrs_only , X--- 580,586 ---- X The statements associated with an \*Qif\*U expression are never on the same X line with the conditional. X .PP X! Conditional expressions understood include the internal variables X .IR istool , X .IR iscurses , X .IR hdrs_only , X*************** X*** 613,619 **** X If \-i is specified, the value for X .I redirect X will be set to false. X! These are internal variables whose values can not be referenced using the X \*Q$variable\*U method of variable expansion. X .PP X The `!' operator may be used to negate expressions, thus, X--- 613,619 ---- X If \-i is specified, the value for X .I redirect X will be set to false. X! These are internal variables whose values cannot be referenced using the X \*Q$variable\*U method of variable expansion. X .PP X The `!' operator may be used to negate expressions, thus, X*************** X*** 666,673 **** X Like other interactive commands, the X .B curses X command itself should never be called from an initialization file. X! Doing so will cause terminal settings to be set incorrectly and unpredictable X! results from there. X See the CURSES INTERFACE section for configuring your X environment so you enter curses mode each time you run the shell. X .PP X--- 666,673 ---- X Like other interactive commands, the X .B curses X command itself should never be called from an initialization file. X! Doing so will cause terminal settings to be set incorrectly and cause X! unpredictable results from there. X See the CURSES INTERFACE section for configuring your X environment so you enter curses mode each time you run the shell. X .PP X*************** X*** 698,703 **** X--- 698,731 ---- X .I less X normally fails to function correctly X for the terminal type \*Qadm3a\*U so we don't use it. X+ .sp X+ Also supported in \*Qif\*U expressions are the test flags \*Q-e\*U X+ and \*Q-z\*U. These flags test to see if a file exists (\*Q-e\*U) or X+ if it is zero-length (\*Q-z\*U). X+ .sp X+ .nf X+ .in +2 X+ set mbox = ~/Mail/mbox X+ set newfolder = /usr/spool/mail/$USER X+ if -z $newfolder X+ .ti +4 X+ set newfolder = $mbox X+ endif X+ if -e $newfolder X+ .ti +4 X+ folder $newfolder X+ else X+ .ti +4 X+ quit X+ endif X+ .fi X+ .sp X+ This sets a new variable called \fBnewfolder\fR to the the user's spool X+ mailbox (the system mailbox). It then tests to see if it is zero length, X+ and if it is, resets the variable to the value of the user's \fBmbox\fR X+ variable (mbox must be set here). It then tests to see if the new folder X+ exists. If it does, it changes folders to the new folder. If it doesn't X+ exist, the program exits (via \fBquit\fR). X .PP X After sourcing the initialization file, X .I Mush X*************** X*** 712,718 **** X variable set, then when the current folder's messages have all been read, X the messages are sorted according to the value of the X variable (see the sort entry under the VARIABLES heading for more information). X! Each message has a number of message header lines which contain information X about whom the mail is from, the subject of the message, the date it was X received, and other information about the letter. X This information is then compiled into a one-line summary for X--- 740,746 ---- X variable set, then when the current folder's messages have all been read, X the messages are sorted according to the value of the X variable (see the sort entry under the VARIABLES heading for more information). X! Each message has a number of message header lines that contain information X about whom the mail is from, the subject of the message, the date it was X received, and other information about the letter. X This information is then compiled into a one-line summary for X*************** X*** 747,753 **** X the group \*Qunix-wizards\*U (of which the user is an elite X member) and save them in the file $folder/wizmail. X Last, the folder will be updated, removing all deleted mail X! (saved mail may be marked as deleted), X and the folder is reread and sorted according to the date of the messages. X .SH "GENERAL USAGE" X Because there are three different interfaces available to the user, X--- 775,781 ---- X the group \*Qunix-wizards\*U (of which the user is an elite X member) and save them in the file $folder/wizmail. X Last, the folder will be updated, removing all deleted mail X! (saved mail may be marked as deleted) X and the folder is reread and sorted according to the date of the messages. X .SH "GENERAL USAGE" X Because there are three different interfaces available to the user, X*************** X*** 754,760 **** X the tty characteristics (backspace, kill-word, kill-line, redraw line) X are simulated identically in all interfaces. X When the user has to type something, the 4.2BSD style of tty driver interface X! is simulated whether you're in the window system, the curses mode, the tty-line X mode, and even on System-V machines. X This means that backspacing causes a X backspace-space-backspace effect (erasing the character backspaced over). X--- 782,789 ---- X the tty characteristics (backspace, kill-word, kill-line, redraw line) X are simulated identically in all interfaces. X When the user has to type something, the 4.2BSD style of tty driver interface X! is simulated whether you're in the window system, the curses mode, or X! the tty-line X mode, and even on System-V machines. X This means that backspacing causes a X backspace-space-backspace effect (erasing the character backspaced over). X*************** X*** 767,788 **** X If the message is marked as deleted, then use the X .B undelete X command supplied by the interface you are using. X! To display a message in line mode, specify a message to be displayed using X .BR print , X .BR type , X .BR p , X .BR t , X! or by typing the message number, that message will be printed on the screen. X .PP X In curses mode, move the cursor over the message you want and type X a `t' or `p' to read the message. X! The user may \*Qbind\*U other keys to call X! the function which displays messages if `t' and `p' are uncomfortable. X .PP X In the graphics mode, move the mouse over the message you wish to X be displayed and select the LEFT mouse button. X! If the message you want is not visible (in the header subwindow), you may type X! in the message subwindow the number of the message and hit return. X That message number will be displayed. X .PP X In the line or curses mode, if the message has more lines than the variable X--- 796,817 ---- X If the message is marked as deleted, then use the X .B undelete X command supplied by the interface you are using. X! To display a message in line mode, specify the message using X .BR print , X .BR type , X .BR p , X .BR t , X! or type a message number to display that message on the screen. X .PP X In curses mode, move the cursor over the message you want and type X a `t' or `p' to read the message. X! You may \*Qbind\*U other keys to call X! the function that displays messages if `t' and `p' are uncomfortable. X .PP X In the graphics mode, move the mouse over the message you wish to X be displayed and select the LEFT mouse button. X! If the message you want is not visible (in the header subwindow), you may type, X! in the message subwindow, the number of the message and hit return. X That message number will be displayed. X .PP X In the line or curses mode, if the message has more lines than the variable X*************** X*** 842,848 **** X For instance, typing \*Q~i\*U (alone on a line) will place a copy X of the \*Qcurrent message\*U into your message body. X It will not include the message headers of the message, just the body of text X! which composes the message. X .PP X Available X .BR "tilde escapes" : X--- 871,877 ---- X For instance, typing \*Q~i\*U (alone on a line) will place a copy X of the \*Qcurrent message\*U into your message body. X It will not include the message headers of the message, just the body of text X! that comprises the message. X .PP X Available X .BR "tilde escapes" : X*************** X*** 862,868 **** X Save the contents of the letter to \*Qdead.letter\*U X (unless the `!' is specified) and then clear the message buffer; the user X remains in editing mode. X! If the variable, X .B nosave X is set, then `!' need not be specified. X .TP X--- 891,897 ---- X Save the contents of the letter to \*Qdead.letter\*U X (unless the `!' is specified) and then clear the message buffer; the user X remains in editing mode. X! If the variable X .B nosave X is set, then `!' need not be specified. X .TP X*************** X*** 913,923 **** X .TP X ~S[!] X Include [don't include] signature at end of message. X! The variables, X .B autosign X and X .B autosign2 X! describes the file or string to append to the message. X See the VARIABLES section for more information on these variables. X .TP X ~s [subject] X--- 942,952 ---- X .TP X ~S[!] X Include [don't include] signature at end of message. X! The variables X .B autosign X and X .B autosign2 X! describe the file or string to append to the message. X See the VARIABLES section for more information on these variables. X .TP X ~s [subject] X*************** X*** 974,980 **** X Run the X .I Mush X command specified by \*Qcommand\*U. X! You may not run any command which sends mail. X It is inadvisable to change folders at this time X since the current message list may be corrupted, but the action is X allowed nonetheless to provide flexibility for experienced users. X--- 1003,1009 ---- X Run the X .I Mush X command specified by \*Qcommand\*U. X! You may not run any command that sends mail. X It is inadvisable to change folders at this time X since the current message list may be corrupted, but the action is X allowed nonetheless to provide flexibility for experienced users. X*************** X*** 993,999 **** X .SH "LINE-MODE INTERFACE" X In the line-mode, the user is given a prompt to which commands are issued X and arguments are passed to commands. X! When the user types at the prompt, each line is parsed and words (or, X arguments) are separated into an array of strings. X This array, also called an X .IR "argument vector" , X--- 1022,1028 ---- X .SH "LINE-MODE INTERFACE" X In the line-mode, the user is given a prompt to which commands are issued X and arguments are passed to commands. X! When the user types at the prompt, each line is parsed and words (or X arguments) are separated into an array of strings. X This array, also called an X .IR "argument vector" , X*************** X*** 1036,1042 **** X is used in the same manner as in X .IR csh . X There is a limited implementation of history modification; X! supported are the argument selectors which reference X command line arguments and \*Q:p\*U (echo, but don't execute the command). X .sp X Examples: X--- 1065,1071 ---- X is used in the same manner as in X .IR csh . X There is a limited implementation of history modification; X! supported are the argument selectors that reference X command line arguments and \*Q:p\*U (echo, but don't execute the command). X .sp X Examples: X*************** X*** 1104,1110 **** X in a message. X A X .B "message list" X! is defined as the set of messages which the user specifies in a command or X the messages a command affects after it is through executing. X When one command is piped to another, the effect is that the second command X will consider only those messages affected by first command. X--- 1133,1139 ---- X in a message. X A X .B "message list" X! is defined as the set of messages that the user specifies in a command or X the messages a command affects after it is through executing. X When one command is piped to another, the effect is that the second command X will consider only those messages affected by first command. X*************** X*** 1129,1135 **** X .ti +2 X headers :o | delete X .sp X! Delete's all old (already read) mail. X .PP X Because action is taken on mail messages, not files, X metacharacters such as `*' and `?' are not expanded to file names as X--- 1158,1164 ---- X .ti +2 X headers :o | delete X .sp X! Deletes all old (already read) mail. X .PP X Because action is taken on mail messages, not files, X metacharacters such as `*' and `?' are not expanded to file names as X*************** X*** 1140,1146 **** X commands take X .I "message lists" X as arguments (a list references one or messages) to take action upon. X! To reference message numbers, X .I Mush X understands the following special syntax: X .sp X--- 1169,1175 ---- X commands take X .I "message lists" X as arguments (a list references one or messages) to take action upon. X! When referencing message numbers, X .I Mush X understands the following special syntax: X .sp X*************** X*** 1200,1206 **** X .PP X If X .I unix X! it is not set, or if the command could not be found in the user's PATH X environment, a message will be printed indicating that the command was X not found. X .PP X--- 1229,1235 ---- X .PP X If X .I unix X! is not set, or if the command could not be found in the user's PATH X environment, a message will be printed indicating that the command was X not found. X .PP X*************** X*** 1209,1216 **** X commands, piping is disallowed either to or from such commands. X If the user wishes to execute X .I UNIX X! commands which are to be piped to one another (or use any sort of redirection), X! the command, X .B sh X is provided for such purposes. X Since X--- 1238,1245 ---- X commands, piping is disallowed either to or from such commands. X If the user wishes to execute X .I UNIX X! commands that are to be piped to one another (or use any sort of redirection), X! the command X .B sh X is provided for such purposes. X Since X*************** X*** 1256,1262 **** X If you want to enter curses mode even if X you don't have mail, use the \-S option on the command line. X .PP X! In curses mode, the user's terminal has it's \*Qecho\*U turned off so commands X that are issued are not echoed on the screen. X Certain commands cause the mode X to return to normal for typing purposes (sending mail, for example). X--- 1285,1291 ---- X If you want to enter curses mode even if X you don't have mail, use the \-S option on the command line. X .PP X! In curses mode, the user's terminal has its \*Qecho\*U turned off so commands X that are issued are not echoed on the screen. X Certain commands cause the mode X to return to normal for typing purposes (sending mail, for example). X*************** X*** 1273,1279 **** X Note that the top line is reserved for \*Qstatus\*U and the bottom line is X for user interaction should it be required. X .PP X! The user may now type commands via key sequences which are not echoed X to the screen. X Thus, function keys may be bound to \*Qcommands\*U by using the X .B bind X--- 1302,1308 ---- X Note that the top line is reserved for \*Qstatus\*U and the bottom line is X for user interaction should it be required. X .PP X! The user may now type commands via key sequences that are not echoed X to the screen. X Thus, function keys may be bound to \*Qcommands\*U by using the X .B bind X*************** X*** 1334,1340 **** X lines of a message. X Next will print the next message. X If the current message is deleted, the next undeleted message is found. X! You might notice this is different than the line mode, which will return X an error message that the current message is marked as deleted. X .TP X +, j, J, RETURN X--- 1363,1369 ---- X lines of a message. X Next will print the next message. X If the current message is deleted, the next undeleted message is found. X! You might notice this is different from the line mode, which will return X an error message that the current message is marked as deleted. X .TP X +, j, J, RETURN X*************** X*** 1367,1373 **** X When the \*Qgoto\*U command X is selected, a prompt at the bottom of the window prompts for a X .BR "message list" . X! Anything which describes a message list may be used. X Since X .I Mush X commands return message lists, a legal X--- 1396,1402 ---- X When the \*Qgoto\*U command X is selected, a prompt at the bottom of the window prompts for a X .BR "message list" . X! Anything that describes a message list may be used. X Since X .I Mush X commands return message lists, a legal X*************** X*** 1504,1510 **** X .PP X To specify control characters in ascii format for the bind command, the X sequence \*Q\\Cc\*U is used where `c' is the X! character which the control key will translate to and must be in upper case. X The sequence \*Q\\CP\*U would map to control-P. X If the user wishes to indicate the RETURN key, this is specified X with the string \*Q\\n\*U and X--- 1533,1539 ---- X .PP X To specify control characters in ascii format for the bind command, the X sequence \*Q\\Cc\*U is used where `c' is the X! character that the control key will translate to and must be in upper case. X The sequence \*Q\\CP\*U would map to control-P. X If the user wishes to indicate the RETURN key, this is specified X with the string \*Q\\n\*U and X*************** X*** 1513,1521 **** X outputs the three characters: control-A, H, line-feed. X To map this function key to a command, the X user would have to enter the sequence \*Q\\CAH\\n\*U as the key sequence, X! then follow up with a valid curses command. X! From then on, if the user presses that function key, X! then the command mapped to it will be executed. X .PP X The ESCAPE key is signified by the sequence, \*Q\\E\*U. X On a Sun-3 workstation, X--- 1542,1550 ---- X outputs the three characters: control-A, H, line-feed. X To map this function key to a command, the X user would have to enter the sequence \*Q\\CAH\\n\*U as the key sequence, X! then follow up with a valid curses command. From then on, if the user X! presses that function key, X! the command mapped to it will be executed. X .PP X The ESCAPE key is signified by the sequence, \*Q\\E\*U. X On a Sun-3 workstation, X*************** X*** 1527,1534 **** X unless bound in line mode, and can never begin with a digit. X .PP X Whenever a command is entered, other than `^L' X! .RB ( redraw ), X! that causes the screen to scroll or be refreshed in any way, X .I Mush X is left in the X .I continue X--- 1556,1563 ---- X unless bound in line mode, and can never begin with a digit. X .PP X Whenever a command is entered, other than `^L' X! .RB ( redraw ) X! which causes the screen to scroll or be refreshed in any way, X .I Mush X is left in the X .I continue X*************** X*** 1577,1583 **** X .PP X At the end of each list of menu entries for panel items is an item X labelled \*Qhelp\*U. X! When this item is chosen, help with that command X is displayed in the center of the console. X .PP X When composing letters, the interface is the same for the tool mode, X--- 1606,1612 ---- X .PP X At the end of each list of menu entries for panel items is an item X labelled \*Qhelp\*U. X! When this item is chosen, help for that command X is displayed in the center of the console. X .PP X When composing letters, the interface is the same for the tool mode, X*************** X*** 1609,1615 **** X facility allows users to customize X .I Mush X to resemble other mailers. X! However, efforts have already been made to include commands which are backwards X compatible with other line-mode mailers. X Users of the graphics tool mode of X .I Mush X--- 1638,1644 ---- X facility allows users to customize X .I Mush X to resemble other mailers. X! However, efforts have already been made to include commands that are backwards X compatible with other line-mode mailers. X Users of the graphics tool mode of X .I Mush X*************** X*** 1656,1672 **** X control the program makes while executing. X The intent of the debug level is for tracking down X bugs with the program at specific locations. X! Periodically, the program may segmentation fault and core dump. X When this happens, the user can reenter the program, X set the debugging level and recreate the problem. X .sp X If the user suspects memory allocation problems, a debugging X! level of 2 or higher will prevent memory from being freed causing no X! overwriting of memory bounds. X .sp X If the user suspects sendmail errors, X a debugging level of 3 or higher will prevent sendmail from starting X! and outgoing mail is sent to the standard output instead of actually X being sent. X .TP X .BR delete / undelete X--- 1685,1701 ---- X control the program makes while executing. X The intent of the debug level is for tracking down X bugs with the program at specific locations. X! Occasionally, the program may segmentation fault and core dump. X When this happens, the user can reenter the program, X set the debugging level and recreate the problem. X .sp X If the user suspects memory allocation problems, a debugging X! level of 2 or higher will prevent memory from being freed so that X! memory bounds won't get overwritten. X .sp X If the user suspects sendmail errors, X a debugging level of 3 or higher will prevent sendmail from starting X! and outgoing mail is directed to the standard output instead of actually X being sent. X .TP X .BR delete / undelete X*************** X*** 1688,1694 **** X .TP X .B exit X .RB ( x ) X! Effects an immediate return to the login shell without X modifying the current folder or system spool directory. X .TP X .B expand X--- 1717,1723 ---- X .TP X .B exit X .RB ( x ) X! Returns immediately to the login shell without X modifying the current folder or system spool directory. X .TP X .B expand X*************** X*** 1704,1710 **** X command, but the whole process is automated by using the function key X interface provided by the graphics mode. X By default, the last key in each function key pad displays X! the values of all the function keys in that set of function keys. X There are the left, right and top set of keys. X .TP X .BR folder " [\-N] [\-r] [!] [ %[user] | # | & | file ]" X--- 1733,1739 ---- X command, but the whole process is automated by using the function key X interface provided by the graphics mode. X By default, the last key in each function key pad displays X! the values of all the function keys in that set. X There are the left, right and top set of keys. X .TP X .BR folder " [\-N] [\-r] [!] [ %[user] | # | & | file ]" X*************** X*** 1736,1748 **** X .TP X .BR from " [ + | \- ]" X .RB ( f ) X! With no arguments, from will print the current message's header. X If given a message list, from will print the headers of those X! messages which are in the list. X .sp X The special arguments `\-' and `+' can be given to move the X! current message pointer to the previous or next message X! respectively while also printing that message's header. X If a message list was given in addition to `\-' or `+', then X the current message pointer will be set to the first or last X message, respectively, in the message list given. X--- 1765,1779 ---- X .TP X .BR from " [ + | \- ]" X .RB ( f ) X! With no arguments, X! .I from X! will print the current message's header. X If given a message list, from will print the headers of those X! messages that are in the list. X .sp X The special arguments `\-' and `+' can be given to move the X! current message pointer to the previous or next message, X! respectively, while also printing that message's header. X If a message list was given in addition to `\-' or `+', then X the current message pointer will be set to the first or last X message, respectively, in the message list given. X*************** X*** 1802,1808 **** X The next two positions indicate the message status. X The first X may be one of, \*QN\*U (new and unread), \*QU\*U (old, but still X! unread), \*Q*\*U (deleted), \*QO\*U (old and read), \*QP\*U (preserved), X or \*Q \*U (read). X The second position may have an \*Qr\*U if the message X has been replied to. X--- 1833,1839 ---- X The next two positions indicate the message status. X The first X may be one of, \*QN\*U (new and unread), \*QU\*U (old, but still X! unread), \*Q*\*U (deleted), \*QS\*U (saved), \*QP\*U (preserved), X or \*Q \*U (read). X The second position may have an \*Qr\*U if the message X has been replied to. X*************** X*** 1817,1823 **** X .I 278 X and the subject of the message is X .IR Test . X! The format of the message header exemplified here is described by X the string variable X .BR hdr_format . X The example given above has a hdr_format of X--- 1848,1854 ---- X .I 278 X and the subject of the message is X .IR Test . X! The format of the message header shown here is described by X the string variable X .BR hdr_format . X The example given above has a hdr_format of X*************** X*** 1835,1846 **** X .nf X .in +2 X .ta 1i X! n new messages X! d deleted messages X! u unread messages X! o old messages X! r replied to messages X! a all messages X .fi X .in -2 X .sp X--- 1866,1879 ---- X .nf X .in +2 X .ta 1i X! .if t .ta 1.5i X! n new messages X! d deleted messages X! u unread messages X! o old messages X! r replied to messages X! s saved messages X! a all messages X .fi X .in -2 X .sp X*************** X*** 1854,1860 **** X The X .B z X command can also be used; `z' alone will print the next X! screenful (thus, the `+' is optional), X and \*Qz \-\*U is equivalent to \*Qh \-\*U. X .sp X Headers affects all the messages it displays, so piping may be done X--- 1887,1893 ---- X The X .B z X command can also be used; `z' alone will print the next X! screenful (thus, the `+' is optional) X and \*Qz \-\*U is equivalent to \*Qh \-\*U. X .sp X Headers affects all the messages it displays, so piping may be done X*************** X*** 1961,1967 **** X Mailing to programs is indicated by the pipe `|' character preceding the X program name. X Since the user's path is searched, full pathnames are not required for X! programs which lie in the user's PATH environment variable. X Example: X .sp X .ti +2 X--- 1994,2000 ---- X Mailing to programs is indicated by the pipe `|' character preceding the X program name. X Since the user's path is searched, full pathnames are not required for X! programs that lie in the user's PATH environment variable. X Example: X .sp X .ti +2 X*************** X*** 1993,2003 **** X The included message is indented by X the string \*Q> \*U or by the string described by the variables X .BR indent_str , X! .BR pre_indent-str , X and X .BR post_indent_str . X See the VARIABLES section for more information on these string values. X! If a message list is given after the \-i option, then the message X described by that list are included. X The \-h option is identical to the \-i option except that the headers of X the message are also included. X--- 2026,2036 ---- X The included message is indented by X the string \*Q> \*U or by the string described by the variables X .BR indent_str , X! .BR pre_indent_str , X and X .BR post_indent_str . X See the VARIABLES section for more information on these string values. X! If a message list is given after the \-i option, then the messages X described by that list are included. X The \-h option is identical to the \-i option except that the headers of X the message are also included. X*************** X*** 2025,2037 **** X The forward option does not allow you to edit the message(s) being forwarded X unless the -e flag is also specified. X The subject of the message (if available) is the same as the \fIcurrent\f X! message; it not necessarily the message of the message being forwarded. X The subject of forwarded mail cannot be changed. X However, using the \-e flag X will allow the user to change the subject once in editing mode using the X escape sequence, \*Q~s\*U. X .sp X! Forwarded mail that has not been edited by the user will contains special X headers such as X .sp X .ti +2 X--- 2058,2070 ---- X The forward option does not allow you to edit the message(s) being forwarded X unless the -e flag is also specified. X The subject of the message (if available) is the same as the \fIcurrent\f X! message; it is not necessarily the subject of the message being forwarded. X The subject of forwarded mail cannot be changed. X However, using the \-e flag X will allow the user to change the subject once in editing mode using the X escape sequence, \*Q~s\*U. X .sp X! Forwarded mail that has not been edited by the user will contain special X headers such as X .sp X .ti +2 X*************** X*** 2039,2045 **** X .ti +2 X Resent-From: X .sp X! and perhaps other depending on your mail transport agent. X Sendmail, for example, will add a number of other \*QResent-*\*U headers. X .TP X .BR my_hdr / un_hdr X--- 2072,2078 ---- X .ti +2 X Resent-From: X .sp X! and perhaps others, depending on your mail transport agent. X Sendmail, for example, will add a number of other \*QResent-*\*U headers. X .TP X .BR my_hdr / un_hdr X*************** X*** 2090,2103 **** X Options: X .ta 1.5i X .in +2 X- \-d [+-]date messages sent on or [+ after] [`\-' before] date. X \-ago search for messages relative to today's date. X \-f search for pattern in \*QFrom\*U field only. X \-i ignore case of letters when searching. X \-r msg_list search only the listed messages. X \-s search for pattern in \*QSubject\*U field only. X \-t search for pattern in \*QTo\*U field only. X- \-h header search for pattern in specified header only. X \-x select messages not containing the pattern. X .in -2 X .fi X--- 2123,2136 ---- X Options: X .ta 1.5i X .in +2 X \-ago search for messages relative to today's date. X+ \-d [+-]date messages sent on or [+ after] [`\-' before] date. X \-f search for pattern in \*QFrom\*U field only. X+ \-h header search for pattern in specified header only. X \-i ignore case of letters when searching. X \-r msg_list search only the listed messages. X \-s search for pattern in \*QSubject\*U field only. X \-t search for pattern in \*QTo\*U field only. X \-x select messages not containing the pattern. X .in -2 X .fi X*************** X*** 2149,2155 **** X required, use the \-d option and specify specific dates. X .sp X Also note that the -ago option allows the \*Qbefore\*U (-) and \*Qafter\*U (+) X! arguments. Thus, you may pick for all messages older than 1 week with: X .sp X .ti +2 X pick -ago -1 week X--- 2182,2188 ---- X required, use the \-d option and specify specific dates. X .sp X Also note that the -ago option allows the \*Qbefore\*U (-) and \*Qafter\*U (+) X! arguments. Thus, you may pick all messages older than 1 week with: X .sp X .ti +2 X pick -ago -1 week X*************** X*** 2160,2167 **** X .ti +2 X pick \-d 2/5/86 | pick \-d \-2/5/87 | pick \-s "mail stuff" | lpr X .sp X! will find all the messages between the dates February 5, 1986 and X! February 5, 1987 that contain the subject "mail stuff" and send them X to the printer. X .sp X .ti +2 X--- 2193,2200 ---- X .ti +2 X pick \-d 2/5/86 | pick \-d \-2/5/87 | pick \-s "mail stuff" | lpr X .sp X! will find all the messages between the dates February 5, 1986, and X! February 5, 1987, that contain the subject "mail stuff" and send them X to the printer. X .sp X .ti +2 X*************** X*** 2201,2210 **** X .BR type , X .BR t ) X Takes a message list and displays each message on the user's terminal. X! If the first letter of the command is a capital letter (`P' or `T'), X then \*Qignored\*U headers are not ignored X .I provided X! that the variable, X .B alwaysignore X is not set. X If the variable is set, the ignored headers will be X--- 2234,2243 ---- X .BR type , X .BR t ) X Takes a message list and displays each message on the user's terminal. X! If the first letter of the command is a capital letter (`P' or `T') X then \*Qignored\*U headers are not ignored X .I provided X! that the variable X .B alwaysignore X is not set. X If the variable is set, the ignored headers will be X*************** X*** 2227,2233 **** X .IR Mush . X If the variable \*Qhold\*U is set, all messages not marked for deletion are X saved in the spool directory. X! Otherwise, messages which have been read are saved to X .I ~/mbox X or to the file described by the string variable X .BR mbox . X--- 2260,2266 ---- X .IR Mush . X If the variable \*Qhold\*U is set, all messages not marked for deletion are X saved in the spool directory. X! Otherwise, messages that have been read are saved to X .I ~/mbox X or to the file described by the string variable X .BR mbox . X*************** X*** 2252,2258 **** END_OF_FILE if test 57115 -ne `wc -c <'Diffs.6.3.b'`; then echo shar: \"'Diffs.6.3.b'\" unpacked with wrong size! fi # end of 'Diffs.6.3.b' fi echo shar: End of shell archive. exit 0