xref: /illumos-gate/usr/src/cmd/mailx/init.c (revision 2a8bcb4efb45d99ac41c94a75c396b362c414f7f)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
23 /*	  All Rights Reserved  	*/
24 
25 
26 /*
27  * Copyright (c) 1998 by Sun Microsystems, Inc.
28  * All rights reserved.
29  */
30 
31 /*
32  * University Copyright- Copyright (c) 1982, 1986, 1988
33  * The Regents of the University of California
34  * All Rights Reserved
35  *
36  * University Acknowledgment- Portions of this document are derived from
37  * software developed by the University of California, Berkeley, and its
38  * contributors.
39  */
40 
41 /*
42  * mailx -- a modified version of a University of California at Berkeley
43  *	mail program
44  *
45  * A bunch of global variable declarations lie herein.
46  *
47  * All global externs are declared in def.h. All variables are initialized
48  * here!
49  *
50  * !!!!!IF YOU CHANGE (OR ADD) IT HERE, DO IT THERE ALSO !!!!!!!!
51  *
52  */
53 
54 #include	"def.h"
55 #include	<grp.h>
56 #include	<pwd.h>
57 #include	<sys/utsname.h>
58 
59 int	Fflag = 0;			/* -F option (followup) */
60 int	Hflag = 0;			/* print headers and exit */
61 char	*Tflag;				/* -T temp file for netnews */
62 int	UnUUCP = 0;			/* -U flag */
63 char	**altnames;			/* List of alternate names for user */
64 int	askme;
65 int	baud;				/* Output baud rate */
66 char	*bflag;				/* Bcc given from non tty */
67 char	*binmsg = "*** Message content is not printable: pipe to command or save to a file ***";
68 char	*cflag;				/* Cc given from non tty */
69 int	cond;				/* Current state of conditional exc. */
70 NODE	*curptr = NOFP;
71 int	debug;				/* Debug flag set */
72 struct	message	*dot;			/* Pointer to current message */
73 int	edit;				/* Indicates editing a file */
74 char	*editfile;			/* Name of file being edited */
75 int	exitflg = 0;			/* -e for mail test */
76 NODE	*fplist = NOFP;
77 struct	grouphead	*groups[HSHSIZE];/* Pointer to active groups */
78 int	hflag;				/* Sequence number for network -h */
79 char	homedir[PATHSIZE];		/* Name of home directory */
80 struct	ignore		*ignore[HSHSIZE];/* Pointer to ignored fields */
81 int	image;				/* File descriptor for image of msg */
82 FILE	*input;				/* Current command input file */
83 int	intty;				/* True if standard input a tty */
84 int	issysmbox;			/* mailname is a system mailbox */
85 FILE	*itf;				/* Input temp file buffer */
86 int	lexnumber;			/* Number of TNUMBER from scan() */
87 char	lexstring[STRINGLEN];		/* String from TSTRING, scan() */
88 int	loading;			/* Loading user definitions */
89 char	*lockname;			/* named used for locking in /var/mail */
90 #ifdef	USR_SPOOL_MAIL
91 char	*maildir = "/usr/spool/mail/";	/* directory for mail files */
92 #else
93 # ifdef preSVr4
94 char	*maildir = "/usr/mail/";	/* directory for mail files */
95 # else
96 char	*maildir = "/var/mail/";	/* directory for mail files */
97 # endif
98 #endif
99 char	mailname[PATHSIZE];		/* Name of /var/mail system mailbox */
100 off_t	mailsize;			/* Size of system mailbox */
101 int	maxfiles;			/* Maximum number of open files */
102 struct	message	*message;		/* The actual message structure */
103 int	msgCount;			/* Count of messages read in */
104 gid_t	myegid;
105 uid_t	myeuid;
106 char	myname[PATHSIZE];		/* My login id */
107 pid_t	mypid;				/* Current process id */
108 gid_t	myrgid;
109 uid_t	myruid;
110 int	newsflg = 0;			/* -I option for netnews */
111 char	noheader;			/* Suprress initial header listing */
112 int	noreset;			/* String resets suspended */
113 char	nosrc;				/* Don't source /etc/mail/mailx.rc */
114 int	nretained;			/* Number of retained fields */
115 int	numberstack[REGDEP];		/* Stack of regretted numbers */
116 char	origname[PATHSIZE];		/* Name of mailfile before expansion */
117 FILE	*otf;				/* Output temp file buffer */
118 int	outtty;				/* True if standard output a tty */
119 FILE	*pipef;				/* Pipe file we have opened */
120 char	*progname;			/* program name (argv[0]) */
121 char	*prompt = NOSTR;		/* prompt string */
122 int	rcvmode;			/* True if receiving mail */
123 int	readonly;			/* Will be unable to rewrite file */
124 int	regretp;			/* Pointer to TOS of regret tokens */
125 int	regretstack[REGDEP];		/* Stack of regretted tokens */
126 struct	ignore		*retain[HSHSIZE];/* Pointer to retained fields */
127 char	*rflag;				/* -r address for network */
128 int	rmail;				/* Being called as rmail */
129 int	sawcom;				/* Set after first command */
130 int	selfsent;			/* User sent self something */
131 int	senderr;			/* An error while checking */
132 int	rpterr;				/* An error msg was sent to stderr */
133 char	*sflag;				/* Subject given from non tty */
134 int	sourcing;			/* Currently reading variant file */
135 int	space;				/* Current maximum number of messages */
136 jmp_buf	srbuf;
137 int	tflag;				/* Read headers from text */
138 /*
139  * The pointers for the string allocation routines,
140  * there are NSPACE independent areas.
141  * The first holds STRINGSIZE bytes, the next
142  * twice as much, and so on.
143  */
144 struct strings stringdope[NSPACE];
145 char	*stringstack[REGDEP];		/* Stack of regretted strings */
146 char	tempEdit[TMPSIZ];
147 char	tempMail[TMPSIZ];
148 char	tempMesg[TMPSIZ];
149 char	tempQuit[TMPSIZ];
150 char	tempResid[PATHSIZE];		/* temp file in :saved */
151 char	tempZedit[TMPSIZ];
152 uid_t	uid;				/* The invoker's user id */
153 static struct utimbuf	utimeb;
154 struct utimbuf	*utimep = &utimeb;
155 struct	var	*variables[HSHSIZE];	/* Pointer to active var list */
156 int	receipt_flg = 0;		/* Flag for return receipt */
157