Subversion Repositories Games.Descent

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 1
/*
2
 * Portions of this file are copyright Rebirth contributors and licensed as
3
 * described in COPYING.txt.
4
 * Portions of this file are copyright Parallax Software and licensed
5
 * according to the Parallax license below.
6
 * See COPYING.txt for license details.
7
 
8
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
9
SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
10
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
11
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
12
IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
13
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
14
FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
15
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
16
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
17
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
18
*/
19
 
20
 
21
#include <stdio.h>
22
#include <stdarg.h>
23
#include <string.h>
24
 
25
#include "maths.h"
26
#include "pstypes.h"
27
#include "gr.h"
28
#include "event.h"
29
#include "ui.h"
30
#include "key.h"
31
#include "window.h"
32
#include "compiler-range_for.h"
33
#include "d_range.h"
34
 
35
namespace dcx {
36
 
37
constexpr std::array<const char *, 256> KeyDesc{{
38
"","{Esc}","{1}","{2}","{3}","{4}","{5}","{6}","{7}","{8}","{9}","{0}","{-}",           \
39
"{=}","{Backspace}","{Tab}","{Q}","{W}","{E}","{R}","{T}","{Y}","{U}","{I}","{O}",      \
40
"{P}","{[}","{]}","{Enter}","{LeftCtrl}","{A}","{S}","{D}","{F}",        \
41
"{G}","{H}","{J}","{K}","{L}","{;}","{'}","{`}",        \
42
"{RightShift}","{\\}","{Z}","{X}","{C}","{V}","{B}","{N}","{M}","{,}",      \
43
"{.}","{/}","{LeftShift}","{Pad*}","{LeftAlt}","{Spacebar}",      \
44
"{CapsLock}","{F1}","{F2}","{F3}","{F4}","{F5}","{F6}","{F7}","{F8}","{F9}",        \
45
"{F10}","{NumLock}","{ScrollLock}","{Pad7}","{Pad8}","{Pad9}","{Pad-}",   \
46
"{Pad4}","{Pad5}","{Pad6}","{Pad+}","{Pad1}","{Pad2}","{Pad3}","{Pad0}", \
47
"{Pad.}","","","","{F11}","{F12}","","","","","","","","","",         \
48
"","","","","","","","","","","","","","","","","","","","",     \
49
"","","","","","","","","","","","","","","","","","","","",     \
50
"","","","","","","","","","","","","","","","","","",           \
51
"{PadEnter}","{RightCtrl}","","","","","","","","","","","","","", \
52
"","","","","","","","","","","{Pad/}","","","{RightAlt}","",      \
53
"","","","","","","","","","","","","","{Home}","{Up}","{PageUp}",     \
54
"","{Left}","","{Right}","","{End}","{Down}","{PageDown}","{Insert}",       \
55
"{Delete}","","","","","","","","","","","","","","","","","",     \
56
"","","","","","","","","","","","","","","","","","","","",     \
57
"","","","","","",""
58
}};
59
 
60
 
61
 
62
 
63
void GetKeyDescription(char (&text)[100], uint_fast32_t keypress)
64
{
65
        const char *Ctrl = keypress & KEY_CTRLED ? "{Ctrl}" : "";
66
        const char *Alt = keypress & KEY_ALTED ? "{Alt}" : "";
67
        const char *Shift = keypress & KEY_SHIFTED ? "{Shift}" : "";
68
        snprintf(text, sizeof(text), "%s%s%s%s", Ctrl, Alt, Shift, KeyDesc[keypress & 255 ]);
69
}
70
 
71
 
72
int DecodeKeyText( const char * text )
73
{
74
        int code = 0;
75
 
76
        if (strstr(text, "{Ctrl}") )
77
                code |= KEY_CTRLED;
78
        if (strstr(text, "{Alt}") )
79
                code |= KEY_ALTED;
80
        if (strstr(text, "{Shift}") )
81
                code |= KEY_SHIFTED;
82
 
83
        range_for (const int i, xrange(256u))
84
        {
85
                if ( strlen(KeyDesc[i])>0 && strstr(text, KeyDesc[i]) )
86
                {
87
                        code |= i;
88
                        return code;
89
                }
90
        }
91
        return -1;
92
}
93
 
94
}