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
/
fkeys.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-05-03
|
2KB
|
66 lines
/* @(#)fkeys.c (c) copyright 10/18/86 (Dan Heller) */
#include "mush.h"
#define L(n) KEY_LEFTFIRST+(n)-1
#define R(n) KEY_RIGHTFIRST+(n)-1
#define F(n) KEY_TOPFIRST+(n)-1
#define BREAK_KEY KEY_TOPLAST
static int func_key();
Notify_value
fkey_interposer(client, event, arg, type)
Frame client;
Event *event;
Notify_arg arg;
Notify_event_type type;
{
if ((event_is_key_left(event) || event_is_key_right(event) ||
event_is_key_top(event)) &&
event_is_down(event) && func_key(event_id(event)))
return NOTIFY_DONE;
return notify_next_event_func(client, event, arg, type);
}
/*
* Execute commands defined by a function key.
* Left keys:
* L1 = (null) can't be set
* L2 ... L10
* Top function keys
* F1 ... F9, BREAK/backspace (key not definable)
* Right function keys
* R1 ... R15
* Usually, the last Function key displays the others' settings.
*/
static int
func_key(key)
register int key;
{
register char **argv, *p;
char buf[256];
int n;
if (key >= KEY_LEFTFIRST && key <= KEY_LEFTLAST)
buf[0] = 'L', n = key - KEY_LEFTFIRST;
else if (key >= KEY_TOPFIRST && key <= KEY_TOPLAST)
buf[0] = 'F', n = key - KEY_TOPFIRST;
else if (key >= KEY_RIGHTFIRST && key <= KEY_RIGHTLAST)
buf[0] = 'R', n = key - KEY_RIGHTFIRST;
(void) sprintf(buf+1, "%d", n+1);
if (!(p = do_set(fkeys, buf))) {
if (!chk_option("quiet", "fkey"))
wprint("Function key \"%s\" not set.\n", buf);
return FALSE;
}
/* make_command will screw up "p", so copy it first */
(void) strcpy(buf, p);
Debug("(%s) \"%s\": ", key, p), turnon(glob_flags, CONT_PRNT);
if (argv = make_command(buf, TRPL_NULL, &n))
(void) do_command(n, argv, msg_list);
return TRUE;
}