for (i = 0; i < MAX_NR_KEYMAPS; i++) {
if (kmap->key_map[i]) {
for (j = 0; j < NR_KEYS / 2; j++) {
- v = kmap->key_map[i][j];
+ v = lk_get_key(kmap, i, j);
if (write(1, &v, 2) == -1)
goto fail;
}
for (j = 0; j < NR_KEYS; j++) {
if (!(j % 8))
fprintf(fd, "\n");
- fprintf(fd, "\t0x%04x,", U((kmap->key_map[i])[j]));
+ fprintf(fd, "\t0x%04x,", U(lk_get_key(kmap, i, j)));
}
fprintf(fd, "\n};\n\n");
}
for (i = 1; i < NR_KEYS; i++) {
int buf0, buf1, type;
- buf0 = (kmap->key_map[j])[i];
+ buf0 = lk_get_key(kmap, j, i);
if (buf0 == -1)
break;
if ((type == KT_LATIN || type == KT_LETTER) && KVAL(buf0) < 128) {
buf1 = (kmap->defining[ja])
- ? kmap->key_map[ja][i]
+ ? lk_get_key(kmap, ja, i)
: -1;
if (buf1 != K(KT_META, KVAL(buf0)))
for (j = 0; j < keymapnr; j++) {
buf[j] = (kmap->defining[j])
- ? (kmap->key_map[(kmap->defining[j])-1])[i]
+ ? lk_get_key(kmap, kmap->defining[j]-1, i)
: K_HOLE;
if (buf[j] != K_HOLE)
int lk_add_key(struct keymap *kmap, int k_index, int k_table, int keycode);
int lk_remove_key(struct keymap *kmap, int k_index, int k_table);
+int lk_get_key(struct keymap *kmap, int k_table, int k_index);
int lk_add_func(struct keymap *kmap, struct kbsentry kbs);
}
int
+lk_get_key(struct keymap *kmap, int k_table, int k_index)
+{
+ if (k_index < 0 || k_index >= NR_KEYS) {
+ ERR(kmap, _("lk_get_key called with bad index %d"), k_index);
+ return -1;
+ }
+
+ if (k_table < 0 || k_table >= MAX_NR_KEYMAPS) {
+ ERR(kmap, _("lk_get_key called with bad table %d"), k_table);
+ return -1;
+ }
+
+ if (!(kmap->keymap_was_set[k_table]))
+ return -1;
+
+ return (kmap->key_map[k_table])[k_index];
+}
+
+int
lk_remove_key(struct keymap *kmap, int k_index, int k_table)
{
/* roughly: addkey(k_index, k_table, K_HOLE); */
return -1;
}
- key = (kmap->key_map[r0])[i];
+ key = lk_get_key(kmap, r0, i);
if (do_constant_key(kmap, i, key) == -1)
return -1;
}
ke.kb_index = j;
ke.kb_table = i;
- ke.kb_value = (kmap->key_map[i])[j];
+ ke.kb_value = lk_get_key(kmap, i, j);
fail = ioctl(fd, KDSKBENT, (unsigned long)&ke);
ct++;
INFO(kmap, _("keycode %d, table %d = %d%s"),
- j, i, (kmap->key_map[i])[j], fail ? _(" FAILED") : "");
+ j, i, lk_get_key(kmap,i, j), fail ? _(" FAILED") : "");
if (fail)
WARN(kmap, _("failed to bind key %d to value %d"),
- j, (kmap->key_map[i])[j]);
+ j, lk_get_key(kmap, i, j));
}
} else if (kmap->keymaps_line_seen && !kmap->defining[i]) {
int i, allocct = 0;
for (i = 0; i < MAX_NR_KEYMAPS; i++) {
- if (kmap->key_map[i][0] == K_ALLOCATED)
+ if (lk_get_key(kmap, i, 0) == K_ALLOCATED)
allocct++;
}