home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser-CD 2000 January / LCD_01_2000.iso / games / doom / pmdoom / src / control / bios.c next >
Encoding:
C/C++ Source or Header  |  1999-12-17  |  4.3 KB  |  168 lines

  1. /*
  2.  *    Bios keyboard update routines
  3.  *
  4.  *    Patrice Mandin
  5.  */
  6.  
  7. #include <osbind.h>
  8.  
  9. #include "doomdef.h"
  10. #include "d_main.h"
  11. #include "d_event.h"
  12. #include "i_system.h"
  13. #include "control/bios.h"
  14.  
  15. static unsigned char bios_curclavier[128];
  16. static unsigned char bios_oldclavier[128];
  17.  
  18. enum {
  19.     K_RSHIFT=0,
  20.     K_LSHIFT,
  21.     K_CTRL,
  22.     K_ALT,
  23.     K_CAPSLOCK,
  24.     K_CLRHOME,
  25.     K_INSERT
  26. };
  27.  
  28. void I_InitControl_bios(void)
  29. {
  30.     memset(bios_curclavier,0,128);
  31.     memset(bios_oldclavier,0,128);
  32. }
  33.  
  34. void I_UpdateKeyboard_bios (void)
  35. {
  36.     event_t event;    
  37.     int specialkeys;
  38.  
  39.     /* Read new key press */
  40.  
  41.     memset(bios_curclavier,0,128);
  42.     while (Cconis())
  43.     {
  44.         int scancode;
  45.  
  46.         scancode=(Cconin()>>16) & 127;
  47.  
  48.         bios_curclavier[scancode]=0xFF;
  49.     }
  50.     
  51.     /* Read special keys */
  52.  
  53.     specialkeys=Kbshift(-1);
  54.     if (specialkeys & (1<<K_RSHIFT))
  55.         bios_curclavier[SCANCODE_RIGHTSHIFT]=0xFF;
  56.     if (specialkeys & (1<<K_LSHIFT))
  57.         bios_curclavier[SCANCODE_LEFTSHIFT]=0xFF;
  58.     if (specialkeys & (1<<K_CTRL))
  59.         bios_curclavier[SCANCODE_LEFTCONTROL]=0xFF;
  60.     if (specialkeys & (1<<K_ALT))
  61.         bios_curclavier[SCANCODE_LEFTALT]=0xFF;
  62.     if (specialkeys & (1<<K_CAPSLOCK))
  63.         bios_curclavier[SCANCODE_CAPSLOCK]=0xFF;
  64. /*
  65.     if (specialkeys & (1<<K_CLRHOME))
  66.         bios_curclavier[SCANCODE_CLRHOME]=0xFF;
  67.     if (specialkeys & (1<<K_INSERT))
  68.         bios_curclavier[SCANCODE_INSERT]=0xFF;
  69. */
  70.     /* Scan keyboard changes */
  71.  
  72. #define KEY_DOWN(a) (bios_curclavier[a])
  73. #define KEY_PRESS(a) (bios_curclavier[a] && !bios_oldclavier[a])
  74. #define KEY_WASPRESSED(a) (bios_oldclavier[a] && !bios_curclavier[a])
  75. #define PROCESS_KEY(k,t)                    \
  76.     if (KEY_PRESS(k))                    \
  77.     {                            \
  78.             event.type = ev_keydown;        \
  79.             event.data1 = t;            \
  80.             D_PostEvent(&event);            \
  81.     }                            \
  82.     if (KEY_WASPRESSED(k))                    \
  83.     {                            \
  84.             event.type = ev_keyup;            \
  85.             event.data1 = t;            \
  86.             D_PostEvent(&event);            \
  87.     }
  88.  
  89.     PROCESS_KEY(SCANCODE_CURSORBLOCKRIGHT, KEY_RIGHTARROW);
  90.     PROCESS_KEY(SCANCODE_CURSORBLOCKLEFT, KEY_LEFTARROW);
  91.     PROCESS_KEY(SCANCODE_CURSORBLOCKDOWN, KEY_DOWNARROW);
  92.     PROCESS_KEY(SCANCODE_CURSORBLOCKUP, KEY_UPARROW);
  93.  
  94.     PROCESS_KEY(SCANCODE_ESCAPE, KEY_ESCAPE);
  95.     PROCESS_KEY(SCANCODE_ENTER, KEY_ENTER);
  96.     PROCESS_KEY(SCANCODE_KEYPADENTER, KEY_ENTER);
  97.     PROCESS_KEY(SCANCODE_TAB, KEY_TAB);
  98.     PROCESS_KEY(SCANCODE_SPACE, ' ');
  99.  
  100.     PROCESS_KEY(SCANCODE_F1, KEY_F1);
  101.     PROCESS_KEY(SCANCODE_F2, KEY_F2);
  102.     PROCESS_KEY(SCANCODE_F3, KEY_F3);
  103.     PROCESS_KEY(SCANCODE_F4, KEY_F4);
  104.     PROCESS_KEY(SCANCODE_F5, KEY_F5);
  105.     PROCESS_KEY(SCANCODE_F6, KEY_F6);
  106.     PROCESS_KEY(SCANCODE_F7, KEY_F7);
  107.     PROCESS_KEY(SCANCODE_F8, KEY_F8);
  108.     PROCESS_KEY(SCANCODE_F9, KEY_F9);
  109.     PROCESS_KEY(SCANCODE_F10, KEY_F10);
  110.     PROCESS_KEY(SCANCODE_F11, KEY_F11);
  111.     PROCESS_KEY(SCANCODE_F12, KEY_F12);
  112.         
  113.     PROCESS_KEY(SCANCODE_1, '1');
  114.     PROCESS_KEY(SCANCODE_2, '2');
  115.     PROCESS_KEY(SCANCODE_3, '3');
  116.     PROCESS_KEY(SCANCODE_4, '4');
  117.     PROCESS_KEY(SCANCODE_5, '5');
  118.     PROCESS_KEY(SCANCODE_6, '6');
  119.     PROCESS_KEY(SCANCODE_7, '7');
  120.     PROCESS_KEY(SCANCODE_8, '8');
  121.     PROCESS_KEY(SCANCODE_9, '9');
  122.     PROCESS_KEY(SCANCODE_0, '0');
  123.  
  124.     PROCESS_KEY(SCANCODE_MINUS, KEY_MINUS);
  125.     PROCESS_KEY(SCANCODE_KEYPADMINUS, KEY_MINUS);
  126.     PROCESS_KEY(SCANCODE_EQUAL, KEY_EQUALS);
  127.     PROCESS_KEY(SCANCODE_KEYPADPLUS, KEY_EQUALS);
  128.  
  129.     PROCESS_KEY(SCANCODE_BACKSPACE, KEY_BACKSPACE);
  130.     PROCESS_KEY(SCANCODE_BREAK, KEY_PAUSE);
  131.  
  132.     PROCESS_KEY(SCANCODE_LEFTSHIFT, KEY_RSHIFT);
  133.     PROCESS_KEY(SCANCODE_RIGHTSHIFT, KEY_RSHIFT);
  134.     PROCESS_KEY(SCANCODE_LEFTCONTROL, KEY_RCTRL);
  135.     PROCESS_KEY(SCANCODE_LEFTALT, KEY_RALT);
  136.  
  137.     PROCESS_KEY(SCANCODE_Q, 'q');
  138.     PROCESS_KEY(SCANCODE_W, 'w');
  139.     PROCESS_KEY(SCANCODE_E, 'e');
  140.     PROCESS_KEY(SCANCODE_R, 'r');
  141.     PROCESS_KEY(SCANCODE_T, 't');
  142.     PROCESS_KEY(SCANCODE_Y, 'y');
  143.     PROCESS_KEY(SCANCODE_U, 'u');
  144.     PROCESS_KEY(SCANCODE_I, 'i');
  145.     PROCESS_KEY(SCANCODE_O, 'o');
  146.     PROCESS_KEY(SCANCODE_P, 'p');
  147.  
  148.     PROCESS_KEY(SCANCODE_A, 'a');
  149.     PROCESS_KEY(SCANCODE_S, 's');
  150.     PROCESS_KEY(SCANCODE_D, 'd');
  151.     PROCESS_KEY(SCANCODE_F, 'f');
  152.     PROCESS_KEY(SCANCODE_G, 'g');
  153.     PROCESS_KEY(SCANCODE_H, 'h');
  154.     PROCESS_KEY(SCANCODE_J, 'j');
  155.     PROCESS_KEY(SCANCODE_K, 'k');
  156.     PROCESS_KEY(SCANCODE_L, 'l');
  157.  
  158.     PROCESS_KEY(SCANCODE_Z, 'z');
  159.     PROCESS_KEY(SCANCODE_X, 'x');
  160.     PROCESS_KEY(SCANCODE_C, 'c');
  161.     PROCESS_KEY(SCANCODE_V, 'v');
  162.     PROCESS_KEY(SCANCODE_B, 'b');
  163.     PROCESS_KEY(SCANCODE_N, 'n');
  164.     PROCESS_KEY(SCANCODE_M, 'm');
  165.  
  166.     memcpy(bios_oldclavier,bios_curclavier,128);
  167. }
  168.