diff options
Diffstat (limited to 'devel/clanlib-devel/files/patch-aj')
-rw-r--r-- | devel/clanlib-devel/files/patch-aj | 304 |
1 files changed, 304 insertions, 0 deletions
diff --git a/devel/clanlib-devel/files/patch-aj b/devel/clanlib-devel/files/patch-aj new file mode 100644 index 0000000..6eeba9a --- /dev/null +++ b/devel/clanlib-devel/files/patch-aj @@ -0,0 +1,304 @@ +--- Sources/Core/Input/TTY/keyboard_tty.cpp.orig Wed Apr 26 00:40:16 2000 ++++ Sources/Core/Input/TTY/keyboard_tty.cpp Mon Sep 25 00:44:59 2000 +@@ -40,8 +40,9 @@ + #endif + #ifdef HAVE_SYS_VT_H + #include <sys/vt.h> +-#else +-#include <linux/vt.h> ++#else /* FreeBSD :-P */ ++#include <vgakeyboard.h> ++#include <sys/consio.h> + #endif + + #include <linux/keyboard.h> +@@ -72,56 +73,14 @@ + // CL_System_Generic::keep_alives.add(this); + + /* open the tty */ +- fd = open("/dev/tty", O_RDWR | O_NONBLOCK); ++ fd = keyboard_init_return_fd(); + + if (fd < 0) + { + throw CL_Error("Couldn't open /dev/tty."); + } + +- /* put tty into "straight through" mode. */ +- struct termios newterm; +- +- if (tcgetattr(fd, &old_termios) < 0) +- { +- perror("tcgetattr failed"); +- } +- +- memcpy ( &newterm, &old_termios, sizeof(termios) ); +- +- newterm.c_lflag &= ~(ICANON | ECHO | ISIG); +- newterm.c_iflag &= ~(ISTRIP | IGNCR | ICRNL | INLCR | IXOFF | IXON); +- newterm.c_iflag |= IGNBRK; +- newterm.c_cc[VMIN] = 0; +- newterm.c_cc[VTIME] = 0; +- +- if (tcsetattr(fd, TCSANOW, &newterm) < 0) +- { +- perror("tcsetattr failed"); +- } +- +- /* save old mode and set to mediumraw */ +- if (ioctl(fd, KDGKBMODE, &old_mode) < 0) +- { +- perror("Couldn't get keyboard mode"); +- old_mode = K_XLATE; +- } +- if (ioctl(fd, KDSKBMODE, K_MEDIUMRAW) < 0) +- { +- perror("Couldn't set keyboard mode to K_MEDIUMRAW"); +- } +- +- /* save old kd mode and set to graphics */ +- if (ioctl(fd, KDGETMODE, &old_kd) < 0) +- { +- perror("Couldn't get kd mode"); +- old_kd = KD_TEXT; +- } +- if (ioctl(fd, KDSETMODE, KD_GRAPHICS) < 0) +- { +- perror("Couldn't set kd mode to KD_GRAPHICS"); +- } +- ++ ioctl(fd, GIO_KEYMAP, &vga_keymap); + buttons = new CL_InputButton_TTYKeyboard*[CL_NUM_KEYS]; + for (int i=0; i<CL_NUM_KEYS; i++) buttons[i] = NULL; + } +@@ -144,13 +103,7 @@ + { + if (fd>=0) + { +- ioctl(fd, KDSKBMODE, old_mode); +- ioctl(fd, KDSETMODE, old_kd); +- if (tcsetattr(fd, TCSANOW, &old_termios) < 0) +- { +- std::cerr << "Could not restore old terminal input settings! Please run 'reset'!" << std::endl; +- perror( "System error message" ); +- } ++ keyboard_close(); + close(fd); + } + } +@@ -172,8 +125,8 @@ + void CL_TTYKeyboard::handle_code(char code) + { + bool keydown; +- kbentry entry; +- ++ struct keyent_t entry; ++ + if (code & 0x80) + { + code &= 0x7f; +@@ -183,109 +136,115 @@ + keydown = true; + } + ++ // Simple belt against out-of-range codes ++ if (code >= vga_keymap.n_keys) ++ return; ++ + //fetch the keycode +- entry.kb_table = 0; +- entry.kb_index = code; +- ioctl(fd,KDGKBENT,&entry); ++ entry = vga_keymap.key[code]; + + CL_Key key; +- key.id = translate(entry.kb_value); ++ key.id = translate(entry); + key.ascii = -1; + key.state = keydown ? CL_Key::Pressed : CL_Key::Released; + + if (keydown) CL_Input::chain_button_press.on_button_press(this, key); + else CL_Input::chain_button_release.on_button_release(this, key); + +- keymap[translate(entry.kb_value)] = keydown; ++ keymap[translate(entry)] = keydown; + } + +-char CL_TTYKeyboard::translate(int kb_value) ++char CL_TTYKeyboard::translate(struct keyent_t kb_value) + { +- switch (kb_value) +- { +- case K_F1: return CL_KEY_F1; +- case K_F2: return CL_KEY_F2; +- case K_F3: return CL_KEY_F3; +- case K_F4: return CL_KEY_F4; +- case K_F5: return CL_KEY_F5; +- case K_F6: return CL_KEY_F6; +- case K_F7: return CL_KEY_F7; +- case K_F8: return CL_KEY_F8; +- case K_F9: return CL_KEY_F9; +- case K_F10: return CL_KEY_F10; +- case K_F11: return CL_KEY_F11; +- case K_F12: return CL_KEY_F12; +- +- case 2816+'a': return CL_KEY_A; +- case 2816+'b': return CL_KEY_B; +- case 2816+'c': return CL_KEY_C; +- case 2816+'d': return CL_KEY_D; +- case 2816+'e': return CL_KEY_E; +- case 2816+'f': return CL_KEY_F; +- case 2816+'g': return CL_KEY_G; +- case 2816+'h': return CL_KEY_H; +- case 2816+'i': return CL_KEY_I; +- case 2816+'j': return CL_KEY_J; +- case 2816+'k': return CL_KEY_K; +- case 2816+'l': return CL_KEY_L; +- case 2816+'m': return CL_KEY_M; +- case 2816+'n': return CL_KEY_N; +- case 2816+'o': return CL_KEY_O; +- case 2816+'p': return CL_KEY_P; +- case 2816+'q': return CL_KEY_Q; +- case 2816+'r': return CL_KEY_R; +- case 2816+'s': return CL_KEY_S; +- case 2816+'t': return CL_KEY_T; +- case 2816+'u': return CL_KEY_U; +- case 2816+'v': return CL_KEY_V; +- case 2816+'w': return CL_KEY_W; +- case 2816+'x': return CL_KEY_X; +- case 2816+'y': return CL_KEY_Y; +- case 2816+'z': return CL_KEY_Z; ++ if (kb_value.spcl & 0x80) ++ switch (kb_value.map[0]) ++ { ++ case F(1): return CL_KEY_F1; ++ case F(2): return CL_KEY_F2; ++ case F(3): return CL_KEY_F3; ++ case F(4): return CL_KEY_F4; ++ case F(5): return CL_KEY_F5; ++ case F(6): return CL_KEY_F6; ++ case F(7): return CL_KEY_F7; ++ case F(8): return CL_KEY_F8; ++ case F(9): return CL_KEY_F9; ++ case F(10): return CL_KEY_F10; ++ case F(11): return CL_KEY_F11; ++ case F(12): return CL_KEY_F12; ++ ++ case RCTR: return CL_KEY_LCTRL; ++ case LCTR: return CL_KEY_RCTRL; ++ case LSH: return CL_KEY_LSHIFT; ++ case RSH: return CL_KEY_RSHIFT; ++ case LALT: return CL_KEY_ALT; ++ case RALT: return CL_KEY_ALTGR; ++ ++ case CLK: return CL_KEY_CAPSLOCK; ++ case NLK: return CL_KEY_NUMLOCK; ++ case SLK: return CL_KEY_SCRLOCK; ++ ++ case F(49): return CL_KEY_HOME; ++ case F(50): return CL_KEY_UP; ++ case F(51): return CL_KEY_PAGEUP; ++ case F(53): return CL_KEY_LEFT; ++ case F(55): return CL_KEY_RIGHT; ++ case F(57): return CL_KEY_END; ++ case F(58): return CL_KEY_DOWN; ++ case F(59): return CL_KEY_PAGEDOWN; ++ case F(60): return CL_KEY_INSERT; ++ case F(61): return CL_KEY_DELETE; ++ ++ case NEXT: return CL_KEY_PRINT; ++ } ++ else switch (kb_value.map[0]) ++ { ++ case 'a': return CL_KEY_A; ++ case 'b': return CL_KEY_B; ++ case 'c': return CL_KEY_C; ++ case 'd': return CL_KEY_D; ++ case 'e': return CL_KEY_E; ++ case 'f': return CL_KEY_F; ++ case 'g': return CL_KEY_G; ++ case 'h': return CL_KEY_H; ++ case 'i': return CL_KEY_I; ++ case 'j': return CL_KEY_J; ++ case 'k': return CL_KEY_K; ++ case 'l': return CL_KEY_L; ++ case 'm': return CL_KEY_M; ++ case 'n': return CL_KEY_N; ++ case 'o': return CL_KEY_O; ++ case 'p': return CL_KEY_P; ++ case 'q': return CL_KEY_Q; ++ case 'r': return CL_KEY_R; ++ case 's': return CL_KEY_S; ++ case 't': return CL_KEY_T; ++ case 'u': return CL_KEY_U; ++ case 'v': return CL_KEY_V; ++ case 'w': return CL_KEY_W; ++ case 'x': return CL_KEY_X; ++ case 'y': return CL_KEY_Y; ++ case 'z': return CL_KEY_Z; ++ case ' ': return CL_KEY_SPACE; + +- case 48: return CL_KEY_0; +- case 49: return CL_KEY_1; +- case 50: return CL_KEY_2; +- case 51: return CL_KEY_3; +- case 52: return CL_KEY_4; +- case 53: return CL_KEY_5; +- case 54: return CL_KEY_6; +- case 55: return CL_KEY_7; +- case 56: return CL_KEY_8; +- case 57: return CL_KEY_9; ++ case '0': return CL_KEY_0; ++ case '1': return CL_KEY_1; ++ case '2': return CL_KEY_2; ++ case '3': return CL_KEY_3; ++ case '4': return CL_KEY_4; ++ case '5': return CL_KEY_5; ++ case '6': return CL_KEY_6; ++ case '7': return CL_KEY_7; ++ case '8': return CL_KEY_8; ++ case '9': return CL_KEY_9; + +- case 27: return CL_KEY_ESCAPE; +- case K_LEFT: return CL_KEY_LEFT; +- case K_RIGHT: return CL_KEY_RIGHT; +- case K_UP: return CL_KEY_UP; +- case K_DOWN: return CL_KEY_DOWN; +- case K_ENTER: return CL_KEY_ENTER; +- +- case K_CTRLL: return CL_KEY_LCTRL; +- case K_CTRLR: return CL_KEY_RCTRL; +- case K_SHIFTL: return CL_KEY_LSHIFT; +- case K_SHIFTR: return CL_KEY_RSHIFT; +- case K_ALT: return CL_KEY_ALT; +- case K_ALTGR: return CL_KEY_ALTGR; +- case 9: return CL_KEY_TAB; +- case 32: return CL_KEY_SPACE; +- case 127: return CL_KEY_BACKSPACE; +- case K_INSERT: return CL_KEY_INSERT; +- case K_REMOVE: return CL_KEY_DELETE; +- case K_FIND: return CL_KEY_HOME; +- case K_SELECT: return CL_KEY_END; +- case K_PGUP: return CL_KEY_PAGEUP; +- case K_PGDN: return CL_KEY_PAGEDOWN; +- case K_CAPS: return CL_KEY_CAPSLOCK; +- case K_NUM: return CL_KEY_NUMLOCK; +- case K_HOLD: return CL_KEY_SCRLOCK; +- case 28: return CL_KEY_PRINT; +- case K(1,29): return CL_KEY_PAUSE; +- case K_PSLASH: return CL_KEY_KP_DIV; +- case K_PSTAR: return CL_KEY_KP_MULT; +- case K_PMINUS: return CL_KEY_KP_MINUS; +- case K_PPLUS: return CL_KEY_KP_PLUS; +- case K_PENTER: return CL_KEY_KP_ENTER; ++ case 27: return CL_KEY_ESCAPE; ++ case 13: return CL_KEY_ENTER; ++ case 9: return CL_KEY_TAB; ++ case 8: return CL_KEY_BACKSPACE; ++ case '/': return CL_KEY_KP_DIV; ++ case '*': return CL_KEY_KP_MULT; ++ case '-': return CL_KEY_KP_MINUS; ++ case '+': return CL_KEY_KP_PLUS; + } + + return CL_KEY_NONE_OF_THE_ABOVE; |