usr/src/cmd/mailx/main.c
author stevel@tonic-gate
Tue, 14 Jun 2005 00:00:00 -0700
changeset 0 68f95e015346
child 18 7e2dc246c4e2
permissions -rw-r--r--
OpenSolaris Launch
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
 * Common Development and Distribution License, Version 1.0 only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
 * (the "License").  You may not use this file except in compliance
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 * with the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
/*	  All Rights Reserved  	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
 * Copyright (c) 1998 by Sun Microsystems, Inc.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
 * All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
 * University Copyright- Copyright (c) 1982, 1986, 1988
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
 * The Regents of the University of California
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
 * All Rights Reserved
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
 * University Acknowledgment- Portions of this document are derived from
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
 * software developed by the University of California, Berkeley, and its
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
 * contributors.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
#include "rcv.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
#ifndef preSVr4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
#include <locale.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
 * mailx -- a modified version of a University of California at Berkeley
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
 *	mail program
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
 * Startup -- interface with user.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
static void		hdrstop(int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
static jmp_buf	hdrjmp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
 * Find out who the user is, copy his mail file (if exists) into
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
 * /tmp/Rxxxxx and set up the message pointers.  Then, print out the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
 * message headers and read user commands.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
 * Command line syntax:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
 *	mailx [ -i ] [ -r address ] [ -h number ] [ -f [ name ] ]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
 * or:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
 *	mailx [ -i ] [ -r address ] [ -h number ] people ...
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
 * and a bunch of other options.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
int 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
main(int argc, char **argv)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
	register char *ef;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
	register int argp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	int mustsend, f, goerr = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
	void (*prevint)(int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	int loaded = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
	struct termio tbuf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
	struct termios tbufs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
	int c;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
	char *cwd, *mf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
	 * Set up a reasonable environment.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
	 * Figure out whether we are being run interactively, set up
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
	 * all the temporary files, buffer standard output, and so forth.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
#ifndef preSVr4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
	(void)setlocale(LC_ALL, "");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
#if !defined(TEXT_DOMAIN)	/* Should be defined by cc -D */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
#define	TEXT_DOMAIN "SYS_TEST"	/* Use this only if it weren't */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	(void) textdomain(TEXT_DOMAIN);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
#ifdef SIGCONT
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
	sigset(SIGCONT, SIG_DFL);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
	rpterr = 0;	/* initialize; set when we output to stderr */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
	progname = argv[0];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
	if (progname[strlen(progname) - 1] != 'x') {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
		assign("bsdcompat", "");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
		assign("escapeok", "");		/* XXX */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
	myegid = getegid();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
	myrgid = getgid();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
	myeuid = geteuid();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
	myruid = getuid();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
	mypid = getpid();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
	setgid(myrgid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
	setuid(myruid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
	inithost();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
	intty = isatty(0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
	if (ioctl(1, TCGETS, &tbufs) < 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
		if (ioctl(1, TCGETA, &tbuf)==0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
			outtty = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
			baud = tbuf.c_cflag & CBAUD;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
		} else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
			baud = B9600;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
		outtty = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
		baud = cfgetospeed(&tbufs);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
	image = -1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
	 * Now, determine how we are being used.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
	 * We successively pick off instances of -r, -h, -f, and -i.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
	 * If called as "rmail" we note this fact for letter sending.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
	 * If there is anything left, it is the base of the list
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
	 * of users to mail to.  Argp will be set to point to the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
	 * first of these users.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
	ef = NOSTR;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
	argp = -1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
	mustsend = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
	if (argc > 0 && **argv == 'r')
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
		rmail++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
	while ((c = getopt(argc, argv, "b:Bc:defFh:HiInNr:s:u:UtT:vV~")) != EOF)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
		switch (c) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
		case 'e':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
			 * exit status only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
			exitflg++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
		case 'r':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
			 * Next argument is address to be sent along
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
			 * to the mailer.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
			mustsend++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
			rflag = optarg;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
		case 'T':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
			 * Next argument is temp file to write which
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
			 * articles have been read/deleted for netnews.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
			Tflag = optarg;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
			if ((f = creat(Tflag, TEMPPERM)) < 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
				perror(Tflag);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
				exit(1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
			close(f);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
			/* fall through for -I too */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
			/* FALLTHROUGH */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
		case 'I':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
			 * print newsgroup in header summary
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
			newsflg++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
		case 'u':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
			 * Next argument is person's mailbox to use.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
			 * Treated the same as "-f /var/mail/user".
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
			{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
			static char u[PATHSIZE];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
			snprintf(u, sizeof (u), "%s%s", maildir, optarg);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
			ef = u;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
		case 'i':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
			 * User wants to ignore interrupts.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
			 * Set the variable "ignore"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
			assign("ignore", "");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
		case 'U':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
			UnUUCP++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
		case 'd':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
			assign("debug", "");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
		case 'h':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
			 * Specified sequence number for network.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
			 * This is the number of "hops" made so
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
			 * far (count of times message has been
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
			 * forwarded) to help avoid infinite mail loops.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
			mustsend++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
			hflag = atoi(optarg);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
			if (hflag == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
				fprintf(stderr,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
				    gettext("-h needs non-zero number\n"));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
				goerr++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
		case 's':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
			 * Give a subject field for sending from
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
			 * non terminal
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
			mustsend++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
			sflag = optarg;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
		case 'c':	/* Cc: from command line */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
			mustsend++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
			cflag = optarg;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
		case 'b':	/* Bcc: from command line */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
			mustsend++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
			bflag = optarg;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
		case 'f':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
			 * User is specifying file to "edit" with mailx,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
			 * as opposed to reading system mailbox.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
			 * If no argument is given after -f, we read his/her
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
			 * $MBOX file or mbox in his/her home directory.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
			ef = (argc == optind || *argv[optind] == '-')
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
				? "" : argv[optind++];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
			if (*ef && *ef != '/' && *ef != '+')
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
				cwd = getcwd(NOSTR, PATHSIZE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
		case 'F':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
			Fflag++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
			mustsend++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
		case 'n':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
			 * User doesn't want to source
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
			 *	/etc/mail/mailx.rc
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
			nosrc++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
		case 'N':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
			 * Avoid initial header printing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
			noheader++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
		case 'H':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
			 * Print headers and exit
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
			Hflag++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
		case 'V':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
			puts(version);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
			return 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
		case '~':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
			 * Permit tildas no matter where
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
			 * the input is coming from.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
			assign("escapeok", "");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
		case 'v':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
			 * Send mailer verbose flag
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
			assign("verbose", "");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
		case 'B':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
			 * Don't buffer output
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
			 * (Line buffered is good enough)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
			setvbuf(stdout, NULL, _IOLBF, BUFSIZ);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
			setvbuf(stderr, NULL, _IOLBF, BUFSIZ);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
		case 't':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
			 * Like sendmail -t, read headers from text
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
			tflag++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
			mustsend++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
		case '?':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
		default:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
			goerr++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
	if (optind != argc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
		argp = optind;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
	 * Check for inconsistent arguments.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
	if (newsflg && ef==NOSTR) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
		fprintf(stderr, gettext("Need -f with -I flag\n"));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
		goerr++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
	if (ef != NOSTR && argp != -1) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
		fprintf(stderr,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
		    gettext("Cannot give -f and people to send to.\n"));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
		goerr++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
	if (exitflg && (mustsend || argp != -1))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
		exit(1);	/* nonsense flags involving -e simply exit */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
	if (tflag && argp != -1) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
		fprintf(stderr,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
		    gettext("Ignoring recipients on command line with -t\n"));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
		argp = -1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
	} else if (!tflag && mustsend && argp == -1) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
		fprintf(stderr,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
	    gettext("The flags you gave are used only when sending mail.\n"));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
		goerr++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
	if (goerr) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
		fprintf(stderr,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
gettext("Usage: %s -eiIUdFntBNHvV~ -T FILE -u USER -h hops -r address\n"),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
		    progname);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
		fprintf(stderr,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
		    gettext("\t\t-s SUBJECT -f FILE users\n"));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
		exit(1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
	tinit();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
	input = stdin;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
	rcvmode = !tflag && argp == -1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
	if (!nosrc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
		load(MASTER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
	if (!rcvmode) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
		load(Getf("MAILRC"));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
		if (tflag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
			tmail();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
		else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
			mail(&argv[argp]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
		exit(senderr ? senderr : rpterr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
	 * Ok, we are reading mail.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
	 * Decide whether we are editing a mailbox or reading
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
	 * the system mailbox, and open up the right stuff.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
	 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
	 * Do this before sourcing the MAILRC, because there might be
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
	 * a 'chdir' there that breaks the -f option.  But if the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
	 * file specified with -f is a folder name, go ahead and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
	 * source the MAILRC anyway so that "folder" will be defined.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
	nstrcpy(origname, PATHSIZE, mailname);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
	editfile = mailname;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
	if (ef != NOSTR) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
		if (ef == NOSTR || *ef == '\0' || *ef == '+') {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
			load(Getf("MAILRC"));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
			loaded++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   396
		ef = *ef ? safeexpand(ef) : Getf("MBOX");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   397
		nstrcpy(origname, PATHSIZE, ef);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   398
		if (ef[0] != '/') {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   399
			if (cwd == NOSTR)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   400
				cwd = getcwd(NOSTR, PATHSIZE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
			nstrcat(cwd, PATHSIZE, "/");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   402
			nstrcat(cwd, PATHSIZE, ef);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   403
			ef = cwd;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   404
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   405
		editfile = ef;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   406
		edit++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   407
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   408
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   409
	if (setfile(editfile, edit) < 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   410
		exit(1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   411
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   412
	if (!loaded)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   413
		load(Getf("MAILRC"));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   414
	if (msgCount > 0 && !noheader && value("header") != NOSTR) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   415
		if (setjmp(hdrjmp) == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   416
			if ((prevint = sigset(SIGINT, SIG_IGN)) != SIG_IGN)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   417
				sigset(SIGINT, hdrstop);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   418
			announce();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   419
			fflush(stdout);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   420
			sigset(SIGINT, prevint);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   421
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
	if (Hflag || (!edit && msgCount == 0)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
		if (!Hflag) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
			fprintf(stderr, gettext("No mail for %s\n"), myname);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
			Verhogen();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
		fflush(stdout);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   429
		exit(rpterr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   431
	commands();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   432
	sigset(SIGHUP, SIG_IGN);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   433
	sigset(SIGINT, SIG_IGN);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   434
	sigset(SIGQUIT, SIG_IGN);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   435
	if (!outtty)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   436
		sigset(SIGPIPE, SIG_IGN);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   437
	if (edit)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   438
		edstop(0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   439
	else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   440
		quit(0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   441
		Verhogen();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   442
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   443
	exit(rpterr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   444
	/* NOTREACHED */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   445
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   446
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   447
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   448
 * Interrupt printing of the headers.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   449
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   450
static void 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   451
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   452
hdrstop(int)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   453
#else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   454
/* ARGSUSED */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   455
hdrstop(int s)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   456
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   457
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   458
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   459
	fflush(stdout);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   460
	fprintf(stderr, gettext("\nInterrupt\n"));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   461
# ifdef OLD_BSD_SIGS
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   462
	sigrelse(SIGINT);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   463
# endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   464
	longjmp(hdrjmp, 1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   465
}