1 /////////////////////////////////////////////////////////////////// 2 // // 3 // // 4 // Key translations - I.Ioannou (roryt@hol.gr) // 5 // Athens - Greece December 18, 1996 02:56am // 6 // Reads a .cfg file and keeps the key definitions // 7 // for the WIN32 console telnet // 8 // modified for alternate keymap swiching // 9 // by Andrey V. Smilianets (smile@head.aval.kiev.ua) // 10 // Kiev - Ukraine, December 1997. // 11 /////////////////////////////////////////////////////////////////// 12 // // 13 // class KeyTranslator // 14 // // 15 // Load : loads or replaces the keymap // 16 // TranslateKey : returns a char * to the key def // 17 // AddKeyDef : Changes or adds the key translation // 18 // DeleteKeyDef : Deletes a key def from the list // 19 /////////////////////////////////////////////////////////////////// 20 21 #pragma once 22 23 #include "tkeydef.h" 24 #include "tkeymap.h" 25 26 #define TOKEN_DELIMITERS " +\t" // The word's delimiters 27 28 // Ioannou 2 June 98: Borland needs them - quick hack 29 #ifdef __BORLANDC__ 30 #define bool BOOL 31 #define true TRUE 32 #define false FALSE 33 #endif // __BORLANDC__ 34 35 // Maybe not portable, but this is for application cursor mode 36 // (Paul Brannan 5/27/98) 37 // Updated for correct precedence in tncon.cpp (Paul Brannan 12/9/98) 38 #define APP4_KEY 0x8000 39 #define APP3_KEY 0x4000 40 #define APP2_KEY 0x2000 41 #define APP_KEY 0x1000 42 43 ///////////////////////////////////////////////////////////// 44 // class KeyTranslator // 45 // Load : loads or replaces the keymap // 46 // TranslateKey : returns a sz to the key def // 47 // AddKeyDef : Changes or adds the key translation // 48 // DeleteKeyDef : Deletes a key def from the list // 49 ///////////////////////////////////////////////////////////// 50 51 class KeyTranslator { 52 friend class TMapLoader; // FIX ME!! This isn't the best solution 53 public: 54 KeyTranslator(); ~KeyTranslator()55 ~KeyTranslator() { DeleteAllDefs(); } 56 57 int SwitchTo(int); // switch to selected keymap 58 int switchMap(TKeyDef& tk); 59 60 // Returns a pointer to the string that should be printed. 61 // Should return NULL if there is no translation for the key. 62 const char *TranslateKey(WORD wVirtualKeyCode, DWORD dwControlKeyState); 63 64 // Changes or adds the key translation associated with 65 // wVirtualScanCode and dwControlKeyState. 66 // Return 1 on success. 67 int AddKeyDef(WORD wVirtualKeyCode, DWORD dwControlKeyState, char *lpzKeyDef); 68 int AddKeyDef(WORD wVirtualKeyCode, DWORD dwControlKeyState, tn_ops op); 69 70 // Delete a key translation 71 int DeleteKeyDef(WORD wVirtualKeyCode, DWORD dwControlKeyState); 72 73 // Paul Brannan 8/28/98 set_ext_mode(DWORD mode)74 void set_ext_mode(DWORD mode) {ext_mode |= mode;} unset_ext_mode(DWORD mode)75 void unset_ext_mode(DWORD mode) {ext_mode &= ~mode;} clear_ext_mode()76 void clear_ext_mode() {ext_mode = 0;} get_ext_mode()77 DWORD get_ext_mode() {return ext_mode;} 78 79 private: 80 DWORD Fix_ControlKeyState(char *); 81 char* Fix_Tok(char *); 82 DWORD ext_mode; // Paul Brannan 8/28/98 83 84 TArrayAsVector<KeyMap> mapArray; 85 TArrayAsVector<TKeyDef> globals; 86 87 void DeleteAllDefs(void); 88 int AddGlobalDef(WORD wVirtualKeyCode, char*lpzKeyDef); 89 int LookOnGlobal(char* vkey); GetGlobalCode(int i)90 DWORD GetGlobalCode(int i) {return globals[i].GetCodeKey();} 91 92 int currentKeyMap, mainKeyMap; // AVS 93 94 }; 95