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 | } |