home *** CD-ROM | disk | FTP | other *** search
- /* @(#)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;
- }
-