home *** CD-ROM | disk | FTP | other *** search
- /*
- * Bios keyboard update routines
- *
- * Patrice Mandin
- */
-
- #include <osbind.h>
-
- #include "doomdef.h"
- #include "d_main.h"
- #include "d_event.h"
- #include "i_system.h"
- #include "control/bios.h"
-
- static unsigned char bios_curclavier[128];
- static unsigned char bios_oldclavier[128];
-
- enum {
- K_RSHIFT=0,
- K_LSHIFT,
- K_CTRL,
- K_ALT,
- K_CAPSLOCK,
- K_CLRHOME,
- K_INSERT
- };
-
- void I_InitControl_bios(void)
- {
- memset(bios_curclavier,0,128);
- memset(bios_oldclavier,0,128);
- }
-
- void I_UpdateKeyboard_bios (void)
- {
- event_t event;
- int specialkeys;
-
- /* Read new key press */
-
- memset(bios_curclavier,0,128);
- while (Cconis())
- {
- int scancode;
-
- scancode=(Cconin()>>16) & 127;
-
- bios_curclavier[scancode]=0xFF;
- }
-
- /* Read special keys */
-
- specialkeys=Kbshift(-1);
- if (specialkeys & (1<<K_RSHIFT))
- bios_curclavier[SCANCODE_RIGHTSHIFT]=0xFF;
- if (specialkeys & (1<<K_LSHIFT))
- bios_curclavier[SCANCODE_LEFTSHIFT]=0xFF;
- if (specialkeys & (1<<K_CTRL))
- bios_curclavier[SCANCODE_LEFTCONTROL]=0xFF;
- if (specialkeys & (1<<K_ALT))
- bios_curclavier[SCANCODE_LEFTALT]=0xFF;
- if (specialkeys & (1<<K_CAPSLOCK))
- bios_curclavier[SCANCODE_CAPSLOCK]=0xFF;
- /*
- if (specialkeys & (1<<K_CLRHOME))
- bios_curclavier[SCANCODE_CLRHOME]=0xFF;
- if (specialkeys & (1<<K_INSERT))
- bios_curclavier[SCANCODE_INSERT]=0xFF;
- */
- /* Scan keyboard changes */
-
- #define KEY_DOWN(a) (bios_curclavier[a])
- #define KEY_PRESS(a) (bios_curclavier[a] && !bios_oldclavier[a])
- #define KEY_WASPRESSED(a) (bios_oldclavier[a] && !bios_curclavier[a])
- #define PROCESS_KEY(k,t) \
- if (KEY_PRESS(k)) \
- { \
- event.type = ev_keydown; \
- event.data1 = t; \
- D_PostEvent(&event); \
- } \
- if (KEY_WASPRESSED(k)) \
- { \
- event.type = ev_keyup; \
- event.data1 = t; \
- D_PostEvent(&event); \
- }
-
- PROCESS_KEY(SCANCODE_CURSORBLOCKRIGHT, KEY_RIGHTARROW);
- PROCESS_KEY(SCANCODE_CURSORBLOCKLEFT, KEY_LEFTARROW);
- PROCESS_KEY(SCANCODE_CURSORBLOCKDOWN, KEY_DOWNARROW);
- PROCESS_KEY(SCANCODE_CURSORBLOCKUP, KEY_UPARROW);
-
- PROCESS_KEY(SCANCODE_ESCAPE, KEY_ESCAPE);
- PROCESS_KEY(SCANCODE_ENTER, KEY_ENTER);
- PROCESS_KEY(SCANCODE_KEYPADENTER, KEY_ENTER);
- PROCESS_KEY(SCANCODE_TAB, KEY_TAB);
- PROCESS_KEY(SCANCODE_SPACE, ' ');
-
- PROCESS_KEY(SCANCODE_F1, KEY_F1);
- PROCESS_KEY(SCANCODE_F2, KEY_F2);
- PROCESS_KEY(SCANCODE_F3, KEY_F3);
- PROCESS_KEY(SCANCODE_F4, KEY_F4);
- PROCESS_KEY(SCANCODE_F5, KEY_F5);
- PROCESS_KEY(SCANCODE_F6, KEY_F6);
- PROCESS_KEY(SCANCODE_F7, KEY_F7);
- PROCESS_KEY(SCANCODE_F8, KEY_F8);
- PROCESS_KEY(SCANCODE_F9, KEY_F9);
- PROCESS_KEY(SCANCODE_F10, KEY_F10);
- PROCESS_KEY(SCANCODE_F11, KEY_F11);
- PROCESS_KEY(SCANCODE_F12, KEY_F12);
-
- PROCESS_KEY(SCANCODE_1, '1');
- PROCESS_KEY(SCANCODE_2, '2');
- PROCESS_KEY(SCANCODE_3, '3');
- PROCESS_KEY(SCANCODE_4, '4');
- PROCESS_KEY(SCANCODE_5, '5');
- PROCESS_KEY(SCANCODE_6, '6');
- PROCESS_KEY(SCANCODE_7, '7');
- PROCESS_KEY(SCANCODE_8, '8');
- PROCESS_KEY(SCANCODE_9, '9');
- PROCESS_KEY(SCANCODE_0, '0');
-
- PROCESS_KEY(SCANCODE_MINUS, KEY_MINUS);
- PROCESS_KEY(SCANCODE_KEYPADMINUS, KEY_MINUS);
- PROCESS_KEY(SCANCODE_EQUAL, KEY_EQUALS);
- PROCESS_KEY(SCANCODE_KEYPADPLUS, KEY_EQUALS);
-
- PROCESS_KEY(SCANCODE_BACKSPACE, KEY_BACKSPACE);
- PROCESS_KEY(SCANCODE_BREAK, KEY_PAUSE);
-
- PROCESS_KEY(SCANCODE_LEFTSHIFT, KEY_RSHIFT);
- PROCESS_KEY(SCANCODE_RIGHTSHIFT, KEY_RSHIFT);
- PROCESS_KEY(SCANCODE_LEFTCONTROL, KEY_RCTRL);
- PROCESS_KEY(SCANCODE_LEFTALT, KEY_RALT);
-
- PROCESS_KEY(SCANCODE_Q, 'q');
- PROCESS_KEY(SCANCODE_W, 'w');
- PROCESS_KEY(SCANCODE_E, 'e');
- PROCESS_KEY(SCANCODE_R, 'r');
- PROCESS_KEY(SCANCODE_T, 't');
- PROCESS_KEY(SCANCODE_Y, 'y');
- PROCESS_KEY(SCANCODE_U, 'u');
- PROCESS_KEY(SCANCODE_I, 'i');
- PROCESS_KEY(SCANCODE_O, 'o');
- PROCESS_KEY(SCANCODE_P, 'p');
-
- PROCESS_KEY(SCANCODE_A, 'a');
- PROCESS_KEY(SCANCODE_S, 's');
- PROCESS_KEY(SCANCODE_D, 'd');
- PROCESS_KEY(SCANCODE_F, 'f');
- PROCESS_KEY(SCANCODE_G, 'g');
- PROCESS_KEY(SCANCODE_H, 'h');
- PROCESS_KEY(SCANCODE_J, 'j');
- PROCESS_KEY(SCANCODE_K, 'k');
- PROCESS_KEY(SCANCODE_L, 'l');
-
- PROCESS_KEY(SCANCODE_Z, 'z');
- PROCESS_KEY(SCANCODE_X, 'x');
- PROCESS_KEY(SCANCODE_C, 'c');
- PROCESS_KEY(SCANCODE_V, 'v');
- PROCESS_KEY(SCANCODE_B, 'b');
- PROCESS_KEY(SCANCODE_N, 'n');
- PROCESS_KEY(SCANCODE_M, 'm');
-
- memcpy(bios_oldclavier,bios_curclavier,128);
- }
-