1 /*
2  * xmail - X window system interface to the mail program
3  *
4  * Copyright 1990,1991,1992 by National Semiconductor Corporation
5  *
6  * Permission to use, copy, modify, and distribute this software and its
7  * documentation for any purpose is hereby granted without fee, provided that
8  * the above copyright notice appear in all copies and that both that
9  * copyright notice and this permission notice appear in supporting
10  * documentation, and that the name of National Semiconductor Corporation not
11  * be used in advertising or publicity pertaining to distribution of the
12  * software without specific, written prior permission.
13  *
14  * NATIONAL SEMICONDUCTOR CORPORATION MAKES NO REPRESENTATIONS ABOUT THE
15  * SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE.  IT IS PROVIDED "AS IS"
16  * WITHOUT EXPRESS OR IMPLIED WARRANTY.  NATIONAL SEMICONDUCTOR CORPORATION
17  * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO
19  * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL,
20  * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
21  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
22  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
23  * PERFORMANCE OF THIS SOFTWARE.
24  *
25  * Author:  Michael C. Wagnitz - National Semiconductor Corporation
26  *
27  */
28 
29 
30 #include "defs.h"
31 
32 /* HelpText.c */
33 
34 extern String		Autograph_Info[];
35 extern String		Copy_Info[];
36 extern String		Default_Status_Info;
37 extern String		Delete_Info[];
38 extern String		Deliver_Info[];
39 extern String		Folder_Info[];
40 extern String		Hold_Info[];
41 extern String		NewMail_Info[];
42 extern String		Print_Info[];
43 extern String		Quit_Info[];
44 extern String		Read_Info[];
45 extern String		Reply_Info[];
46 extern String		Save_Info[];
47 extern String		Send_Info[];
48 extern String		SendMail_Info[];
49 
50 extern String		Abort_Help;
51 extern String		Bcc_Help;
52 extern String		Cancel_Help;
53 extern String		Cc_Help;
54 extern String		Copy_Help;
55 extern String		Delete_Help;
56 extern String		Deliver_Help;
57 extern String		File_Help;
58 extern String		Folder_Help;
59 extern String		Hold_Help;
60 extern String		Index_Help;
61 extern String		NewMail_Help;
62 extern String		Print_Help;
63 extern String		Quit_Help;
64 extern String		Read_Help;
65 extern String		ReEdit_Help;
66 extern String		Reply_Help;
67 extern String		Save_Help;
68 extern String		Send_Help;
69 extern String		Sign_Help;
70 extern String		sign_Help;
71 extern String		Status_Help;
72 extern String		Subject_Help;
73 extern String		Text_Help;
74 extern String		Text2_Help;
75 extern String		Title_Help;
76 extern String		To_Help;
77 
78 /* actions.c */
79 
80 extern void		initfoldir(void);		/* initialize foldir value */
81 extern int		str_compare(char **s1, char **s2);		/* for qsort of folder names */
82 extern void	CheckInsert(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* for the file window */
83 extern void		EraseIt(Widget w, XawTextPosition i, XawTextPosition pos);		/* delete requested buf data */
84 extern void	DeleteChar(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* for deletes (file window) */
85 extern void	DeleteLine(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* in the file window */
86 extern void	DeleteWord(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* also in the file window */
87 extern void	DoCmd(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* effect specified command */
88 extern void	DoDone(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* complete message delivery */
89 extern void	DoNothing(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* dummy action routine */
90 extern void	DoReply(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* invoke reply callback */
91 extern void	DoSave(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* invoke the save callback */
92 extern void	DoSelected(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* DoCmd w/ selected message */
93 extern void	Folder(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* execute folder command */
94 extern void	Iconify(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* iconification request */
95 extern void	MyNotify(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* invokes callbacks w/ param */
96 extern void	NextField(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* warps pointer to data fld */
97 extern void	PrintMsg(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* send mail to the printer */
98 extern void	Quit(Widget w, XEvent *event, String *params, Cardinal *num_params);			/* termination procedure */
99 extern void	SetAliases(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* menu list of alias names */
100 extern void		SetNewness(Widget parent, char *path);		/* hilite folders w/ new data */
101 extern void	SetFolders(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* create a list of folders */
102 extern void	SetMenu(Widget parent, XEvent *event, String *params, Cardinal *num_params);		/* Position set_menu popup */
103 extern void	SetPopup(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* Position relative to owner */
104 extern void	SetSelect(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* reposition select mark */
105 extern void	ShowHelp(Widget w, XEvent *event, String *params, Cardinal *num_params);		/* Position help & popup text */
106 
107 /* callbacks.c */
108 
109 extern void		Autograph();		/* adds Signature to message */
110 #if defined(sun) || defined(SVR4)
111 extern void		endDelivery();		/* catch delivery completion */
112 #else
113 extern int		endDelivery();		/* catch delivery completion */
114 #endif
115 
116 extern int		DoCopy();		/* folder copy mail delivery */
117 extern void	Done(Widget, XtPointer, XtPointer);		/* completes mail delivery */
118 extern void	DoIt(Widget, XtPointer, XtPointer);		/* callback do specified cmd */
119 extern void	DoPrint(Widget, XtPointer, XtPointer);		/* callback printer execution */
120 extern void	DoQuit(Widget, XtPointer, XtPointer);		/* callback termination func */
121 extern void	DoSet(Widget, XtPointer, XtPointer);		/* callback to toggle options */
122 extern void	DoWith(Widget, XtPointer, XtPointer);		/* do cmd with arguments */
123 extern void	DropIt(Widget, XtPointer, XtPointer);		/* destroy Folder popup list */
124 extern void	GetAliasName(Widget, Widget, XtPointer);	/* retrieve alias name */
125 extern void	GetFolderName(Widget, XtPointer, XtPointer);	/* retrieve folder name */
126 extern void	ReEdit(Widget, XtPointer, XtPointer);		/* re-edit the mail message */
127 extern void	Reply(Widget, XtPointer, XtPointer);		/* use msg author and subject */
128 extern void	Save(Widget, XtPointer, XtPointer);		/* callback save routine */
129 extern void	SetNewmail(Widget, XtPointer, XtPointer);	/* highlight when new mail */
130 extern void	UnsetNewmail(Widget, XtPointer, XtPointer);	/* remove newmail highlight */
131 
132 /* callMail.c */
133 
134 extern void		callMail();		/* fork child, exec mail */
135 
136 /* confirm.c */
137 
138 extern Bool		Confirm(char *prompt);		/* Confirm destructive acts */
139 
140 /* directory.c */
141 
142 extern void		SetDirectory();		/* create folder files list */
143 
144 /* environs.c */
145 
146 extern char		*GetMailEnv(String item);		/* get value from mail env */
147 extern char		*GetMailrc(char *item);		/* get mailrc item value */
148 extern char		*alias(char *name);		/* get mailrc alias value */
149 
150 /* handler.c */
151 
152 extern int 		In_System_Folder(void);	/* boolean test of folder */
153 extern void	        icon_handler(Widget w, XtPointer client_data, XEvent *event, Boolean *);		/* handle iconify changes */
154 extern int 		index_handler(int msg_num, int undeleting);	/* highlight the msg number */
155 extern void 		info_handler(Widget w, XtPointer client_data, XEvent *event,
156 			Boolean *);		/* change content of status */
157 extern int 		file_handler(void);		/* handle change of folder */
158 
159 /* mail.c */
160 
161 extern void	warp_handler(Widget w, XtPointer client_data, XEvent *event,
162 		             Boolean *);		/* warp cursor AFTER mapping */
163 extern char		*extract_of(char **p);		/* get header info from buf */
164 #if defined(sun) || defined(SVR4)
165 extern void 		endEdits();		/* catch exit of edit child */
166 #else
167 extern int 		endEdits(int signum);		/* catch exit of edit child */
168 #endif
169 extern void 		editMail(void);		/* create/compose a message */
170 extern void 		readMail(XtPointer client_data, int *source, XtInputId *id);		/* get data from mail pipe */
171 extern void		makeHeading(Widget parent, String label_string, Widget *left, Widget *above, String info, String help_text);		/* message header windows */
172 extern void		makeButton(Widget parent, String label, XtCallbackProc CBProc, String CBData, String info, String help_text);		/* message completion buttons */
173 extern void 		sendMail(Widget parent);		/* used by Send/Reply cmds */
174 extern void 		writeMail(char *s);		/* send data to mail pipe */
175 
176 /* parser.c */
177 
178 extern void		parser_init(void);		/* compile patterns */
179 extern int		match(PatternRecPtr patternTable, char *string);		/* eval command or output */
180 extern void		parse(String msg);		/* parse mail output */
181 extern char		*QueryMail(char *cmd);		/* ask mail for info */
182 
183 /* utils.c */
184 
185 extern void 		Bell(String msg);			/* disp. error and sound bell */
186 extern int		figureWidth(XFontStruct *font);		/* get figure width for font */
187 extern void 		markIndex(char *s);		/* add/replace index marker */
188 extern int 		SelectionNumber(int undeleting);	/* get number of selected msg */
189 extern void		SetCursor(int waiting);		/* change between wait & norm */
190 extern void 		SetXY(Widget target, Widget reference, int X_offset, int Y_offset);		/* set widget x/y coordinates */
191 extern XawTextPosition	TextGetLastPos(Widget w);	/* get last pos of text */
192 extern void		UpdateTitleBar(char *msg);	/* file name and msg count */
193 extern void 		writeText(char *buf);		/* write text to buffer */
194 extern void 		writeTo(Widget w, char *data, int do_append);		/* send text data to window */
195 
196 /* windows.c */
197 
198 extern void		AddHelpText(Widget parent, String text);		/* Add help popup to window */
199 extern void		AddMenuWindow(Widget parent, String action, menuList_p *list, String *info_text);	/* Add menu popup to window */
200 extern void		AddButton(Widget parent, String name, String action, String command, menuList_p *list, String *info_text, String help_text);		/* Add command to window */
201 extern void		CreateButtons(Widget parent);	/* make the command buttons */
202 extern void		CreateCommandPanel(Widget parent);	/* form for command buttons */
203 extern void		CreateFileWindow(Widget parent);	/* a text input window */
204 extern void		CreateFolderButton(Widget parent);	/* a special command button */
205 extern void		CreateHelpWindow(Widget parent);	/* the help window base */
206 extern void		CreateIndexWindow(Widget parent);	/* a text input window */
207 extern void		CreateStatusWindow(Widget parent);	/* a text output window */
208 extern void 		CreateSubWindows(Widget parent);	/* all subwindows of xmail */
209 extern void		CreateTextWindow(Widget parent);	/* another text window */
210 extern void		CreateTitleBar(Widget parent);	/* a text output window */
211 extern Widget		CreateInputWindow(Widget parent, String name);	/* To, Subject, Cc, and Bcc */
212 extern void		ParseIconGeometry(String str, Cardinal *x, Cardinal *y);	/* Parse icon geometry */
213 
214 /* xmail.c */
215 
216 extern void		initialize(void);		/* main initialization code */
217 extern int		mailoptions(void);		/* sets up call to mail pgm */
218 
219 /* extern functions */
220 
221 extern char	*strchr(const char *, int), *strrchr(const char *, int);
222 
223 /* extern variables */
224 
225 extern Atom	wmDeleteWindow;		/* for WM_DELETE_WINDOW property */
226 extern Boolean	In_Bogus_Mail_File;	/* in bogus folder when we're iconic */
227 extern Boolean	Waiting;		/* TRUE when we set the busy cursor */
228 extern Pixmap	hatch;			/* cross_weave, to indicate new mail */
229 extern Widget	toplevel; 		/* top level shell widget	*/
230 extern Window	WaitCursorWindow;
231 
232 extern AliasRecPtr	*aliases;	/* array of mail alias strings	*/
233 extern helpText		*HelpList;
234 extern XmailResources	XMail;		/* XMail application resources */
235 
236 extern int	mail_fd;		/* descriptor to mail process i/o */
237 
238 extern int	mailargc;		/* counter passed to mail child	*/
239 extern int	RootWidth, RootHeight;
240 extern int	mailpid;		/* mail process id */
241 extern int	Highlighted;		/* state of 'Newmail' highlighting */
242 extern int	mailInputId;		/* Identity of the XtAddInput call */
243 
244 extern char	HOME[BUFSIZ];		/* home directory of user       */
245 extern char	Command[BUFSIZ];	/* xmail command string		*/
246 extern char 	InReply[BUFSIZ];	/* reply reference string	*/
247 extern char 	tmpName[BUFSIZ];	/* message temporary filename	*/
248 extern char	otherBuf[BUFSIZ];	/* bucket for non-addressee names */
249 extern char	foldir[BUFSIZ];		/* name of the folder directory */
250 extern char 	lastFolder[BUFSIZ];	/* previous folder's title-bar	*/
251 extern char	*mailargv[8];		/* array passed to mail child	*/
252 
253 /* global.h */
254