/* setmetamode.c Written by Kazuhiro Fujieda 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 #include #include #include #include #include #include static void usage (void) { fprintf (stderr, "Usage: %s [metabit|escprefix]\n" "\n" "Get or set keyboard meta mode\n" "\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" "\n" "Other options:\n" "\n" " -h, --help This text\n" " -V, --version Print program version and exit\n\n", program_invocation_short_name); } static void error (void) { fprintf (stderr, "%s: The standard input isn't a console device.\n", program_invocation_short_name); } void print_version () { printf ("setmetamode (cygwin) %d.%d.%d\n" "Get or set keyboard meta mode\n" "Copyright (C) 2006 - %s Cygwin Authors\n" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", CYGWIN_VERSION_DLL_MAJOR / 1000, CYGWIN_VERSION_DLL_MAJOR % 1000, CYGWIN_VERSION_DLL_MINOR, strrchr (__DATE__, ' ') + 1); } struct option longopts[] = { {"help", no_argument, NULL, 'h'}, {"version", no_argument, NULL, 'V'}, {0, no_argument, NULL, 0} }; const char *opts = "hV"; int main (int ac, char *av[]) { int param; int opt; if (ac < 2) { if (ioctl (0, KDGKBMETA, ¶m) < 0) { error (); return 1; } if (param == 0x03) puts ("metabit"); else puts ("escprefix"); return 0; } while ((opt = getopt_long (ac, av, opts, longopts, NULL)) != -1) switch (opt) { case 'h': usage (); return 0; case 'V': print_version (); return 0; default: fprintf (stderr, "Try `%s --help' for more information.\n", program_invocation_short_name); return 1; } 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; }