home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / !BONUS / GAMES / ENGINES / BM214A.ZIP / BM214A / ORIGINAL.SRC / KEYBOARD.CPP < prev    next >
C/C++ Source or Header  |  1995-03-23  |  3KB  |  114 lines

  1. /********************************************************************
  2.  FILENAME: KEYBOARD.CPP
  3.  AUTHOR  : JAKE HILL
  4.  DATE    : 12/1/94
  5.  
  6. ********************************************************************/
  7.  
  8.  
  9. /********************************************************************
  10.  
  11. INS  = 82 / 210          /     = 53 / 181
  12. DEL  = 83 / 211          *     = 55 / 183
  13. HOME = 71 / 199          -     = 74 / 202
  14. END  = 79 / 207          +     = 78 / 206
  15. PGUP = 73 / 201          SPACE = 57 / 185
  16. PGDN = 81 / 209          ENTER = 28 / 156
  17.  
  18. ********************************************************************/
  19.  
  20. #include <dos.h>
  21. #include <conio.h>
  22. #include <stdlib.h>
  23.  
  24. #include "KEYBOARD.HPP"
  25.  
  26. short key;
  27. short key_flags = 0;
  28. short key_init = 0;
  29.  
  30. #if defined __BORLANDC__
  31. void interrupt (*OldInterrupt)(...);
  32. #elif defined _MSC_VER
  33. void (__interrupt __far __cdecl *OldInterrupt)();
  34. #endif
  35.  
  36. #if defined __BORLANDC__
  37. void interrupt NewInterrupt(...)
  38. #elif defined _MSC_VER
  39. void (__interrupt __far __cdecl NewInterrupt)()
  40. #endif
  41. {
  42.    unsigned char c;
  43.  
  44.    key = inp(0x60);
  45.  
  46.    c = inp(0x61);
  47.    outp(0x61, c | 0x80);
  48.    outp(0x61, c & 0x7F);
  49.  
  50.    outp(0x20, 0x20);
  51.  
  52.    switch(key)
  53.    {
  54.       case PR_UP:    key_flags |= FLAG_UP;
  55.                      break;
  56.  
  57.       case PR_DOWN:  key_flags |= FLAG_DOWN;
  58.                      break;
  59.  
  60.       case PR_RIGHT: key_flags |= FLAG_RIGHT;
  61.                      break;
  62.  
  63.       case PR_LEFT:  key_flags |= FLAG_LEFT;
  64.                      break;
  65.  
  66.       case PR_LSHF:  key_flags |= FLAG_LSHF;
  67.                      break;
  68.       case PR_RSHF:  key_flags |= FLAG_RSHF;
  69.                      break;
  70.       case PR_CTRL:  key_flags |= FLAG_CTRL;
  71.                      break;
  72.       case PR_ALT:   key_flags |= FLAG_ALT;
  73.                      break;
  74.  
  75.  
  76.  
  77.       case RL_UP:    key_flags &= NFLAG_UP;
  78.                      break;
  79.  
  80.       case RL_DOWN:  key_flags &= NFLAG_DOWN;
  81.                      break;
  82.  
  83.       case RL_RIGHT: key_flags &= NFLAG_RIGHT;
  84.                         break;
  85.  
  86.       case RL_LEFT:  key_flags &= NFLAG_LEFT;
  87.                      break;
  88.  
  89.       case RL_LSHF:  key_flags &= NFLAG_LSHF;
  90.                      break;
  91.       case RL_RSHF:  key_flags &= NFLAG_RSHF;
  92.                      break;
  93.       case RL_CTRL:  key_flags &= NFLAG_CTRL;
  94.                      break;
  95.       case RL_ALT:   key_flags &= NFLAG_ALT;
  96.                      break;
  97.       default: break;
  98.    }
  99. }
  100.  
  101. void ResetKeyboardInt(void)
  102. {
  103.     if ( key_init )
  104.         _dos_setvect(9, OldInterrupt);
  105. }
  106.  
  107. void SetKeyboardInt(void)
  108. {
  109.     atexit( ResetKeyboardInt );
  110.     OldInterrupt = _dos_getvect(9);
  111.     _dos_setvect(9, NewInterrupt);
  112.     key_init = 1;
  113. }
  114.