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