home *** CD-ROM | disk | FTP | other *** search
/ Large Pack of OldSkool DOS MOD Trackers / goattracker_2.68.zip / src / bme / bme_kbd.c < prev    next >
C/C++ Source or Header  |  2008-04-01  |  4KB  |  210 lines

  1. //
  2. // BME (Blasphemous Multimedia Engine) keyboard module
  3. //
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. #include <SDL/SDL.h>
  10. #include "bme_main.h"
  11. #include "bme_cfg.h"
  12. #include "bme_win.h"
  13. #include "bme_io.h"
  14. #include "bme_err.h"
  15.  
  16. int kbd_init(void);
  17. void kbd_uninit(void);
  18. int kbd_waitkey(void);
  19. int kbd_getkey(void);
  20. int kbd_checkkey(int rawcode);
  21. int kbd_getascii(void);
  22. unsigned kbd_getvirtualkey(void);
  23. char *kbd_getkeyname(int rawcode);
  24.  
  25. static KEY keyname[] = {{KEY_BACKSPACE, "BACKSPACE"},
  26.     {KEY_CAPSLOCK, "CAPSLOCK"},
  27.     {KEY_ENTER, "ENTER"},
  28.     {KEY_ESC, "ESC"},
  29.     {KEY_NUMLOCK, "NUMLOCK"},
  30.     {KEY_LEFTSHIFT, "SHIFT"},
  31.     {KEY_RIGHTSHIFT, "SHIFT"},
  32.     {KEY_SCROLLLOCK, "SCR. LOCK"},
  33.     {KEY_SPACE, "SPACE"},
  34.     {KEY_TAB, "TAB"},
  35.     {KEY_F1, "F1"},
  36.     {KEY_F2, "F2"},
  37.     {KEY_F3, "F3"},
  38.     {KEY_F4, "F4"},
  39.     {KEY_F5, "F5"},
  40.     {KEY_F6, "F6"},
  41.     {KEY_F7, "F7"},
  42.     {KEY_F8, "F8"},
  43.     {KEY_F9, "F9"},
  44.     {KEY_F10, "F10"},
  45.     {KEY_F11, "F11"},
  46.     {KEY_F12, "F12"},
  47.     {KEY_A, "A"},
  48.     {KEY_N, "N"},
  49.     {KEY_B, "B"},
  50.     {KEY_O, "O"},
  51.     {KEY_C, "C"},
  52.     {KEY_P, "P"},
  53.     {KEY_D, "D"},
  54.     {KEY_Q, "Q"},
  55.     {KEY_E, "E"},
  56.     {KEY_R, "R"},
  57.     {KEY_F, "F"},
  58.     {KEY_S, "S"},
  59.     {KEY_G, "G"},
  60.     {KEY_T, "T"},
  61.     {KEY_H, "H"},
  62.     {KEY_U, "U"},
  63.     {KEY_I, "I"},
  64.     {KEY_V, "V"},
  65.     {KEY_J, "J"},
  66.     {KEY_W, "W"},
  67.     {KEY_K, "K"},
  68.     {KEY_X, "X"},
  69.     {KEY_L, "L"},
  70.     {KEY_Y, "Y"},
  71.     {KEY_M, "M"},
  72.     {KEY_Z, "Z"},
  73.     {KEY_1, "1"},
  74.     {KEY_2, "2"},
  75.     {KEY_3, "3"},
  76.     {KEY_4, "4"},
  77.     {KEY_5, "5"},
  78.     {KEY_6, "6"},
  79.     {KEY_7, "7"},
  80.     {KEY_8, "8"},
  81.     {KEY_9, "9"},
  82.     {KEY_0, "0"},
  83.     {KEY_MINUS, "-"},
  84.     {KEY_EQUAL, "="},
  85.     {KEY_BRACKETL, "["},
  86.     {KEY_BRACKETR, "]"},
  87.     {KEY_SEMICOLON, ";"},
  88.     {KEY_APOST1, "'"},
  89.     {KEY_APOST2, "`"},
  90.     {KEY_COMMA, ","},
  91.     {KEY_COLON, "."},
  92.     {KEY_SLASH, "/"},
  93.     {KEY_BACKSLASH, "\\"},
  94.     {KEY_ALT, "ALT"},
  95.     {KEY_CTRL, "CTRL"},
  96.     {KEY_DEL, "DELETE"},
  97.     {KEY_DOWN, "CRS. DOWN"},
  98.     {KEY_END, "END"},
  99.     {KEY_HOME, "HOME"},
  100.     {KEY_INS, "INSERT"},
  101.     {KEY_LEFT, "CRS. LEFT"},
  102.     {KEY_PGDN, "PAGE DOWN"},
  103.     {KEY_PGUP, "PAGE UP"},
  104.     {KEY_RIGHT, "CRS. RIGHT"},
  105.     {KEY_UP, "CRS. UP"},
  106.     {KEY_WINDOWSL, "WINDOWS KEY"},
  107.     {KEY_WINDOWSR, "WINDOWS KEY"},
  108.     {KEY_MENU, "MENU KEY"},
  109.     {0xff, "?"}};
  110.  
  111. int kbd_init(void)
  112. {
  113.     return BME_OK;
  114. }
  115.  
  116. void kbd_uninit(void)
  117. {
  118. }
  119.  
  120. int kbd_waitkey(void)
  121. {
  122.     int index;
  123.  
  124.     win_asciikey = 0;
  125.     for (;;)
  126.     {
  127.         win_checkmessages();
  128.  
  129.         for (index = 0; index < MAX_KEYS; index++)
  130.         {
  131.             if (win_keytable[index])
  132.             {
  133.                 win_keytable[index] = 0;
  134.                 return index;
  135.             }
  136.         }
  137.  
  138.         SDL_Delay(15);
  139.     }
  140. }
  141.  
  142. int kbd_getkey(void)
  143. {
  144.     int index;
  145.  
  146.     for (index = 0; index < MAX_KEYS; index++)
  147.     {
  148.         if (win_keytable[index])
  149.         {
  150.             win_keytable[index] = 0;
  151.             return index;
  152.         }
  153.     }
  154.     return 0;
  155. }
  156.  
  157. int kbd_checkkey(int rawcode)
  158. {
  159.     if (rawcode >= MAX_KEYS) return 0;
  160.     if (win_keytable[rawcode])
  161.     {
  162.         win_keytable[rawcode] = 0;
  163.         return 1;
  164.     }
  165.     return 0;
  166. }
  167.  
  168. int kbd_getascii(void)
  169. {
  170.     int key;
  171.  
  172.     if (win_asciikey)
  173.     {
  174.         key = win_asciikey;
  175.         win_asciikey = 0;
  176.         return key;
  177.     }
  178.     else return 0;
  179. }
  180.  
  181. unsigned kbd_getvirtualkey(void)
  182. {
  183.     unsigned key;
  184.  
  185.     if (win_virtualkey)
  186.     {
  187.         key = win_virtualkey;
  188.         win_virtualkey = 0;
  189.         return key;
  190.     }
  191.     else return 0;
  192. }
  193.  
  194. char *kbd_getkeyname(int rawcode)
  195. {
  196.     KEY *ptr = &keyname[0];
  197.  
  198.     while (ptr->rawcode != 255)
  199.     {
  200.         if (ptr->rawcode == rawcode)
  201.         {
  202.             return ptr->name;
  203.         }
  204.         ptr++;
  205.     }
  206.     return ptr->name;
  207. }
  208.  
  209.  
  210.