~ubuntu-branches/ubuntu/gutsy/kbd/gutsy

« back to all changes in this revision

Viewing changes to src/setmetamode.c

  • Committer: Package Import Robot
  • Author(s): Wartan Hachaturow
  • Date: 2002-01-30 14:01:28 UTC
  • Revision ID: package-import@ubuntu.com-20020130140128-0nb81lp1w40oz0ma
Tags: 1.06-2
* Changed Maintainer: field to wart@debian.org
* Applied patch by Ben Collins, (Closes: #110616)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * setmetamode.c - aeb, 940130
 
3
 *
 
4
 * Call: setmetamode { metabit | escprefix }
 
5
 * and report the setting before and after.
 
6
 * Without arguments setmetamode will only report.
 
7
 */
 
8
 
 
9
#include <stdio.h>
 
10
#include <fcntl.h>
 
11
#include <linux/kd.h>
 
12
#include <sys/ioctl.h>
 
13
#include "nls.h"
 
14
#include "version.h"
 
15
 
 
16
static void
 
17
usage(void)
 
18
{
 
19
    fprintf(stderr, _(
 
20
"Usage:\n"
 
21
"       setmetamode [ metabit | meta | bit | escprefix | esc | prefix ]\n"
 
22
"Each vt has his own copy of this bit. Use\n"
 
23
"       setmetamode [arg] < /dev/ttyn\n"
 
24
"to change the settings of another vt.\n"
 
25
"The setting before and after the change are reported.\n"
 
26
));
 
27
    exit(1);
 
28
}
 
29
 
 
30
static void
 
31
report(int meta) {
 
32
    char *s;
 
33
 
 
34
    switch(meta) {
 
35
      case K_METABIT:
 
36
        s = _("Meta key sets high order bit\n");
 
37
        break;
 
38
      case K_ESCPREFIX:
 
39
        s = _("Meta key gives Esc prefix\n");
 
40
        break;
 
41
      default:
 
42
        s = _("Strange mode for Meta key?\n");
 
43
    }
 
44
    printf(s);
 
45
}
 
46
 
 
47
struct meta {
 
48
    char *name;
 
49
    int val;
 
50
} metas[] = {
 
51
    { "metabit",   K_METABIT },
 
52
    { "meta",      K_METABIT },
 
53
    { "bit",       K_METABIT },
 
54
    { "escprefix", K_ESCPREFIX },
 
55
    { "esc",       K_ESCPREFIX },
 
56
    { "prefix",    K_ESCPREFIX }
 
57
};
 
58
 
 
59
#define SIZE(a) (sizeof(a)/sizeof(a[0]))
 
60
 
 
61
int
 
62
main(int argc, char **argv) {
 
63
    char ometa, nmeta;
 
64
    struct meta *mp;
 
65
 
 
66
    set_progname(argv[0]);
 
67
 
 
68
    setlocale(LC_ALL, "");
 
69
    bindtextdomain(PACKAGE, LOCALEDIR);
 
70
    textdomain(PACKAGE);
 
71
 
 
72
    if (argc == 2 && !strcmp(argv[1], "-V"))
 
73
        print_version_and_exit();
 
74
 
 
75
    if (ioctl(0, KDGKBMETA, &ometa)) {
 
76
        perror("KDGKBMETA");
 
77
        fprintf(stderr,
 
78
                _("Error reading current setting. Maybe stdin is not a VT?\n"));
 
79
        exit(1);
 
80
    }
 
81
 
 
82
    if (argc <= 1) {
 
83
        report(ometa);
 
84
        exit(0);
 
85
    }
 
86
 
 
87
    nmeta = 0;                  /* make gcc happy */
 
88
    for (mp = metas; mp-metas < SIZE(metas); mp++) {
 
89
        if(!strcmp(argv[1], mp->name)) {
 
90
            nmeta = mp->val;
 
91
            goto fnd;
 
92
        }
 
93
    }
 
94
    fprintf(stderr, _("unrecognized argument: _%s_\n\n"), argv[1]);
 
95
    usage();
 
96
 
 
97
  fnd:
 
98
    printf(_("old state:    "));
 
99
    report(ometa);
 
100
    if (ioctl(0, KDSKBMETA, nmeta)) {
 
101
        perror("KDSKBMETA");
 
102
        exit(1);
 
103
    }
 
104
    printf(_("new state:    "));
 
105
    report(nmeta);
 
106
    exit(0);
 
107
}