Reactos
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
51class KeyTranslator {
52friend class TMapLoader; // FIX ME!! This isn't the best solution
53public:
54 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
74 void set_ext_mode(DWORD mode) {ext_mode |= mode;}
75 void unset_ext_mode(DWORD mode) {ext_mode &= ~mode;}
76 void clear_ext_mode() {ext_mode = 0;}
77 DWORD get_ext_mode() {return ext_mode;}
78
79private:
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);
90 DWORD GetGlobalCode(int i) {return globals[i].GetCodeKey();}
91
92 int currentKeyMap, mainKeyMap; // AVS
93
94};