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