home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.freefriends.org
/
ftp.freefriends.org.tar
/
ftp.freefriends.org
/
arnold
/
Source
/
mush.rstevens.tar.gz
/
mush.tar
/
doproc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-10-30
|
24KB
|
910 lines
/* @(#)doproc.c (c) copyright 10/18/86 (Dan Heller) */
/* do main panel item procedures */
#include "mush.h"
extern void start_textsw_edit();
extern Panel get_compose_panel();
void set_comp_items();
extern Panel_item
file_item, folder_text_item, folder_item, msg_num_item, read_item,
reply_item, save_item, sub_hdr_item[6];
/* following macro is for the next two procedures */
#define hdr_item(item) \
(item == sub_hdr_item[0] || item == sub_hdr_item[1] || \
item == sub_hdr_item[2] || item == sub_hdr_item[3] || \
item == sub_hdr_item[4] || item == sub_hdr_item[5])
void
delete_mail(item, value, event)
register Panel_item item;
int value;
register Event *event;
{
int val = value; /* save cuz we reset value immediately */
u_long bang = ison(glob_flags, IGN_BANG);
char buf[128];
(void) panel_set(item, PANEL_VALUE, 0, 0);
if (hdr_item(item) && event_id(event) != MS_LEFT || val == 2) {
help(0, "delete", tool_help);
return;
}
/* delete current message */
wprint(sprintf(buf, "\\%sdelete %s\n",
((event_id(event) == MS_LEFT || val == 0)? "" : "un"),
panel_get_value(msg_num_item)) + 1); /* +1 skips the backslash */
turnon(glob_flags, IGN_BANG);
(void) cmd_line(buf, msg_list);
if (!bang)
turnoff(glob_flags, IGN_BANG);
}
void
read_mail(item, value, event)
Panel_item item;
Event *event;
{
int this_msg = current_msg;
/* check "event" in case we were called from hdr_sw.c
* in which case event would be NULL
*/
if (event && event_id(event) == MS_RIGHT && item &&
(item == read_item ||
(item == sub_hdr_item[0] || item == sub_hdr_item[1]))) {
(void) help(0, "next", tool_help);
return;
}
if (item && (item == sub_hdr_item[4] || item == sub_hdr_item[5])) {
(void) help(0, "Menu Read", tool_help);
return;
}
if (!msg_cnt) {
wprint ("No Mail.\n");
return;
}
if (item && item == read_item || ison(msg[current_msg].m_flags, DELETE))
(void) next_msg();
if (this_msg != current_msg || ison(msg[current_msg].m_flags, UNREAD) ||
(current_msg < n_array[0] || current_msg > n_array[screen])) {
set_isread(current_msg);
(void) do_hdrs(0, DUBL_NULL, NULL);
}
if (isoff(msg[current_msg].m_flags, DELETE))
display_msg(current_msg, (u_long)0);
}
/* the panel button that says "filename" and "directory", etc... text item */
Panel_setting
file_dir(item, event)
Panel_item item;
Event *event;
{
register char *p;
u_long bang = ison(glob_flags, IGN_BANG);
char buf[MAXPATHLEN];
if (event_id(event) == ESC) {
/* file expansion request */
int n;
char **files;
p = panel_get_value(item);
(void) sprintf(buf, "%s*", p);
timeout_cursors(1);
if ((n = filexp(buf, &files)) > 0) {
Debug("%d: ",n), print_argv(files);
if (n > 1) {
n = lcprefix(files, 0);
files[0][n] = 0;
}
panel_set_value(item, trim_filename(files[0]));
free_vec(files);
} else
errbell(n); /* see curs_io.c */
timeout_cursors(0);
return PANEL_NONE;
}
if (item == folder_text_item) {
(void) sprintf(buf, "folder %s %s",
(ison(glob_flags, READ_ONLY) || ison(glob_flags, DO_UPDATE) &&
!ask("Folder has been modified. Update changes?"))? "!" : "",
panel_get_value(folder_text_item));
}
else if (item == file_item) {
register char *b = buf;
char msgstr[BUFSIZ];
if (event_id(event) == '\n' || event_id(event) == '\r')
b += Strcpy(buf, "save ");
else
b += Strcpy(buf, "write ");
if ((p = panel_get_value(msg_num_item)) && *p)
b += Strcpy(b, p);
else {
if (ison(msg[current_msg].m_flags, DELETE) &&
!do_set(set_options, "show_deleted")) {
(void) sprintf(msgstr, "Message %d deleted -- save anyway?",
current_msg+1);
if (ask(msgstr) != TRUE) {
wprint("Message not saved\n");
return PANEL_NONE;
}
}
b += strlen(sprintf(b, "%d", current_msg+1));
}
*b++ = ' ', *b = 0;
if (!(p = panel_get_value(item)) || !*p &&
(!(p = do_set(set_options, "mbox")) || !*p))
p = DEF_MBOX;
if (chk_option("verify", "save")) {
(void) sprintf(msgstr, "%s in \"%s\"?", buf, trim_filename(p));
if (ask(msgstr) != TRUE) {
wprint("Message not saved\n");
return PANEL_NONE;
}
}
(void) strcpy(b, p); /* now add to command */
}
turnon(glob_flags, IGN_BANG);
(void) cmd_line(buf, msg_list);
if (!bang)
turnoff(glob_flags, IGN_BANG);
return PANEL_NONE;
}
#ifndef NO_WALK_MENUS
void
xx_file_dir(item, value)
Panel_item item;
char * value;
{
char buf[BUFSIZ];
u_long bang = ison(glob_flags, IGN_BANG);
if (item == folder_item) {
(void) sprintf(buf, "folder %s ",
(ison(glob_flags, READ_ONLY) || ison(glob_flags, DO_UPDATE) &&
!ask("Folder has been modified. Update changes?"))? "!" : "");
strcat(buf, value);
} else if (item == save_item) {
char msgstr[BUFSIZ], *p;
register char *p2 = (char *)panel_get_value(msg_num_item);
(void) strcpy(buf, "save ");
if (p2 && *p2) {
(void) strcat(buf, p2);
(void) strcat(buf, " ");
}
(void) strcat(buf, value);
if (chk_option("verify", "save")) {
(void) sprintf(msgstr, "Save in %s? ", trim_filename(value));
if (ask(msgstr) != TRUE) {
wprint("Message not saved\n");
return;
}
}
}
turnon(glob_flags, IGN_BANG);
(void) cmd_line(buf, msg_list);
if (!bang)
turnoff(glob_flags, IGN_BANG);
(void) panel_set(item, PANEL_VALUE, 0, NULL); /* remove last value */
}
/*
* callback routine for the panel items that need filename input.
* (folder and save)
*/
void
do_file_dir(item, event)
Panel_item item;
Event *event;
{
if (item == folder_item) {
char *p = panel_get_value(folder_text_item);
if (!*p) {
ok_box("Enter folder name.");
return;
}
xx_file_dir(item, p);
} else if (item == save_item) {
if (!strcmp("Filename:", panel_get(file_item,PANEL_LABEL_STRING))) {
event_id(event) = '\n'; /* let file_dir think it got a \n */
file_dir(file_item, event);
return;
}
}
(void) panel_set(item, PANEL_VALUE, 0, NULL); /* remove last value */
}
#else /* NO_WALK_MENUS */
/*
* callback routine for the panel items that need filename input.
* (folder and save)
*/
void
do_file_dir(item, value, event)
Panel_item item;
int value;
Event *event;
{
char buf[BUFSIZ];
u_long bang = ison(glob_flags, IGN_BANG);
if (item == folder_item) {
(void) sprintf(buf, "folder %s ",
(ison(glob_flags, READ_ONLY) || ison(glob_flags, DO_UPDATE) &&
!ask("Folder has been modified. Update changes?"))? "!" : "");
if (event_id(event) == MS_LEFT) {
char *p = panel_get_value(folder_text_item);
if (!*p) {
ok_box("Enter folder name.");
return;
}
(void) strcat(buf, p);
} else if (!value)
(void) strcat(buf, "%");
else if (value == 1)
(void) strcat(buf, "&");
else if (value == 2)
(void) strcat(buf, "#");
else
(void) strcat(buf, panel_get(item, PANEL_CHOICE_STRING, value));
} else if (item == save_item) {
char msgstr[BUFSIZ], *p;
(void) strcpy(buf, "save ");
if (event_id(event) == MS_LEFT) {
if (!strcmp("Filename:", panel_get(file_item,PANEL_LABEL_STRING))) {
event_id(event) = '\n'; /* let file_dir think it got a \n */
file_dir(file_item, event);
return;
}
} else if (value == 0) {
register char *p2 = (char *)panel_get_value(msg_num_item);
if (!(p = do_set(set_options, "mbox")) || !*p)
p = DEF_MBOX;
if (p2 && *p2) {
(void) strcat(buf, p2);
(void) strcat(buf, " ");
}
(void) strcat(buf, p);
} else
(void) strcat(buf, p = panel_get(item, PANEL_CHOICE_STRING, value));
if (chk_option("verify", "save")) {
(void) sprintf(msgstr, "Save in %s? ", trim_filename(p));
if (ask(msgstr) != TRUE) {
wprint("Message not saved\n");
return;
}
}
}
turnon(glob_flags, IGN_BANG);
(void) cmd_line(buf, msg_list);
if (!bang)
turnoff(glob_flags, IGN_BANG);
(void) panel_set(item, PANEL_VALUE, 0, NULL); /* remove last value */
}
#endif /* NO_WALK_MENUS */
/*ARGSUSED*/
void
do_help(item, value, event)
Panel_item item;
register int value;
Event *event;
{
register char *p, *helpfile = tool_help;
if (!event || event_id(event) == MS_LEFT)
value = 0;
switch(value) {
case 0: p = "about", helpfile = cmd_help;
when 1: p = "help";
when 2: p = "mouse";
when 3: p = "windows";
when 4: p = "hdr_format", helpfile = cmd_help;
when 5: p = "msg_list", helpfile = cmd_help;
when 6: p = "folder";
otherwise: p = "general";
}
(void) help(0, p, helpfile);
}
/*ARGSUSED*/
void
do_update(item, value, event)
Panel_item item;
int value;
Event *event;
{
char *argv[2];
if (event && event_id(event) != MS_LEFT) {
if (value == 0) {
if (check_new_mail() == 0)
print("No new mail.\n");
} else
(void) help(0, "update", tool_help);
return;
}
argv[0] = "update";
argv[1] = NULL;
timeout_cursors(TRUE);
(void) folder(0, argv, NULL);
timeout_cursors(FALSE);
}
/*ARGSUSED*/
void
toolquit(item, value, event)
Panel_item item;
int value;
Event *event;
{
void wmgr_changestate(), wmgr_changelevel();
register int which;
if (!value || event_id(event) == MS_LEFT) {
if (ison(glob_flags, DO_UPDATE)) {
do_update(NO_ITEM, 0, NO_EVENT);
turnoff(glob_flags, NEW_MAIL);
}
check_icons();
mail_status(0); /* lower flag (if up) print current num of msgs */
/* wmgr_changestate (window_get(tool, WIN_FD), rootfd, TRUE); */
/* wmgr_changelevel (window_get(tool, WIN_FD), parentfd, TRUE); */
close_frame();
window_set(tool, FRAME_CLOSED, TRUE, NULL);
is_iconic = ((int) window_get(tool, FRAME_CLOSED));
return;
} else if (value == 2) {
(void) help(0, "quit", tool_help);
return;
}
/* modify this to check for "abort" choice when ternary return values
* are possible!
*/
if (isoff(glob_flags, DO_UPDATE) ||
ask("Folder has been modified -- update?")) {
if (!copyback("Quit anyway?", TRUE))
return;
}
cleanup(0);
}
/*ARGSUSED*/
void
do_mark(item, value, event)
Panel_item item;
int value;
Event *event;
{
if (event && (event_id(event) == MS_LEFT) || value == 0) {
int msg_num = event? current_msg : (int)item;
/* mark message */
if (ison(msg[msg_num].m_flags, M_PRIORITY(0)))
turnoff(msg[msg_num].m_flags, M_PRIORITY(0));
else
turnon(msg[msg_num].m_flags, M_PRIORITY(0));
(void) do_hdrs(0, DUBL_NULL, NULL);
} else if (value < 7) {
/* set priority */
char buf[90];
(void) cmd_line(sprintf(buf, "mark -%c %s",
value < 6? value + 'A' - 1 : ' ',
panel_get_value(msg_num_item)), NULL);
} else
(void) help(0, "mark", tool_help);
if (value != 7 && item)
panel_set_value(item, 0);
}
/*ARGSUSED*/
void
do_lpr(item, value, event)
Panel_item item;
int value;
Event *event;
{
char buf[128];
if (event && (event_id(event) == MS_LEFT)) {
wprint("Sending message %d to printer...\n", current_msg+1);
(void) strcpy(buf, "lpr ");
if (value)
(void) sprintf(buf, "lpr \"%s\"", panel_get_value(msg_num_item));
timeout_cursors(TRUE);
(void) cmd_line(buf, msg_list);
timeout_cursors(FALSE);
} else
(void) help(0, "printer", tool_help);
}
/* panel selection button pressed to send a letter.
* we've attached the sign panel item to this item to 1) avoid
* using a global and 2) make it general enough so that multiple
* compose windows can have multiple send_items and we can
* identify which sign/fortune items are associated with this
* particular letter. The fortune item is attached to the sign
* item.
*/
/*ARGSUSED*/
void
do_send(item, value, event)
Panel_item item;
int value;
register Event *event;
{
Panel panel = (Panel)panel_get(item, PANEL_PARENT_PANEL);
Panel_item sign_item = (Panel_item)panel_get(item, PANEL_CLIENT_DATA);
Panel_item fortune_item =
(Panel_item)panel_get(sign_item, PANEL_CLIENT_DATA);
Textsw textsw = (Textsw)panel_get(panel, PANEL_CLIENT_DATA);
char *argv[5], buf[64];
char *file = (char *)window_get(textsw, TEXTSW_CLIENT_DATA);
char *p, *oldsign = NULL, *oldfortune = NULL;
if (textsw_store_file(textsw, file, 0, 0)) {
error("Can't save to %s", file);
return;
}
/* check if user changed variables before sending */
if (p = do_set(set_options, "autosign"))
oldsign = savestr(p);
if (panel_get_value(sign_item) && !oldsign)
cmd_line(strcpy(buf, "\\set autosign"), NULL);
else if (!panel_get_value(sign_item) && oldsign)
cmd_line(strcpy(buf, "\\unset autosign"), NULL);
if (p = do_set(set_options, "fortune"))
oldfortune = savestr(p);
if (panel_get_value(fortune_item) && !oldfortune)
(void) cmd_line(strcpy(buf, "\\set fortune"), NULL);
else if (!panel_get_value(fortune_item) && oldfortune)
(void) cmd_line(strcpy(buf, "\\unset fortune"), NULL);
turnoff(glob_flags, IS_GETTING);
argv[0] = "mail";
argv[1] = "-Uh";
argv[2] = file;
argv[3] = NULL;
clear_msg_list(msg_list);
timeout_cursors(TRUE);
if (do_mail(3, argv, msg_list) == 0) {
(void) unlink(file);
set_comp_items(panel);
}
if (panel_get_value(sign_item) && !oldsign)
(void) cmd_line(strcpy(buf, "\\unset autosign"), NULL);
else if (!panel_get_value(sign_item) && oldsign) {
argv[0] = "set";
argv[1] = "autosign";
if (*oldsign) {
argv[2] = "=";
argv[3] = oldsign;
argv[4] = NULL;
(void) set(4, argv, NULL);
} else {
argv[2] = NULL;
(void) set(2, argv, NULL);
}
}
if (panel_get_value(fortune_item) && !oldfortune)
cmd_line(strcpy(buf, "\\unset fortune"), NULL);
else if (!panel_get_value(fortune_item) && oldfortune) {
argv[0] = "set";
argv[1] = "fortune";
if (*oldfortune) {
argv[2] = "=";
argv[3] = oldfortune;
argv[4] = NULL;
(void) set(4, argv, NULL);
} else {
argv[2] = NULL;
(void) set(2, argv, NULL);
}
}
xfree(oldsign), xfree(oldfortune);
timeout_cursors(FALSE);
}
/*ARGSUSED*/
void
do_include(item, value, event)
Panel_item item;
int value;
Event *event;
{
extern FILE *ed_fp;
char *p, buf[64], *file;
Textsw textsw = (Textsw)panel_get(panel_get(item, PANEL_PARENT_PANEL),
PANEL_CLIENT_DATA);
if (event && event_id(event) == MS_LEFT)
value = 0;
if (value == 2) {
(void) help(0, "include", tool_help);
return;
}
p = panel_get_value(msg_num_item);
(void) sprintf(buf, "%c%c%s", *escape, value == 0? 'i' : 'f', p? p : "");
file = (char *)window_get(textsw, TEXTSW_CLIENT_DATA);
if (textsw_store_file(textsw, file, 0, 0)) {
(void) ask("Something's wrong... Click anything.");
return;
}
if (ed_fp) {
(void) ask("tmpfile already in use... Click anything.");
(void) fclose(ed_fp);
}
if (!(ed_fp = mask_fopen(file, "a"))) {
error("Cannot open %s to append msg.", file);
return;
}
(void) add_to_letter(buf);
(void) fclose(ed_fp), ed_fp = NULL_FILE;
#ifdef SUN_4_0 /* SunOS 4.0+ */
window_set(textsw, TEXTSW_FILE_CONTENTS, file, NULL);
#else /* SUN_4_0 */
textsw_load_file(textsw, file, 1, 0, 0);
#endif /* SUN_4_0 */
window_set(textsw, TEXTSW_UPDATE_SCROLLBAR, NULL);
(void) unlink(file);
}
/*ARGSUSED*/
void
do_compose(item, value, event)
Panel_item item;
int value;
Event *event;
{
char buf[5];
if (event && event_id(event) != MS_LEFT) {
(void) help(0, "compose", tool_help);
return;
}
open_compose();
if (!compose_frame)
return; /* open failed */
clear_msg_list(msg_list);
if (do_mail(0, DUBL_NULL, msg_list) == 0) {
Panel panel = get_compose_panel();
Textsw textsw = (Textsw)panel_get(panel, PANEL_CLIENT_DATA);
start_textsw_edit(textsw, TRUE);
set_comp_items(panel);
}
}
/*
* notify proc for reply button -- also called from select.c (do_menu()) ,
* in which case "event" is null and "value" contains the message
* number of the message to reply to.
*/
/*ARGSUSED*/
void
respond_mail(item, value, event)
Panel_item item;
int value;
Event *event;
{
int tmp = current_msg;
char buf[256];
if (event && event_id(event) == MS_LEFT)
value = 0;
if (event && value == 4) {
(void) help(0, "respond", tool_help);
return;
}
if (!msg_cnt) {
wprint("No messages to respond to.\n");
return;
}
if (ison(glob_flags, IS_GETTING)) {
wprint("Finish editing current message first.\n");
return;
}
if (!event)
tmp = value, value = 0;
open_compose();
if (!compose_frame)
return; /* open failed */
(void) sprintf(buf, "%s %s %d",
(value == 2 || value == 3)? "\\replyall" : "\\replysender",
(value == 1 || value == 3)? "-i": NO_STRING, tmp+1);
if (cmd_line(buf, NULL) != -1) {
Panel panel = get_compose_panel();
Textsw textsw = (Textsw)panel_get(panel, PANEL_CLIENT_DATA);
wprint("Responding to message %d\n", tmp+1);
start_textsw_edit(textsw, FALSE);
set_comp_items(panel);
}
}
/*ARGSUSED*/
void
load_from_file(item, value, event)
Panel_item item;
int value;
Event *event;
{
int x = 0;
Textsw textsw;
Panel_item filename_item = (Panel_item)panel_get(item, PANEL_CLIENT_DATA);
char *file, *p = panel_get_value(filename_item);
#ifndef SUN_4_0 /* SunOS 4.0+ */
char *sfile, buf[128];
extern FILE *ed_fp;
#endif /* SUN_4_0 */
if (!*p) {
wprint("Specify Filename.\n");
return;
}
file = getpath(p, &x);
if (x == 1)
wprint("%s: is a directory.\n", p);
else if (x == -1)
wprint("%s: %s\n", p, file);
if (x)
return;
timeout_cursors(TRUE);
textsw = (Textsw)panel_get(panel_get(item, PANEL_PARENT_PANEL),
PANEL_CLIENT_DATA);
if (event_id(event) != MS_LEFT && value == 1)
/* replace */
textsw_load_file(textsw, file, 1, 0, 0);
else {
/* insert */
#ifdef SUN_4_0 /* SunOS 4.0+ */
window_set(textsw, TEXTSW_INSERT_FROM_FILE, file, NULL);
#else /* SUN_4_0 */
/* best we can do with pre 4.0 is save the current file
* and append the new file onto the end.
*/
sfile = (char *)window_get(textsw, TEXTSW_CLIENT_DATA);
if (textsw_store_file(textsw, sfile, 0, 0)) {
(void) ask("Can't save file... Click anything.");
return;
}
if (ed_fp) {
(void) ask("tmpfile already in use... Click anything.");
fclose(ed_fp);
}
if (!(ed_fp = mask_fopen(sfile, "a"))) {
error("Cannot open %s.", sfile);
return;
}
(void) sprintf(buf, "%c%c%s", *escape, 'r', trim_filename(p));
(void) add_to_letter(buf);
(void) fclose(ed_fp), ed_fp = NULL_FILE;
textsw_load_file(textsw, sfile, 1, 0, 0);
(void) unlink(sfile);
#endif /* SUN_4_0 */
}
window_set(textsw, TEXTSW_UPDATE_SCROLLBAR, NULL);
panel_set_value(item, 0);
timeout_cursors(FALSE);
}
/*ARGSUSED*/
void
save_to_file(item, value, event)
Panel_item item;
Event *event;
{
Panel_item filename_item = panel_get(item, PANEL_CLIENT_DATA);
char *file = panel_get_value(filename_item);
FILE *fp;
Textsw textsw = (Textsw)panel_get(panel_get(item, PANEL_PARENT_PANEL),
PANEL_CLIENT_DATA);
if (!*file) {
wprint("Specify Filename\n");
return;
}
timeout_cursors(TRUE);
/* append to file -- no confirmation necessary */
if (fp = open_file(file, FALSE, TRUE)) {
char buf[BUFSIZ];
Textsw_index next_pos = 0, tmp;
Textsw_index length =
(Textsw_index)window_get(textsw, TEXTSW_LENGTH);
do {
tmp = next_pos;
next_pos = (Textsw_index) window_get(textsw, TEXTSW_CONTENTS,
next_pos, buf, sizeof(buf));
if (fwrite(buf, sizeof(char), (int)(next_pos - tmp), fp) == 0)
error("%s may be incomplete", file);
} while (next_pos < length);
(void) close_lock(file, fp);
wprint("Wrote %d bytes to %s\n", length, trim_filename(file));
}
timeout_cursors(FALSE);
}
void
abort_mail(item, event)
Panel_item item;
Event *event;
{
Panel panel = (Panel)panel_get(item, PANEL_PARENT_PANEL);
Textsw textsw = (Textsw)panel_get(panel, PANEL_CLIENT_DATA);
wprint("Aborted letter.\n");
textsw_reset(textsw, 0, 0);
rm_edfile(0);
set_comp_items(panel);
}
/* set the compose panel items */
void
set_comp_items(panel)
Panel panel;
{
Panel_item item, next;
Textsw textsw = (Textsw)panel_get(panel, PANEL_CLIENT_DATA);
int getting = ison(glob_flags, IS_GETTING) != 0;
int i = 0;
window_set(textsw, TEXTSW_READ_ONLY, !getting, NULL);
/* remove next line when multiple composes become a reality */
(void) panel_set(reply_item, PANEL_SHOW_ITEM, !getting, NULL);
/* skip "close" item */
item = (Panel_item) panel_get(panel, PANEL_FIRST_ITEM);
for (item = (Panel_item) panel_get(item, PANEL_NEXT_ITEM);
item; item = next) {
next = (Panel_item) panel_get(item, PANEL_NEXT_ITEM);
(void) panel_set(item,
PANEL_SHOW_ITEM, (i++ < 1)? !getting : getting, NULL);
}
}
/*
* Ask a yes/no question and return an answer: TRUE or FALSE.
*/
ask(question)
char *question;
{
#ifdef SUN_4_0 /* SunOS 4.0+ */
return alert_prompt(tool, (Event *)NULL,
ALERT_MESSAGE_STRINGS, question, NULL,
ALERT_BUTTON_YES, "Yes",
ALERT_BUTTON_NO, "No",
NULL) == ALERT_YES;
#else /* SUN_4_0 */
Event event;
struct prompt prompt;
Rect *rect = (Rect *)window_get(tool, WIN_RECT);
char buf[MAXPATHLEN];
(void) sprintf(buf,
"%s \nPress LEFT Button to Confirm. Anything else to cancel.",
question);
prompt.prt_rect.r_left = rect->r_left + (rect->r_width / 3);
prompt.prt_rect.r_top = rect->r_top + (rect->r_height / 3);
prompt.prt_rect.r_width = prompt.prt_rect.r_height = PROMPT_FLEXIBLE;
prompt.prt_font = mush_font;
prompt.prt_text = buf;
menu_prompt(&prompt, &event, window_get(tool, WIN_FD));
return event_id(&event) == MS_LEFT;
#endif /* SUN_4_0 */
}
void
ok_box(buf)
char *buf;
{
#ifdef SUN_4_0
(void) alert_prompt(tool, (Event *)NULL,
ALERT_MESSAGE_STRINGS, buf, NULL,
ALERT_BUTTON_YES, "Ok",
NULL);
#else /* SUN_4_0 */
Event event;
struct prompt prompt;
Rect *rect = (Rect *)window_get(tool, WIN_RECT);
(void) strcat(buf, " \nPress LEFT Button to Continue.");
prompt.prt_rect.r_left = rect->r_left + (rect->r_width / 3);
prompt.prt_rect.r_top = rect->r_top + (rect->r_height / 3);
prompt.prt_rect.r_width = prompt.prt_rect.r_height = PROMPT_FLEXIBLE;
prompt.prt_font = mush_font;
prompt.prt_text = buf;
menu_prompt(&prompt, &event, window_get(tool, WIN_FD));
#endif /* SUN_4_0 */
}
Panel_setting
msg_num_done(item, event)
Panel_item item;
Event *event;
{
char buf[82];
u_long bang = ison(glob_flags, IGN_BANG);
register char *p;
int n;
if (event_id(event) != '\n' && event_id(event) != '\r') {
(void) help(0, "message range", tool_help);
return PANEL_NONE;
}
(void) sprintf(buf, "headers %s", (p = (char *)panel_get_value(item)));
(void) panel_set(item, PANEL_VALUE, NO_STRING, NULL);
if (!(n = chk_msg(p)))
return PANEL_NONE;
current_msg = --n;
turnon(glob_flags, IGN_BANG);
(void) cmd_line(buf, msg_list);
if (!bang)
turnoff(glob_flags, IGN_BANG);
(void) display_msg(n, (u_long)0);
return PANEL_NONE;
}
void
do_sort(item, value, event)
Panel_item item;
int value;
Event *event;
{
char *argv[3], list[MAXMSGS_BITS];
char *p = (char *)panel_get_value(msg_num_item);
int n = 0;
if (p && *p) {
argv[0] = p;
argv[1] = NULL;
n = get_msg_list(argv, list);
}
argv[0] = "sort";
argv[2] = NULL;
if (event_id(event) == MS_LEFT)
value = 0;
switch(value) {
case 0: argv[1] = "S";
when 1: argv[1] = "a";
when 2: argv[1] = "l";
when 3: argv[1] = "R";
when 4: argv[1] = "s";
when 5: argv[1] = "d";
when 6: argv[1] = "p";
when 7: if (!(argv[1] = do_set(set_options, "sort"))) return;
when 8: (void) help(0, "sort", tool_help);
}
if (value != 8) {
if (n > 0) {
turnon(glob_flags, IS_PIPE);
(void) sort(2, argv, list);
turnoff(glob_flags, IS_PIPE);
} else
(void) sort(2, argv, NULL);
(void) do_hdrs(0, DUBL_NULL, NULL);
}
(void) panel_set(item, PANEL_VALUE, 0, NULL);
}
void
do_options(item, value, event)
Panel_item item;
int value;
Event *event;
{
if (event_id(event) == MS_LEFT) {
view_options();
return;
}
switch (value) {
case 0:
view_options();
when 1:
do_ignore();
when 2:
do_aliases();
}
}