home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 7 / FreshFishVol7.bin / bbs / gnu / aplusplus-1.01-src.lha / GNU / src / amiga / APlusPlus-1.01 / libsource / RawKeyDecoder.cxx < prev    next >
C/C++ Source or Header  |  1994-04-23  |  2KB  |  71 lines

  1. /******************************************************************************
  2.  **
  3.  **    C++ Class Library for the Amiga© system software.
  4.  **
  5.  **    Copyright (C) 1994 by Armin Vogt  **  EMail: armin@uni-paderborn.de
  6.  **    All Rights Reserved.
  7.  **
  8.  **    $Source: apphome:APlusPlus/RCS/libsource/RawKeyDecoder.cxx,v $
  9.  **    $Revision: 1.3 $
  10.  **    $Date: 1994/04/23 21:02:20 $
  11.  **    $Author: Armin_Vogt $
  12.  **
  13.  ******************************************************************************/
  14.  
  15.  
  16. extern "C" {
  17. #ifdef __GNUG__
  18. #include <inline/keymap.h>
  19. #endif
  20.  
  21. #ifdef __SASC
  22. #include <proto/keymap.h>
  23. #endif
  24.  
  25. #include <devices/inputevent.h>
  26. #include <devices/keymap.h>
  27. }
  28. #include <APlusPlus/intuition/RawKeyDecoder.h>
  29.  
  30.  
  31. volatile static char rcs_id[] = "$Id: RawKeyDecoder.cxx,v 1.3 1994/04/23 21:02:20 Armin_Vogt Exp Armin_Vogt $";
  32.  
  33.  
  34. RawKeyDecoder::RawKeyDecoder(const IntuiMessageC *imsg)
  35. {
  36.     decode(imsg);
  37. }
  38.  
  39. void RawKeyDecoder::decode(const IntuiMessageC *imsg)
  40. {
  41.     #define RKD_MAX_INPUT_LEN 10
  42.     UBYTE inputBuffer[RKD_MAX_INPUT_LEN+1];
  43.     
  44.     struct InputEvent inputEvent = { 0,IECLASS_RAWKEY,0,0,0 };
  45.     inputEvent.ie_Code      = imsg->Code;
  46.    inputEvent.ie_Qualifier = imsg->Qualifier;
  47.     inputEvent.ie_EventAddress = (APTR)((struct IntuiMessage*)imsg)->IAddress;
  48.     
  49.     (void) MapRawKey(&inputEvent,(char*)inputBuffer,RKD_MAX_INPUT_LEN,NULL);
  50.     
  51.     keyQualifier = (RKD_IEQualifier)imsg->Qualifier;
  52.         
  53.     UBYTE *bufferPtr = inputBuffer;
  54.     if (*bufferPtr==0x9b)
  55.     {
  56.         keycode = (RKD_KeyCode)*++bufferPtr;
  57.         if (keycode==' ')
  58.         {
  59.             switch (keycode = (RKD_KeyCode)*++bufferPtr)
  60.             {
  61.                 // rewrite SHIFTED cursor keys to non-shifted with qualifier
  62.                 case 'T' : keycode = CURSOR_UP; break;
  63.                 case 'S' : keycode = CURSOR_DOWN; break;
  64.                 case '@' : keycode = CURSOR_RIGHT; break;
  65.                 case 'A' : keycode = CURSOR_LEFT; break;
  66.             }
  67.         }
  68.     }
  69.     else keycode = (RKD_KeyCode)*bufferPtr;
  70. }
  71.