xref: /illumos-gate/usr/src/cmd/mailx/init.c (revision 8b80e8cb6855118d46f605e91b5ed4ce83417395)
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 #pragma ident	"%Z%%M%	%I%	%E% SMI"
42 
43 /*
44  * mailx -- a modified version of a University of California at Berkeley
45  *	mail program
46  *
47  * A bunch of global variable declarations lie herein.
48  *
49  * All global externs are declared in def.h. All variables are initialized
50  * here!
51  *
52  * !!!!!IF YOU CHANGE (OR ADD) IT HERE, DO IT THERE ALSO !!!!!!!!
53  *
54  */
55 
56 #include	"def.h"
57 #include	<grp.h>
58 #include	<pwd.h>
59 #include	<sys/utsname.h>
60 
61 int	Fflag = 0;			/* -F option (followup) */
62 int	Hflag = 0;			/* print headers and exit */
63 char	*Tflag;				/* -T temp file for netnews */
64 int	UnUUCP = 0;			/* -U flag */
65 char	**altnames;			/* List of alternate names for user */
66 int	askme;
67 int	baud;				/* Output baud rate */
68 char	*bflag;				/* Bcc given from non tty */
69 char	*binmsg = "*** Message content is not printable: pipe to command or save to a file ***";
70 char	*cflag;				/* Cc given from non tty */
71 int	cond;				/* Current state of conditional exc. */
72 NODE	*curptr = NOFP;
73 int	debug;				/* Debug flag set */
74 struct	message	*dot;			/* Pointer to current message */
75 int	edit;				/* Indicates editing a file */
76 char	*editfile;			/* Name of file being edited */
77 int	exitflg = 0;			/* -e for mail test */
78 NODE	*fplist = NOFP;
79 struct	grouphead	*groups[HSHSIZE];/* Pointer to active groups */
80 int	hflag;				/* Sequence number for network -h */
81 char	homedir[PATHSIZE];		/* Name of home directory */
82 struct	ignore		*ignore[HSHSIZE];/* Pointer to ignored fields */
83 int	image;				/* File descriptor for image of msg */
84 FILE	*input;				/* Current command input file */
85 int	intty;				/* True if standard input a tty */
86 int	issysmbox;			/* mailname is a system mailbox */
87 FILE	*itf;				/* Input temp file buffer */
88 int	lexnumber;			/* Number of TNUMBER from scan() */
89 char	lexstring[STRINGLEN];		/* String from TSTRING, scan() */
90 int	loading;			/* Loading user definitions */
91 char	*lockname;			/* named used for locking in /var/mail */
92 #ifdef	USR_SPOOL_MAIL
93 char	*maildir = "/usr/spool/mail/";	/* directory for mail files */
94 #else
95 # ifdef preSVr4
96 char	*maildir = "/usr/mail/";	/* directory for mail files */
97 # else
98 char	*maildir = "/var/mail/";	/* directory for mail files */
99 # endif
100 #endif
101 char	mailname[PATHSIZE];		/* Name of /var/mail system mailbox */
102 off_t	mailsize;			/* Size of system mailbox */
103 int	maxfiles;			/* Maximum number of open files */
104 struct	message	*message;		/* The actual message structure */
105 int	msgCount;			/* Count of messages read in */
106 gid_t	myegid;
107 uid_t	myeuid;
108 char	myname[PATHSIZE];		/* My login id */
109 pid_t	mypid;				/* Current process id */
110 gid_t	myrgid;
111 uid_t	myruid;
112 int	newsflg = 0;			/* -I option for netnews */
113 char	noheader;			/* Suprress initial header listing */
114 int	noreset;			/* String resets suspended */
115 char	nosrc;				/* Don't source /etc/mail/mailx.rc */
116 int	nretained;			/* Number of retained fields */
117 int	numberstack[REGDEP];		/* Stack of regretted numbers */
118 char	origname[PATHSIZE];		/* Name of mailfile before expansion */
119 FILE	*otf;				/* Output temp file buffer */
120 int	outtty;				/* True if standard output a tty */
121 FILE	*pipef;				/* Pipe file we have opened */
122 char	*progname;			/* program name (argv[0]) */
123 char	*prompt = NOSTR;		/* prompt string */
124 int	rcvmode;			/* True if receiving mail */
125 int	readonly;			/* Will be unable to rewrite file */
126 int	regretp;			/* Pointer to TOS of regret tokens */
127 int	regretstack[REGDEP];		/* Stack of regretted tokens */
128 struct	ignore		*retain[HSHSIZE];/* Pointer to retained fields */
129 char	*rflag;				/* -r address for network */
130 int	rmail;				/* Being called as rmail */
131 int	sawcom;				/* Set after first command */
132 int	selfsent;			/* User sent self something */
133 int	senderr;			/* An error while checking */
134 int	rpterr;				/* An error msg was sent to stderr */
135 char	*sflag;				/* Subject given from non tty */
136 int	sourcing;			/* Currently reading variant file */
137 int	space;				/* Current maximum number of messages */
138 jmp_buf	srbuf;
139 int	tflag;				/* Read headers from text */
140 /*
141  * The pointers for the string allocation routines,
142  * there are NSPACE independent areas.
143  * The first holds STRINGSIZE bytes, the next
144  * twice as much, and so on.
145  */
146 struct strings stringdope[NSPACE];
147 char	*stringstack[REGDEP];		/* Stack of regretted strings */
148 char	tempEdit[TMPSIZ];
149 char	tempMail[TMPSIZ];
150 char	tempMesg[TMPSIZ];
151 char	tempQuit[TMPSIZ];
152 char	tempResid[PATHSIZE];		/* temp file in :saved */
153 char	tempZedit[TMPSIZ];
154 uid_t	uid;				/* The invoker's user id */
155 static struct utimbuf	utimeb;
156 struct utimbuf	*utimep = &utimeb;
157 struct	var	*variables[HSHSIZE];	/* Pointer to active var list */
158 int	receipt_flg = 0;		/* Flag for return receipt */
159