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
/
misc_frame.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-05-03
|
8KB
|
301 lines
/* @(#) misc_frame.c (c) copyright 9/29/89 (Dan Heller) */
/*
* This file contains several functions which create dialog box frames
* for (currently) mail aliases and ignored headers. Each dialog box
* has a list of some kind and a way to add or delete items from the
* list. The list is a textsw which is updated (currently) by do_set().
* Public routines:
* update_list_textsw(struct options **) updates the textsw list.
* do_alias() creates the alias dialog frame box
* do_ignore() creates the ignored headers dialog frame box
*/
#include "mush.h"
extern Notify_value fkey_interposer();
/****************** Mail Aliases ********************/
Frame alias_frame;
Panel_item alias_msg, alias_name, alias_value, alias_list_textsw;
static void set_alias();
Frame ignore_frame;
Panel_item ignore_msg, ignore_name, ignore_list_textsw;
static Panel_setting set_ignore();
#define MY_FRAME_WIDTH 600
static void
frame_help(item)
Panel_item item;
{
(void) help(0, panel_get(item, PANEL_CLIENT_DATA), tool_help);
}
void
update_list_textsw(list)
struct options **list;
{
Textsw save = pager_textsw;
if (list == &aliases)
pager_textsw = alias_list_textsw;
else if (list == &ignore_hdr)
pager_textsw = ignore_list_textsw;
else
/* no textsw for this guy yet */
return;
if (pager_textsw && !!window_get(pager_textsw, WIN_SHOW))
(void) do_set(*list, NULL);
pager_textsw = save;
}
static void
alias_done()
{
window_destroy(alias_frame);
alias_frame = (Frame) 0;
}
void
do_aliases()
{
Panel panel;
if (alias_frame) {
window_set(alias_frame, WIN_SHOW, TRUE, NULL);
return;
}
#ifdef SUN_3_5
if (nopenfiles(0) < 5) {
print("Too many frames; close one first!\n");
return;
}
#endif /* SUN_3_5 */
alias_frame = window_create(tool, FRAME,
FRAME_SHOW_LABEL, TRUE,
FRAME_LABEL, "Mail Aliases",
FRAME_NO_CONFIRM, TRUE,
FRAME_DONE_PROC, alias_done,
WIN_SHOW, TRUE,
WIN_WIDTH, MY_FRAME_WIDTH,
NULL);
panel = window_create(alias_frame, PANEL,
PANEL_WIDTH, MY_FRAME_WIDTH,
NULL);
notify_interpose_event_func(panel, fkey_interposer, NOTIFY_SAFE);
panel_create_item(panel, PANEL_BUTTON,
PANEL_LABEL_IMAGE,
panel_button_image(panel, "Help", 4, mush_font),
PANEL_CLIENT_DATA, "aliases",
PANEL_NOTIFY_PROC, frame_help,
NULL);
panel_create_item(panel, PANEL_BUTTON,
PANEL_LABEL_IMAGE,
panel_button_image(panel, "Set", 3, mush_font),
PANEL_NOTIFY_PROC, set_alias,
PANEL_CLIENT_DATA, TRUE,
NULL);
panel_create_item(panel, PANEL_BUTTON,
PANEL_LABEL_IMAGE,
panel_button_image(panel, "Unset", 5, mush_font),
PANEL_NOTIFY_PROC, set_alias,
PANEL_CLIENT_DATA, FALSE,
NULL);
alias_msg = panel_create_item(panel, PANEL_MESSAGE,
PANEL_LABEL_STRING,
"Type name of alias and address list and select <set> or <unset>",
NULL);
alias_name = panel_create_item(panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Alias Name:",
PANEL_VALUE_DISPLAY_LENGTH, 60,
NULL);
alias_value = panel_create_item(panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Alias Address(es):",
PANEL_VALUE_DISPLAY_LENGTH, 60,
NULL);
window_fit_height(panel);
alias_list_textsw = window_create(alias_frame, TEXTSW,
WIN_BELOW, panel,
WIN_WIDTH, MY_FRAME_WIDTH,
WIN_HEIGHT, 15 * l_height(),
#ifdef SUN_4_0 /* SunOS 4.0+ */
TEXTSW_LINE_BREAK_ACTION, TEXTSW_WRAP_AT_WORD,
#else /* SUN_4_0 */
TEXTSW_LINE_BREAK_ACTION, TEXTSW_WRAP_AT_CHAR,
#endif /* SUN_4_0 */
NULL);
(void) notify_interpose_event_func(alias_list_textsw,
fkey_interposer, NOTIFY_SAFE);
window_fit_height(alias_frame);
update_list_textsw(&aliases);
}
static void
set_alias(item)
Panel_item item;
{
int argc, set_it = (int)panel_get(item, PANEL_CLIENT_DATA);
char buf[BUFSIZ], **argv, *name, *value;
name = panel_get_value(alias_name);
if (!*name) {
panel_set(alias_msg, PANEL_LABEL_STRING, "Need an alias name.", NULL);
return;
}
if (any(name, " \t")) {
panel_set(alias_msg,
PANEL_LABEL_STRING, "Alias name may not contain spaces.",
NULL);
return;
}
if (set_it) {
value = panel_get_value(alias_value);
if (!*value) {
panel_set(alias_msg,
PANEL_LABEL_STRING, "Specify alias address(es).",
NULL);
return;
}
sprintf(buf, "alias %s %s", name, value);
} else
sprintf(buf, "unalias %s", name);
if (!(argv = mk_argv(buf, &argc, TRUE)) || do_alias(argc, argv) == -1)
panel_set(alias_msg,
PANEL_LABEL_STRING, "Couldn't set alias.",
NULL);
else
panel_set(alias_msg,
PANEL_LABEL_STRING, "",
NULL);
panel_set_value(alias_name, "");
panel_set_value(alias_value, "");
free_vec(argv);
}
/* int cuz it's also the callback for the text item */
static Panel_setting
set_ignore(item)
Panel_item item;
{
int argc, set_it = (int)panel_get(item, PANEL_CLIENT_DATA);
char buf[BUFSIZ], *name, **argv;
name = panel_get_value(ignore_name);
if (!*name) {
panel_set(ignore_msg, PANEL_LABEL_STRING, "Missing header name.", NULL);
return PANEL_NONE;
}
if (set_it)
sprintf(buf, "ignore %s", name);
else
sprintf(buf, "unignore %s", name);
/* set() will call update_list_textsw() */
if (!(argv = mk_argv(buf, &argc, TRUE)) || set(argc, argv, NULL) == -1)
panel_set(ignore_msg,
PANEL_LABEL_STRING, "Internal Error!?",
NULL);
else
panel_set(ignore_msg,
PANEL_LABEL_STRING, "",
NULL);
free_vec(argv);
panel_set_value(ignore_name, "");
return PANEL_NONE;
}
static void
ignore_done()
{
window_destroy(ignore_frame);
ignore_frame = (Frame) 0;
}
void
do_ignore()
{
Panel panel;
if (ignore_frame) {
window_set(ignore_frame, WIN_SHOW, TRUE, NULL);
return;
}
#ifdef SUN_3_5
if (nopenfiles(0) < 5) {
print("Too many frames; close one first!\n");
return;
}
#endif /* SUN_3_5 */
ignore_frame = window_create(tool, FRAME,
FRAME_SHOW_LABEL, TRUE,
FRAME_LABEL, "Ignored Headers",
FRAME_NO_CONFIRM, TRUE,
FRAME_DONE_PROC, ignore_done,
WIN_SHOW, TRUE,
WIN_WIDTH, MY_FRAME_WIDTH,
NULL);
panel = window_create(ignore_frame, PANEL,
PANEL_WIDTH, MY_FRAME_WIDTH,
NULL);
(void) notify_interpose_event_func(panel, fkey_interposer, NOTIFY_SAFE);
(void) panel_create_item(panel, PANEL_BUTTON,
PANEL_LABEL_IMAGE,
panel_button_image(panel, "Help", 4, mush_font),
PANEL_NOTIFY_PROC, frame_help,
PANEL_CLIENT_DATA, "ignore",
NULL);
(void) panel_create_item(panel, PANEL_BUTTON,
PANEL_LABEL_IMAGE,
panel_button_image(panel, "Set", 3, mush_font),
PANEL_NOTIFY_PROC, set_ignore,
PANEL_CLIENT_DATA, TRUE,
NULL);
panel_create_item(panel, PANEL_BUTTON,
PANEL_LABEL_IMAGE,
panel_button_image(panel, "Unset", 5, mush_font),
PANEL_NOTIFY_PROC, set_ignore,
PANEL_CLIENT_DATA, FALSE,
NULL);
ignore_msg = panel_create_item(panel, PANEL_MESSAGE,
PANEL_LABEL_STRING,
"Type name of header to ignore and then <set> or <unset>",
NULL);
ignore_name = panel_create_item(panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Ignored Header:",
PANEL_NOTIFY_PROC, set_ignore,
PANEL_CLIENT_DATA, 1,
PANEL_VALUE_DISPLAY_LENGTH, 60,
NULL);
window_fit_height(panel);
ignore_list_textsw = window_create(ignore_frame, TEXTSW,
WIN_BELOW, panel,
WIN_WIDTH, MY_FRAME_WIDTH,
WIN_HEIGHT, 15 * l_height(),
#ifdef SUN_4_0 /* SunOS 4.0+ */
TEXTSW_LINE_BREAK_ACTION, TEXTSW_WRAP_AT_WORD,
#else /* SUN_4_0 */
TEXTSW_LINE_BREAK_ACTION, TEXTSW_WRAP_AT_CHAR,
#endif /* SUN_4_0 */
NULL);
(void) notify_interpose_event_func(ignore_list_textsw,
fkey_interposer, NOTIFY_SAFE);
window_fit_height(ignore_frame);
update_list_textsw(&ignore_hdr);
}