home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / 3DTOSHI2.ZIP / mpgfx / source / gfxinput.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-17  |  3.7 KB  |  165 lines

  1.  
  2. // gfxinput.cpp
  3. //
  4. // Copyright (c) 1995 by Toshiaki Tsuji, all rights reserved.
  5.  
  6. #include "stdgfx.h"
  7. #include "gfxinput.h"
  8.  
  9. INPUT Input;
  10.  
  11. INPUT::INPUT ()
  12.   {
  13.     KBDInstalled = FALSE;
  14.   } // End of Constructor for INPUT
  15.  
  16. INPUT::~INPUT ()
  17.   {
  18.     DeInit ();
  19.   } // End of Destructor for INPUT
  20.  
  21. BOOLEAN INPUT::Init ()
  22.   {
  23.     InstallKBDHandler ();
  24.     return SUCCESS;
  25.   } // End of Init for INPUT
  26.  
  27. VOID INPUT::DeInit ()
  28.   {
  29.     if (KBDInstalled)
  30.       UnInstallKBDHandler ();
  31.   } // End of DeInit for INPUT
  32.  
  33. BYTE KBDState[128];
  34. volatile LONG WhichKey;
  35.  
  36. #if defined (__FORDOS__)
  37.   #if defined (__FORWATCOM__)
  38.     VOID __interrupt __far MyKBDHandler ()
  39.   #elif defined (__FORVISUAL__)
  40.     VOID __interrupt __far MyKBDHandler ()
  41.   #elif defined (__FORBORLAND__)
  42.     #ifndef __FORDOSPWPK32__
  43.       VOID interrupt MyKBDHandler (...)
  44.     #else
  45.       VOID MyKBDHandler (...)
  46.     #endif
  47.   #endif
  48. #else
  49.   VOID MyKBDHandler ()
  50. #endif
  51.   {
  52.     #if defined (__FORDOS__)
  53.       _disable ();
  54.       // Get scan code from keyboard port
  55.       #ifndef __FORDOSPWPK32__
  56.          WhichKey = inp ( 0x60 );
  57.       #else
  58.         WhichKey = 0;
  59.       #endif
  60.       if (WhichKey>127)
  61.         {
  62.           WhichKey &= 127;
  63.           KBDState[WhichKey] = 0;
  64.         } // End if
  65.       else
  66.         {
  67.           KBDState[WhichKey] = 1;
  68.         } // End else
  69.  
  70.       INT Temp1,Temp2;
  71.       #ifndef __FORDOSPWPK32__
  72.         Temp1 = inp ( 0x61 );
  73.         Temp2 = Temp1;
  74.         Temp1 |= 0x80;
  75.         outp ( 0x80, Temp1 );
  76.         Temp1 = Temp2;
  77.         outp ( 0x80, Temp1 );
  78.         outp ( 0x20, 0x20 );
  79.       #else
  80.         Temp1 = 0;
  81.         Temp2 = 0;
  82.         if (Temp1&Temp2)
  83.           {}
  84.       #endif
  85.       // Enable other interrupts
  86.       _enable ();
  87.    #endif
  88.   } // End of MyKBDHandler
  89.  
  90. #if defined (__FORDOS__)
  91.   #if defined  (__FORWATCOM__)
  92.     VOID (__interrupt __far *OldKBDHandler)(); /* interrupt function pointer */
  93.   #elif defined (__FORBORLAND__)
  94.     #ifndef __FORDOSPWPK32__
  95.       VOID interrupt (*OldKBDHandler)(...); /* interrupt function pointer */
  96.     #else
  97.       VOID (*OldKBDHandler)(...); /* interrupt function pointer */
  98.     #endif
  99.   #endif
  100. #endif
  101.  
  102. VOID INPUT::InstallKBDHandler ()
  103.   {
  104.     INT i;
  105.     for (i=0;i<128;i++)
  106.       KBDState[i] = 0;
  107.  
  108.     #if defined (__FORWINDOWS__)
  109.     #elif defined (__FOROS2__)
  110.     #elif defined (__FORDOS__)
  111.       #ifdef __FORDOSPWPK32__
  112.       #else
  113.         // Get old kbd interrupt vector
  114.         OldKBDHandler = _dos_getvect ( INT_KBD );
  115.         // Set to new interrupt vector
  116.         _dos_setvect ( INT_KBD, MyKBDHandler );
  117.       #endif
  118.     #endif
  119.  
  120.     KBDInstalled = TRUE;
  121.   } // End of InstallKBDHandler for INPUT
  122.  
  123. VOID INPUT::UnInstallKBDHandler ()
  124.   {
  125.     #if defined (__FORWINDOWS__)
  126.     #elif defined (__FOROS2__)
  127.     #elif defined (__FORDOS__)
  128.       #ifdef __FORDOSPWPK32__
  129.       #else
  130.         _dos_setvect ( INT_KBD, OldKBDHandler );
  131.       #endif
  132.     #endif
  133.     KBDInstalled = FALSE;
  134.   } // End of UnInstallKBDHandler for INPUT
  135.  
  136. BOOLEAN INPUT::IsKeyDown ( INT WhichKey )
  137.   {
  138.     #if defined (__FORWINDOWS__)
  139.       LONG Result;
  140.       #if defined (__FORWIN386__)
  141.         Result = GetKeyState ( (short)WhichKey );
  142.       #else
  143.         Result = GetKeyState ( WhichKey );
  144.       #endif
  145.       if (Result<0)  // High order bit is set
  146.         return TRUE;
  147.       return FALSE;  
  148.     #elif defined (__FOROS2__)
  149.       if (WhichKey)
  150.         {}
  151.       return FALSE;
  152.     #elif defined (__FORDOS__)
  153.       if (KBDState[WhichKey])
  154.         return TRUE;
  155.       return FALSE;
  156.     #endif
  157.   } // End of IskeyDown for INPUT
  158.  
  159. VOID INPUT::WaitForKey ( INT WhichKey )
  160.   {
  161.     while (Input.IsKeyDown(WhichKey)==FALSE)
  162.       {}  
  163.   } // End of WaitForKey for INPUT
  164.   
  165.