diff options
Diffstat (limited to 'winsup/utils/setmetamode.c')
-rw-r--r-- | winsup/utils/setmetamode.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/winsup/utils/setmetamode.c b/winsup/utils/setmetamode.c new file mode 100644 index 000000000..65bd02b78 --- /dev/null +++ b/winsup/utils/setmetamode.c @@ -0,0 +1,82 @@ +/* setmetamode.c + + Copyright 2006 Red Hat Inc. + + Written by Kazuhiro Fujieda <fujieda@jaist.ac.jp> + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +#include <stdio.h> +#include <string.h> +#include <sys/ioctl.h> +#include <cygwin/kd.h> + +static const char version[] = "$Revision$"; +static char *prog_name; + +static void +usage (void) +{ + fprintf (stderr, "Usage: %s [metabit|escprefix]\n" + " Without argument, it shows the current meta key mode.\n" + " metabit|meta|bit The meta key sets the top bit of the character.\n" + " escprefix|esc|prefix The meta key sends an escape prefix.\n", + prog_name); +} + +static void +error (void) +{ + fprintf (stderr, + "%s: The standard input isn't a console device.\n", + prog_name); +} + +int +main (int ac, char *av[]) +{ + int param; + + prog_name = strrchr (av[0], '/'); + if (!prog_name) + prog_name = strrchr (av[0], '\\'); + if (!prog_name) + prog_name = av[0]; + else + prog_name++; + + if (ac < 2) + { + if (ioctl (0, KDGKBMETA, ¶m) < 0) + { + error (); + return 1; + } + if (param == 0x03) + puts ("metabit"); + else + puts ("escprefix"); + return 0; + } + if (!strcmp ("meta", av[1]) || !strcmp ("bit", av[1]) + || !strcmp ("metabit", av[1])) + param = 0x03; + else if (!strcmp ("esc", av[1]) || !strcmp ("prefix", av[1]) + || !strcmp ("escprefix", av[1])) + param = 0x04; + else + { + usage (); + return 1; + } + if (ioctl (0, KDSKBMETA, param) < 0) + { + error (); + return 1; + } + return 0; +} |