Deleted Added
full compact
kbd.c (51658) kbd.c (54382)
1/*-
2 * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
1/*-
2 * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/dev/kbd/kbd.c 51658 1999-09-25 18:24:47Z phk $
26 * $FreeBSD: head/sys/dev/kbd/kbd.c 54382 1999-12-10 04:31:33Z yokota $
27 */
28
29#include "kbd.h"
30#include "opt_kbd.h"
31
32#include <sys/param.h>
33#include <sys/systm.h>
34#include <sys/kernel.h>

--- 96 unchanged lines hidden (view full) ---

131 kbd->kb_io_size = port_size;
132 kbd->kb_data = NULL;
133 kbd->kb_keymap = NULL;
134 kbd->kb_accentmap = NULL;
135 kbd->kb_fkeytab = NULL;
136 kbd->kb_fkeytab_size = 0;
137 kbd->kb_delay1 = KB_DELAY1; /* these values are advisory only */
138 kbd->kb_delay2 = KB_DELAY2;
27 */
28
29#include "kbd.h"
30#include "opt_kbd.h"
31
32#include <sys/param.h>
33#include <sys/systm.h>
34#include <sys/kernel.h>

--- 96 unchanged lines hidden (view full) ---

131 kbd->kb_io_size = port_size;
132 kbd->kb_data = NULL;
133 kbd->kb_keymap = NULL;
134 kbd->kb_accentmap = NULL;
135 kbd->kb_fkeytab = NULL;
136 kbd->kb_fkeytab_size = 0;
137 kbd->kb_delay1 = KB_DELAY1; /* these values are advisory only */
138 kbd->kb_delay2 = KB_DELAY2;
139 kbd->kb_prev_key = 0;
140 kbd->kb_count = 0L;
139}
140
141void
142kbd_set_maps(keyboard_t *kbd, keymap_t *keymap, accentmap_t *accmap,
143 fkeytab_t *fkeymap, int fkeymap_size)
144{
145 kbd->kb_keymap = keymap;
146 kbd->kb_accentmap = accmap;

--- 521 unchanged lines hidden (view full) ---

668
669 /* K_XLATE */
670 if (c & RELKEY) /* key release is ignored */
671 continue;
672
673 /* process special keys; most of them are just ignored... */
674 if (c & SPCLKEY) {
675 switch (KEYCHAR(c)) {
141}
142
143void
144kbd_set_maps(keyboard_t *kbd, keymap_t *keymap, accentmap_t *accmap,
145 fkeytab_t *fkeymap, int fkeymap_size)
146{
147 kbd->kb_keymap = keymap;
148 kbd->kb_accentmap = accmap;

--- 521 unchanged lines hidden (view full) ---

670
671 /* K_XLATE */
672 if (c & RELKEY) /* key release is ignored */
673 continue;
674
675 /* process special keys; most of them are just ignored... */
676 if (c & SPCLKEY) {
677 switch (KEYCHAR(c)) {
676 /* locking keys */
677 case NLK: case CLK: case SLK: case ALK:
678 /* shift keys */
679 case LSH: case RSH: case LCTR: case RCTR:
680 case LALT: case RALT: case ASH: case META:
681 /* other special keys */
682 case NOP: case SPSC: case RBT: case SUSP:
683 case STBY: case DBG: case NEXT:
678 default:
684 /* ignore them... */
685 continue;
686 case BTAB: /* a backtab: ESC [ Z */
687 putc(0x1b, &sc->gkb_q);
688 putc('[', &sc->gkb_q);
689 putc('Z', &sc->gkb_q);
690 continue;
691 }

--- 270 unchanged lines hidden (view full) ---

962 int *accents)
963{
964 struct keyent_t *key;
965 int state = *shiftstate;
966 int action;
967 int f;
968 int i;
969
679 /* ignore them... */
680 continue;
681 case BTAB: /* a backtab: ESC [ Z */
682 putc(0x1b, &sc->gkb_q);
683 putc('[', &sc->gkb_q);
684 putc('Z', &sc->gkb_q);
685 continue;
686 }

--- 270 unchanged lines hidden (view full) ---

957 int *accents)
958{
959 struct keyent_t *key;
960 int state = *shiftstate;
961 int action;
962 int f;
963 int i;
964
965 i = keycode;
970 f = state & (AGRS | ALKED);
971 if ((f == AGRS1) || (f == AGRS2) || (f == ALKED))
966 f = state & (AGRS | ALKED);
967 if ((f == AGRS1) || (f == AGRS2) || (f == ALKED))
972 keycode += ALTGR_OFFSET;
973 key = &kbd->kb_keymap->key[keycode];
968 i += ALTGR_OFFSET;
969 key = &kbd->kb_keymap->key[i];
974 i = ((state & SHIFTS) ? 1 : 0)
975 | ((state & CTLS) ? 2 : 0)
976 | ((state & ALTS) ? 4 : 0);
977 if (((key->flgs & FLAG_LOCK_C) && (state & CLKED))
978 || ((key->flgs & FLAG_LOCK_N) && (state & NLKED)) )
979 i ^= 1;
980
981 action = key->map[i];
982 if (up) { /* break: key released */
983 if (key->spcl & (0x80 >> i)) {
984 /* special keys */
985 switch (action) {
970 i = ((state & SHIFTS) ? 1 : 0)
971 | ((state & CTLS) ? 2 : 0)
972 | ((state & ALTS) ? 4 : 0);
973 if (((key->flgs & FLAG_LOCK_C) && (state & CLKED))
974 || ((key->flgs & FLAG_LOCK_N) && (state & NLKED)) )
975 i ^= 1;
976
977 action = key->map[i];
978 if (up) { /* break: key released */
979 if (key->spcl & (0x80 >> i)) {
980 /* special keys */
981 switch (action) {
982 case LSHA:
983 if (kbd->kb_prev_key == keycode) {
984 set_lockkey_state(kbd, state, ALK);
985 state &= ~ALKDOWN;
986 }
987 action = LSH;
988 /* FALL THROUGH */
986 case LSH:
987 state &= ~SHIFTS1;
988 break;
989 case LSH:
990 state &= ~SHIFTS1;
991 break;
992 case RSHA:
993 if (kbd->kb_prev_key == keycode) {
994 set_lockkey_state(kbd, state, ALK);
995 state &= ~ALKDOWN;
996 }
997 action = RSH;
998 /* FALL THROUGH */
989 case RSH:
990 state &= ~SHIFTS2;
991 break;
999 case RSH:
1000 state &= ~SHIFTS2;
1001 break;
1002 case LCTRA:
1003 if (kbd->kb_prev_key == keycode) {
1004 set_lockkey_state(kbd, state, ALK);
1005 state &= ~ALKDOWN;
1006 }
1007 action = LCTR;
1008 /* FALL THROUGH */
992 case LCTR:
993 state &= ~CTLS1;
994 break;
1009 case LCTR:
1010 state &= ~CTLS1;
1011 break;
1012 case RCTRA:
1013 if (kbd->kb_prev_key == keycode) {
1014 set_lockkey_state(kbd, state, ALK);
1015 state &= ~ALKDOWN;
1016 }
1017 action = RCTR;
1018 /* FALL THROUGH */
995 case RCTR:
996 state &= ~CTLS2;
997 break;
1019 case RCTR:
1020 state &= ~CTLS2;
1021 break;
1022 case LALTA:
1023 if (kbd->kb_prev_key == keycode) {
1024 set_lockkey_state(kbd, state, ALK);
1025 state &= ~ALKDOWN;
1026 }
1027 action = LALT;
1028 /* FALL THROUGH */
998 case LALT:
999 state &= ~ALTS1;
1000 break;
1029 case LALT:
1030 state &= ~ALTS1;
1031 break;
1032 case RALTA:
1033 if (kbd->kb_prev_key == keycode) {
1034 set_lockkey_state(kbd, state, ALK);
1035 state &= ~ALKDOWN;
1036 }
1037 action = RALT;
1038 /* FALL THROUGH */
1001 case RALT:
1002 state &= ~ALTS2;
1003 break;
1004 case ASH:
1005 state &= ~AGRS1;
1006 break;
1007 case META:
1008 state &= ~METAS1;

--- 44 unchanged lines hidden (view full) ---

1053 case SLK:
1054 set_lockkey_state(kbd, state, SLK);
1055 break;
1056 case ALK:
1057 set_lockkey_state(kbd, state, ALK);
1058 break;
1059 /* NON-LOCKING KEYS */
1060 case SPSC: case RBT: case SUSP: case STBY:
1039 case RALT:
1040 state &= ~ALTS2;
1041 break;
1042 case ASH:
1043 state &= ~AGRS1;
1044 break;
1045 case META:
1046 state &= ~METAS1;

--- 44 unchanged lines hidden (view full) ---

1091 case SLK:
1092 set_lockkey_state(kbd, state, SLK);
1093 break;
1094 case ALK:
1095 set_lockkey_state(kbd, state, ALK);
1096 break;
1097 /* NON-LOCKING KEYS */
1098 case SPSC: case RBT: case SUSP: case STBY:
1061 case DBG: case NEXT:
1099 case DBG: case NEXT: case PREV: case PNC:
1062 *accents = 0;
1063 break;
1064 case BTAB:
1065 *accents = 0;
1066 action |= BKEY;
1067 break;
1100 *accents = 0;
1101 break;
1102 case BTAB:
1103 *accents = 0;
1104 action |= BKEY;
1105 break;
1106 case LSHA:
1107 action = LSH;
1108 /* FALL THROUGH */
1068 case LSH:
1069 state |= SHIFTS1;
1070 break;
1109 case LSH:
1110 state |= SHIFTS1;
1111 break;
1112 case RSHA:
1113 action = RSH;
1114 /* FALL THROUGH */
1071 case RSH:
1072 state |= SHIFTS2;
1073 break;
1115 case RSH:
1116 state |= SHIFTS2;
1117 break;
1118 case LCTRA:
1119 action = LCTR;
1120 /* FALL THROUGH */
1074 case LCTR:
1075 state |= CTLS1;
1076 break;
1121 case LCTR:
1122 state |= CTLS1;
1123 break;
1124 case RCTRA:
1125 action = RCTR;
1126 /* FALL THROUGH */
1077 case RCTR:
1078 state |= CTLS2;
1079 break;
1127 case RCTR:
1128 state |= CTLS2;
1129 break;
1130 case LALTA:
1131 action = LALT;
1132 /* FALL THROUGH */
1080 case LALT:
1081 state |= ALTS1;
1082 break;
1133 case LALT:
1134 state |= ALTS1;
1135 break;
1136 case RALTA:
1137 action = RALT;
1138 /* FALL THROUGH */
1083 case RALT:
1084 state |= ALTS2;
1085 break;
1086 case ASH:
1087 state |= AGRS1;
1088 break;
1089 case META:
1090 state |= METAS1;

--- 18 unchanged lines hidden (view full) ---

1109 /* other special keys */
1110 if (*accents > 0) {
1111 *accents = 0;
1112 return ERRKEY;
1113 }
1114 if (action >= F_FN && action <= L_FN)
1115 action |= FKEY;
1116 /* XXX: return fkey string for the FKEY? */
1139 case RALT:
1140 state |= ALTS2;
1141 break;
1142 case ASH:
1143 state |= AGRS1;
1144 break;
1145 case META:
1146 state |= METAS1;

--- 18 unchanged lines hidden (view full) ---

1165 /* other special keys */
1166 if (*accents > 0) {
1167 *accents = 0;
1168 return ERRKEY;
1169 }
1170 if (action >= F_FN && action <= L_FN)
1171 action |= FKEY;
1172 /* XXX: return fkey string for the FKEY? */
1173 break;
1117 }
1118 *shiftstate = state;
1119 return (SPCLKEY | action);
1120 } else {
1121 /* regular keys */
1122 if (*accents > 0) {
1123 /* make an accented char */
1124 action = make_accent_char(kbd, action, accents);
1125 if (action == ERRKEY)
1126 return action;
1127 }
1128 if (state & METAS)
1129 action |= MKEY;
1130 return action;
1131 }
1132 }
1133 /* NOT REACHED */
1134}
1174 }
1175 *shiftstate = state;
1176 return (SPCLKEY | action);
1177 } else {
1178 /* regular keys */
1179 if (*accents > 0) {
1180 /* make an accented char */
1181 action = make_accent_char(kbd, action, accents);
1182 if (action == ERRKEY)
1183 return action;
1184 }
1185 if (state & METAS)
1186 action |= MKEY;
1187 return action;
1188 }
1189 }
1190 /* NOT REACHED */
1191}