Lines Matching +full:128 +full:- +full:character

1 // SPDX-License-Identifier: GPL-2.0
38 255, ARRAY_SIZE(func_table) - 1, NR_FN_HANDLER - 1, 0,
39 NR_DEAD - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
63 '-', /* dead_stroke */
84 kbd->key_maps = kzalloc(sizeof(ebc_key_maps), GFP_KERNEL); in kbd_alloc()
85 if (!kbd->key_maps) in kbd_alloc()
89 kbd->key_maps[i] = kmemdup(ebc_key_maps[i], in kbd_alloc()
92 if (!kbd->key_maps[i]) in kbd_alloc()
96 kbd->func_table = kzalloc(sizeof(ebc_func_table), GFP_KERNEL); in kbd_alloc()
97 if (!kbd->func_table) in kbd_alloc()
101 kbd->func_table[i] = kstrdup(ebc_func_table[i], in kbd_alloc()
103 if (!kbd->func_table[i]) in kbd_alloc()
107 kbd->fn_handler = in kbd_alloc()
109 if (!kbd->fn_handler) in kbd_alloc()
111 kbd->accent_table = kmemdup(ebc_accent_table, in kbd_alloc()
114 if (!kbd->accent_table) in kbd_alloc()
116 kbd->accent_table_size = ebc_accent_table_size; in kbd_alloc()
120 kfree(kbd->fn_handler); in kbd_alloc()
123 kfree(kbd->func_table[i]); in kbd_alloc()
124 kfree(kbd->func_table); in kbd_alloc()
127 kfree(kbd->key_maps[i]); in kbd_alloc()
128 kfree(kbd->key_maps); in kbd_alloc()
140 kfree(kbd->accent_table); in kbd_free()
141 kfree(kbd->fn_handler); in kbd_free()
143 kfree(kbd->func_table[i]); in kbd_free()
144 kfree(kbd->func_table); in kbd_free()
146 kfree(kbd->key_maps[i]); in kbd_free()
147 kfree(kbd->key_maps); in kbd_free()
152 * Generate ascii -> ebcdic translation table from kbd_data.
162 keymap = kbd->key_maps[i]; in kbd_ascebc()
179 * Generate ebcdic -> ascii translation table from kbd_data.
189 keymap = kbd->key_maps[i];
206 * We have a combining character DIACR here, followed by the character CH.
217 d = kbd->diacr; in handle_diacr()
218 kbd->diacr = 0; in handle_diacr()
220 for (i = 0; i < kbd->accent_table_size; i++) { in handle_diacr()
221 if (kbd->accent_table[i].diacr == d && in handle_diacr()
222 kbd->accent_table[i].base == ch) in handle_diacr()
223 return kbd->accent_table[i].result; in handle_diacr()
229 kbd_put_queue(kbd->port, d); in handle_diacr()
240 kbd->diacr = (kbd->diacr ? handle_diacr(kbd, value) : value); in k_dead()
244 * Normal character handler.
249 if (kbd->diacr) in k_self()
251 kbd_put_queue(kbd->port, value); in k_self()
268 if (kbd->func_table[value]) in k_fn()
269 kbd_puts_queue(kbd->port, kbd->func_table[value]); in k_fn()
277 if (kbd->fn_handler[value]) in k_spec()
278 kbd->fn_handler[value](kbd); in k_spec()
282 * Put utf8 character to tty flip buffer.
283 * UTF-8 is defined for words of up to 31 bits,
317 keysym = kbd->key_maps[5][keycode - 384]; in kbd_keycode()
319 keysym = kbd->key_maps[4][keycode - 256]; in kbd_keycode()
320 else if (keycode >= 128) in kbd_keycode()
321 keysym = kbd->key_maps[1][keycode - 128]; in kbd_keycode()
323 keysym = kbd->key_maps[0][keycode]; in kbd_keycode()
327 type -= 0xf0; in kbd_keycode()
332 if (kbd->sysrq) { in kbd_keycode()
333 if (kbd->sysrq == K(KT_LATIN, '-')) { in kbd_keycode()
334 kbd->sysrq = 0; in kbd_keycode()
338 if (value == '-') { in kbd_keycode()
339 kbd->sysrq = K(KT_LATIN, '-'); in kbd_keycode()
343 (*k_handler[KTYP(kbd->sysrq)])(kbd, KVAL(kbd->sysrq)); in kbd_keycode()
344 kbd->sysrq = 0; in kbd_keycode()
347 kbd->sysrq = K(type, value); in kbd_keycode()
353 to_utf8(kbd->port, keysym); in kbd_keycode()
368 return -EFAULT; in do_kdsk_ioctl()
372 return -EINVAL; in do_kdsk_ioctl()
377 return -EINVAL; in do_kdsk_ioctl()
383 key_map = kbd->key_maps[kb_table]; in do_kdsk_ioctl()
390 return put_user(val, &user_kbe->kb_value); in do_kdsk_ioctl()
393 return -EPERM; in do_kdsk_ioctl()
396 key_map = kbd->key_maps[kb_table]; in do_kdsk_ioctl()
398 kbd->key_maps[kb_table] = NULL; in do_kdsk_ioctl()
405 return -EINVAL; in do_kdsk_ioctl()
407 return -EINVAL; in do_kdsk_ioctl()
409 if (!(key_map = kbd->key_maps[kb_table])) { in do_kdsk_ioctl()
415 return -ENOMEM; in do_kdsk_ioctl()
416 kbd->key_maps[kb_table] = key_map; in do_kdsk_ioctl()
428 return -EPERM; in do_kdsk_ioctl()
443 /* Get u_kbs->kb_func. */ in do_kdgkb_ioctl()
444 if (get_user(kb_func, &u_kbs->kb_func)) in do_kdgkb_ioctl()
445 return -EFAULT; in do_kdgkb_ioctl()
448 return -EINVAL; in do_kdgkb_ioctl()
453 p = kbd->func_table[kb_func]; in do_kdgkb_ioctl()
456 if (len >= sizeof(u_kbs->kb_string)) in do_kdgkb_ioctl()
457 len = sizeof(u_kbs->kb_string) - 1; in do_kdgkb_ioctl()
458 if (copy_to_user(u_kbs->kb_string, p, len)) in do_kdgkb_ioctl()
459 return -EFAULT; in do_kdgkb_ioctl()
462 if (put_user('\0', u_kbs->kb_string + len)) in do_kdgkb_ioctl()
463 return -EFAULT; in do_kdgkb_ioctl()
467 return -EPERM; in do_kdgkb_ioctl()
468 p = strndup_user(u_kbs->kb_string, sizeof(u_kbs->kb_string)); in do_kdgkb_ioctl()
471 kfree(kbd->func_table[kb_func]); in do_kdgkb_ioctl()
472 kbd->func_table[kb_func] = p; in do_kdgkb_ioctl()
491 tty = tty_port_tty_get(kbd->port); in kbd_ioctl()
493 perm = current->signal->tty == tty || capable(CAP_SYS_TTY_CONFIG); in kbd_ioctl()
510 if (put_user(kbd->accent_table_size, &a->kb_cnt)) in kbd_ioctl()
511 return -EFAULT; in kbd_ioctl()
512 for (i = 0; i < kbd->accent_table_size; i++) { in kbd_ioctl()
513 diacr.diacr = kbd->accent_table[i].diacr; in kbd_ioctl()
514 diacr.base = kbd->accent_table[i].base; in kbd_ioctl()
515 diacr.result = kbd->accent_table[i].result; in kbd_ioctl()
516 if (copy_to_user(a->kbdiacr + i, &diacr, sizeof(struct kbdiacr))) in kbd_ioctl()
517 return -EFAULT; in kbd_ioctl()
525 ct = kbd->accent_table_size; in kbd_ioctl()
526 if (put_user(ct, &a->kb_cnt)) in kbd_ioctl()
527 return -EFAULT; in kbd_ioctl()
528 if (copy_to_user(a->kbdiacruc, kbd->accent_table, in kbd_ioctl()
530 return -EFAULT; in kbd_ioctl()
540 return -EPERM; in kbd_ioctl()
541 if (get_user(ct, &a->kb_cnt)) in kbd_ioctl()
542 return -EFAULT; in kbd_ioctl()
544 return -EINVAL; in kbd_ioctl()
545 kbd->accent_table_size = ct; in kbd_ioctl()
547 if (copy_from_user(&diacr, a->kbdiacr + i, sizeof(struct kbdiacr))) in kbd_ioctl()
548 return -EFAULT; in kbd_ioctl()
549 kbd->accent_table[i].diacr = diacr.diacr; in kbd_ioctl()
550 kbd->accent_table[i].base = diacr.base; in kbd_ioctl()
551 kbd->accent_table[i].result = diacr.result; in kbd_ioctl()
560 return -EPERM; in kbd_ioctl()
561 if (get_user(ct, &a->kb_cnt)) in kbd_ioctl()
562 return -EFAULT; in kbd_ioctl()
564 return -EINVAL; in kbd_ioctl()
565 kbd->accent_table_size = ct; in kbd_ioctl()
566 if (copy_from_user(kbd->accent_table, a->kbdiacruc, in kbd_ioctl()
568 return -EFAULT; in kbd_ioctl()
572 return -ENOIOCTLCMD; in kbd_ioctl()