2 * $Id: lang.c,v 1.5 2005/02/12 00:31:46 cpressey Exp $
25 { "ru", "cp866-8x8", "cp866-8x14", "cp866-8x16", "ru.koi8-r", "koi8-r2cp866", "ru_RU.KOI8-R", "KOI8-R", "cons25r" }
28 #define langcount (sizeof(langset) / sizeof(struct _langset))
30 static int get_lang_num(const char *langname
);
31 static int system_fmt(const char *fmt
, ...) __printflike(1, 2);
35 get_lang_num(const char *langname
)
39 for(i
=0; i
< langcount
; i
++)
40 if(strcmp(langset
[i
].name
, langname
) == 0)
47 system_fmt(const char *fmt
, ...)
53 vasprintf(&command
, fmt
, args
);
57 fprintf(stderr
, "%s\n", command
);
60 return(system(command
));
65 set_lang_syscons(const char *id
)
69 lang_num
= get_lang_num(id
);
74 #define kbddev "/dev/ttyv0"
75 #define viddev "/dev/ttyv0"
76 #define kbdcontrol "/usr/sbin/kbdcontrol"
77 #define vidcontrol "/usr/sbin/vidcontrol"
80 system_fmt("%s < %s -l %s", kbdcontrol
, kbddev
, langset
[lang_num
].keymap
) != 0 ||
81 system_fmt("%s < %s -l %s", vidcontrol
, viddev
, langset
[lang_num
].scrnmap
) != 0 ||
82 system_fmt("%s < %s -f 8x8 %s", vidcontrol
, viddev
, langset
[lang_num
].font8x8
) != 0 ||
83 system_fmt("%s < %s -f 8x14 %s", vidcontrol
, viddev
, langset
[lang_num
].font8x14
) != 0 ||
84 system_fmt("%s < %s -f 8x16 %s", vidcontrol
, viddev
, langset
[lang_num
].font8x16
) != 0)
90 /* do this for each side (backend, frontend) */
92 set_lang_envars(const char *id
)
98 lang_num
= get_lang_num(id
);
103 /* gettext recommended setting */
104 setenv("LANGUAGE", langset
[lang_num
].name
, 1);
106 /* also should be set */
107 setenv("LANG", langset
[lang_num
].language
, 1);
109 /* set this too for completeness */
110 setenv("MM_CHARSET", langset
[lang_num
].charset
, 1);
112 /* TERM must be set for some encodings */
113 term
= getenv("TERM");
114 if((strcmp(term
,"cons25") == 0) &&
115 langset
[lang_num
].term
!= NULL
)
116 setenv("TERM", langset
[lang_num
].term
, 1);