E:/Download/ois-1.0RC1/src/mac/MacKeyboard.cpp

Go to the documentation of this file.
00001 /*
00002  The zlib/libpng License
00003  
00004  Copyright (c) 2006 Chris Snyder 
00005  
00006  This software is provided 'as-is', without any express or implied warranty. In no event will
00007  the authors be held liable for any damages arising from the use of this software.
00008  
00009  Permission is granted to anyone to use this software for any purpose, including commercial 
00010  applications, and to alter it and redistribute it freely, subject to the following
00011  restrictions:
00012  
00013  1. The origin of this software must not be misrepresented; you must not claim that 
00014  you wrote the original software. If you use this software in a product, 
00015  an acknowledgment in the product documentation would be appreciated but is 
00016  not required.
00017  
00018  2. Altered source versions must be plainly marked as such, and must not be 
00019  misrepresented as being the original software.
00020  
00021  3. This notice may not be removed or altered from any source distribution.
00022 */
00023 
00024 #include "mac/MacKeyboard.h"
00025 #include "mac/MacInputManager.h"
00026 #include "mac/MacHelpers.h"
00027 #include "OISException.h"
00028 #include "OISEvents.h"
00029 
00030 #include <Carbon/Carbon.h>
00031 
00032 #include <list>
00033 #include <string>
00034 
00035 //#include <iostream>
00036 //using namespace std;
00037 
00038 using namespace OIS;
00039 
00040 //-------------------------------------------------------------------//
00041 MacKeyboard::MacKeyboard( InputManager* creator, bool buffered, bool repeat )
00042 {
00043         mCreator = creator;
00044     keyDownEventRef = NULL;
00045     keyUpEventRef = NULL;
00046     keyModEventRef = NULL;
00047     
00048     mBuffered = buffered;
00049     useRepeat = repeat;
00050     
00051     
00052     // Get a so-called "Univeral procedure pointer" for our callback
00053     keyDownUPP = NewEventHandlerUPP( KeyDownWrapper );
00054     keyUpUPP   = NewEventHandlerUPP( KeyUpWrapper );
00055     keyModUPP  = NewEventHandlerUPP( KeyModWrapper );
00056     
00057     // populate the conversion map
00058     populateKeyConversion();
00059 }
00060 
00061 //-------------------------------------------------------------------//
00062 MacKeyboard::~MacKeyboard()
00063 {
00064     // Remove our handlers so that this instance doesn't get called
00065     // after it is deleted
00066     if ( keyDownEventRef != NULL ) RemoveEventHandler( keyDownEventRef );
00067     if ( keyUpEventRef != NULL ) RemoveEventHandler( keyUpEventRef );
00068     if ( keyModEventRef != NULL ) RemoveEventHandler( keyUpEventRef );
00069     
00070     // dispose of our UPPs
00071     DisposeEventHandlerUPP( keyDownUPP );
00072     DisposeEventHandlerUPP( keyUpUPP );
00073     DisposeEventHandlerUPP( keyModUPP );
00074 }
00075 
00076 //-------------------------------------------------------------------//
00077 void MacKeyboard::_initialize()
00078 {
00079     OSStatus status;
00080     WindowRef window = ( (MacInputManager*)mCreator)->_getWindow();
00081     
00082     memset( &KeyBuffer, 0, 256 );
00083     mModifiers = 0;
00084     prevModMask = 0;
00085     
00086     // just in case this gets called after the first time.. better safe
00087     if ( keyDownEventRef != NULL ) RemoveEventHandler( keyDownEventRef );
00088     if ( keyUpEventRef != NULL ) RemoveEventHandler( keyUpEventRef );
00089     if ( keyModEventRef != NULL ) RemoveEventHandler( keyUpEventRef );
00090     keyDownEventRef = NULL;
00091     keyUpEventRef = NULL;
00092     keyModEventRef = NULL;
00093     
00094     EventTypeSpec DownSpec[2];
00095     EventTypeSpec UpSpec, ModSpec, RepeatSpec;
00096     
00097     // Set the type of events we wish to handle
00098     DownSpec[0].eventClass = kEventClassKeyboard;
00099     DownSpec[0].eventKind = kEventRawKeyDown;
00100     DownSpec[1].eventClass = kEventClassKeyboard;
00101     DownSpec[1].eventKind = kEventRawKeyRepeat;
00102     
00103     UpSpec.eventClass = kEventClassKeyboard;
00104     UpSpec.eventKind = kEventRawKeyUp;
00105     
00106     // Separate events for modifiers change, because they aren't reported normally
00107     ModSpec.eventClass = kEventClassKeyboard;
00108     ModSpec.eventKind = kEventRawKeyModifiersChanged;
00109    
00110     if ( useRepeat ) {
00111         // send both elements of downspec array... second index is for repeat events
00112         status = InstallWindowEventHandler( window, keyDownUPP, 2, DownSpec, this, &keyDownEventRef );
00113     }
00114     else {
00115         status = InstallWindowEventHandler( window, keyDownUPP, 1, DownSpec, this, &keyDownEventRef );
00116     }
00117         
00118     if ( status != noErr ) {
00119         OIS_EXCEPT( E_General, "MacKeyboard::_initialize >> Error loading KeyDown event handler" );
00120     }
00121     
00122     status = InstallWindowEventHandler( window, keyUpUPP, 1, &UpSpec, this, &keyUpEventRef );
00123     if ( status != noErr ) {
00124         OIS_EXCEPT( E_General, "MacKeyboard::_initialize >> Error loading KeyUp event handler" );
00125     }
00126     
00127     status = InstallWindowEventHandler( window, keyModUPP, 1, &ModSpec, this, &keyModEventRef );
00128     if ( status != noErr ) {
00129         OIS_EXCEPT( E_General, "MacKeyboard::_initialize >> Error loading Keymods event handler" );
00130     }
00131 }
00132 
00133 //-------------------------------------------------------------------//
00134 bool MacKeyboard::isKeyDown( KeyCode key )
00135 {
00136     return (bool)KeyBuffer[key];
00137 }
00138 
00139 
00140 //-------------------------------------------------------------------//
00141 void MacKeyboard::capture()
00142 {
00143     // if not buffered just return, we update the unbuffered automatically
00144     if ( !mBuffered || !listener ) return;
00145     
00146     // run through our event stack
00147     eventStack::iterator cur_it;
00148     
00149     for (cur_it = pendingEvents.begin(); cur_it != pendingEvents.end(); cur_it++) {
00150         
00151         if ( (*cur_it).Type == MAC_KEYDOWN || (*cur_it).Type == MAC_KEYREPEAT) {
00152             listener->keyPressed( (*cur_it).Event );
00153         } 
00154         else if ( (*cur_it).Type == MAC_KEYUP ) {
00155             listener->keyReleased( (*cur_it).Event );
00156         }
00157     }
00158     
00159     pendingEvents.clear();
00160 }
00161 
00162 
00163 //-------------------------------------------------------------------//
00164 std::string& MacKeyboard::getAsString( KeyCode key )
00165 {
00166     getString = "";
00167     
00168     return getString;
00169 }
00170 
00171 //-------------------------------------------------------------------//
00172 void MacKeyboard::setBuffered( bool buffered )
00173 {
00174     mBuffered = buffered;
00175 }
00176 
00177 
00178 //-------------------------------------------------------------------//
00179 void MacKeyboard::_keyDownCallback( EventRef theEvent )
00180 {
00181     
00182     UInt32 virtualKey;
00183     OSStatus status;
00184     
00185     unsigned int time = (unsigned int)GetEventTime(theEvent);
00186     
00187     status = GetEventParameter( theEvent,                      
00188                                 'kcod',                // get it in virtual keycode
00189                                 typeUInt32, NULL,      // desired return type
00190                                 sizeof(UInt32), NULL,  // bufsize
00191                                 &virtualKey );
00192     
00193     KeyCode kc = keyConversion[virtualKey];
00194     
00195     // record what kind of text we should pass the KeyEvent
00196     UniChar text[10];
00197     char macChar;
00198     
00199     // TODO clean this up
00200     if (mTextMode == Unicode) {
00201                 
00202         //get string size
00203         UInt32 stringsize;
00204         status = GetEventParameter( theEvent, 'kuni', typeUnicodeText, NULL,
00205                                     0, &stringsize, NULL);
00206         
00207         //cout << "String length: " << stringsize << endl;
00208         
00209         status = GetEventParameter( theEvent, 'kuni', typeUnicodeText, NULL,
00210                                     sizeof(UniChar)*10, NULL, &text );
00211         //wstring unitext;
00212         //for (int i=0;i<10;i++) unitext += (wchar_t)text[i];
00213         
00214         //wcout << "Unicode out: " << unitext << endl;
00215         
00216         // for each unicode char, send an event
00217         stringsize--; // no termination char
00218         for ( int i = 0; i < stringsize; i++ ) {
00219             injectEvent( kc, time, MAC_KEYDOWN, (unsigned int)text[i] );
00220         }
00221     
00222     } 
00223     
00224     else if (mTextMode == Ascii) {
00225          
00226         status = GetEventParameter( theEvent, 'kchr', typeChar, NULL,
00227                                     sizeof(char), NULL, &macChar );
00228         
00229         injectEvent( kc, time, MAC_KEYDOWN, (unsigned int)macChar );
00230     }
00231     
00232     else {
00233         injectEvent( kc, time, MAC_KEYDOWN );
00234     }
00235 }
00236 
00237 //-------------------------------------------------------------------//
00238 void MacKeyboard::_keyUpCallback( EventRef theEvent )
00239 {
00240     UInt32 virtualKey;
00241     
00242     OSStatus status;
00243     status = GetEventParameter( theEvent, kEventParamKeyCode, typeUInt32,
00244                                 NULL, sizeof(UInt32), NULL, &virtualKey );
00245     
00246     KeyCode kc = keyConversion[virtualKey];
00247     injectEvent( kc, (int)GetEventTime(theEvent), MAC_KEYUP );
00248     
00249 }
00250 
00251 //-------------------------------------------------------------------//
00252 void MacKeyboard::_modChangeCallback( EventRef theEvent )
00253 {
00254     UInt32 mods;
00255     
00256     OSStatus status;
00257     status = GetEventParameter( theEvent, kEventParamKeyModifiers,
00258                                 typeUInt32, NULL, sizeof(UInt32), NULL, &mods );
00259     
00260     // find the changed bit
00261     UInt32 change = prevModMask ^ mods;
00262     MacEventType newstate = ((change & prevModMask) > 0) ? MAC_KEYUP : MAC_KEYDOWN;
00263     unsigned int time = (int)GetEventTime( theEvent );
00264     
00265     //cout << "preMask: " << hex << prevModMask << endl;
00266     //cout << "ModMask: " << hex << mods << endl;
00267     //cout << "Change:  " << hex << (change & prevModMask) << endl << endl;
00268     
00269     // TODO test modifiers on a full keyboard to check if different mask for left/right
00270     switch (change)
00271     {
00272         case (shiftKey): // shift
00273                 mModifiers &= (newstate == MAC_KEYDOWN) ? Shift : ~Shift;
00274                 injectEvent( KC_LSHIFT, time, newstate );
00275                 //injectEvent( KC_RSHIFT, time, newstate );
00276                 break;
00277             
00278         case (optionKey): // option (alt)
00279                 mModifiers &= (newstate == MAC_KEYDOWN) ? Alt : -Alt;
00280                 //injectEvent( KC_RMENU, time, newstate );
00281                 injectEvent( KC_LMENU, time, newstate );
00282                 break;
00283             
00284         case (controlKey): // Ctrl
00285                 mModifiers += (newstate == MAC_KEYDOWN) ? Ctrl : -Ctrl;
00286                 //injectEvent( KC_RCONTROL, time, newstate );
00287                 injectEvent( KC_LCONTROL, time, newstate );
00288                 break;
00289     
00290         case (cmdKey): // apple
00291                 //injectEvent( KC_RWIN, time, newstate );
00292                 injectEvent( KC_LWIN, time, newstate );
00293                 break;
00294     
00295         case (kEventKeyModifierFnMask): // fn key
00296                 injectEvent( KC_APPS, time, newstate );
00297                 break;
00298             
00299         case (kEventKeyModifierNumLockMask): // numlock
00300                 injectEvent( KC_NUMLOCK, time, newstate );
00301                 break;
00302             
00303         case (alphaLock): // caps lock
00304                 injectEvent( KC_CAPITAL, time, newstate );
00305                 break;
00306     }
00307     
00308     prevModMask = mods;
00309 }
00310 
00311 //-------------------------------------------------------------------//
00312 void MacKeyboard::injectEvent( KeyCode kc, unsigned int time, MacEventType type, unsigned int txt )
00313 {
00314     // set to 1 if this is either a keydown or repeat
00315     KeyBuffer[kc] = ( type == MAC_KEYUP ) ? 0 : 1;
00316     
00317     if ( mBuffered && listener ) {
00318         pendingEvents.push_back( MacKeyStackEvent( KeyEvent(this, kc, txt), type) );
00319     }
00320 }
00321 
00322 
00323 //-------------------------------------------------------------------//
00324 void MacKeyboard::copyKeyStates( char keys[256] )
00325 {
00326         memcpy( keys, KeyBuffer, 256 );
00327 }
00328 
00329 
00330 
00331 //-------------------------------------------------------------------//
00332 void MacKeyboard::populateKeyConversion()
00333 {
00334     // TODO finish the key mapping
00335     
00336     // Virtual Key Map to KeyCode
00337         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x12, KC_1));
00338         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x13, KC_2));
00339         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x14, KC_3));
00340         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x15, KC_4));
00341         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x17, KC_5));
00342         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x16, KC_6));
00343         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x1A, KC_7));
00344         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x1C, KC_8));
00345         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x19, KC_9));
00346         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x1D, KC_0));
00347     
00348         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x33, KC_BACK));  // might be wrong
00349     
00350         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x1B, KC_MINUS));
00351         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x18, KC_EQUALS));
00352         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x31, KC_SPACE));
00353         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x2B, KC_COMMA));
00354         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x2F, KC_PERIOD));
00355     
00356         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x2A, KC_BACKSLASH));
00357         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x2C, KC_SLASH));
00358         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x21, KC_LBRACKET));
00359         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x1E, KC_RBRACKET));
00360     
00361         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x35, KC_ESCAPE));
00362         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x39, KC_CAPITAL));
00363     
00364         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x30, KC_TAB));
00365         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x24, KC_RETURN));  // double check return/enter
00366     
00367         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_colon, KC_COLON));     // no colon?
00368         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x29, KC_SEMICOLON));
00369         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x27, KC_APOSTROPHE));
00370         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x32, KC_GRAVE));
00371     
00372         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x0B, KC_B));
00373         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x00, KC_A));
00374         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x08, KC_C));
00375         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x02, KC_D));
00376         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x0E, KC_E));
00377         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x03, KC_F));
00378         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x05, KC_G));
00379         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x04, KC_H));
00380         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x22, KC_I));
00381         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x26, KC_J));
00382         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x28, KC_K));
00383         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x25, KC_L));
00384         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x2E, KC_M));
00385         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x2D, KC_N));
00386         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x1F, KC_O));
00387         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x23, KC_P));
00388         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x0C, KC_Q));
00389         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x0F, KC_R));
00390         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x01, KC_S));
00391         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x11, KC_T));
00392         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x20, KC_U));
00393         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x09, KC_V));
00394         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x0D, KC_W));
00395         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x07, KC_X));
00396         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x10, KC_Y));
00397         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x06, KC_Z));
00398     
00399         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x7A, KC_F1));
00400         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x78, KC_F2));
00401         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x63, KC_F3));
00402         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x76, KC_F4));
00403         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x60, KC_F5));
00404         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x61, KC_F6));
00405         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x62, KC_F7));
00406         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x64, KC_F8));
00407         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x65, KC_F9));
00408         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x6D, KC_F10));
00409         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x67, KC_F11));
00410         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x6F, KC_F12));
00411         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x69, KC_F13));
00412         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x6B, KC_F14));
00413         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x71, KC_F15));
00414     
00415         //Keypad
00416         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x52, KC_NUMPAD0));
00417         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x53, KC_NUMPAD1));
00418         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x54, KC_NUMPAD2));
00419         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x55, KC_NUMPAD3));
00420         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x56, KC_NUMPAD4));
00421         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x57, KC_NUMPAD5));
00422         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x58, KC_NUMPAD6));
00423         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x59, KC_NUMPAD7));
00424         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x5B, KC_NUMPAD8));
00425         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x5C, KC_NUMPAD9));
00426         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x45, KC_ADD));
00427         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x4E, KC_SUBTRACT));
00428         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x41, KC_DECIMAL));
00429         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x51, KC_NUMPADEQUALS));
00430         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x4B, KC_DIVIDE));
00431         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x43, KC_MULTIPLY));
00432         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x4C, KC_NUMPADENTER));
00433     
00434         //Keypad with numlock off
00435         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x73, KC_NUMPAD7));  // not sure of these
00436         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_KP_Up, KC_NUMPAD8)); // check on a non-laptop
00437         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_KP_Page_Up, KC_NUMPAD9));
00438         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_KP_Left, KC_NUMPAD4));
00439         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_KP_Begin, KC_NUMPAD5));
00440         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_KP_Right, KC_NUMPAD6));
00441         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_KP_End, KC_NUMPAD1));
00442         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_KP_Down, KC_NUMPAD2));
00443         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_KP_Page_Down, KC_NUMPAD3));
00444         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_KP_Insert, KC_NUMPAD0));
00445         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_KP_Delete, KC_DECIMAL));
00446     
00447         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x7E, KC_UP));
00448         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x7D, KC_DOWN));
00449         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x7B, KC_LEFT));
00450         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x7C, KC_RIGHT));
00451     
00452         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x74, KC_PGUP));
00453         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x79, KC_PGDOWN));
00454         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x73, KC_HOME));
00455         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x77, KC_END));
00456     
00457         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_Print, KC_SYSRQ));        // ??
00458         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_Scroll_Lock, KC_SCROLL)); // ??
00459         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_Pause, KC_PAUSE));        // ??
00460     
00461     
00462         //keyConversion.insert(VirtualtoOIS_KeyMap::value_type(XK_Insert, KC_INSERT));      // ??
00463         keyConversion.insert(VirtualtoOIS_KeyMap::value_type(0x75, KC_DELETE)); // del under help key?
00464 }
00465 
00466 
00467 
00468 

Generated on Sat Dec 1 20:13:51 2007 for OIS by  doxygen 1.5.4