86
|
1 /*
|
|
2 mdport.c - Machine Dependent Code
|
|
3
|
|
4 Copyright (C) 2005-2008 Nicholas J. Kisseberth
|
|
5 All rights reserved.
|
|
6
|
|
7 Redistribution and use in source and binary forms, with or without
|
|
8 modification, are permitted provided that the following conditions
|
|
9 are met:
|
|
10 1. Redistributions of source code must retain the above copyright
|
|
11 notice, this list of conditions and the following disclaimer.
|
|
12 2. Redistributions in binary form must reproduce the above copyright
|
|
13 notice, this list of conditions and the following disclaimer in the
|
|
14 documentation and/or other materials provided with the distribution.
|
|
15 3. Neither the name(s) of the author(s) nor the names of other contributors
|
|
16 may be used to endorse or promote products derived from this software
|
|
17 without specific prior written permission.
|
|
18
|
|
19 THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTORS ``AS IS'' AND
|
|
20 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
22 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTORS BE LIABLE
|
|
23 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
25 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
26 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
27 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
28 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
29 SUCH DAMAGE.
|
|
30 */
|
|
31
|
|
32 /* This is a temporary stub version of rogue5's mdport.c. It is only to make
|
|
33 * md_readchar() available until srogue is ported to autoconf. Then the
|
|
34 * whole file should work.
|
|
35 */
|
|
36
|
|
37 #include <stdlib.h>
|
|
38 #include <string.h>
|
|
39
|
|
40 #if defined(_WIN32)
|
|
41 #include <Windows.h>
|
|
42 #include <Lmcons.h>
|
|
43 #include <io.h>
|
|
44 #include <conio.h>
|
|
45 #pragma warning( disable: 4201 )
|
|
46 #include <shlobj.h>
|
|
47 #pragma warning( default: 4201 )
|
|
48 #include <Shlwapi.h>
|
|
49 #undef MOUSE_MOVED
|
|
50 #endif
|
|
51
|
|
52 #include <sys/types.h>
|
|
53
|
|
54 #include <curses.h> /* AIX requires curses.h be included before term.h */
|
|
55
|
|
56 #include <ctype.h>
|
|
57 #include "rogue.h"
|
|
58
|
|
59 /*
|
|
60 Cursor/Keypad Support
|
|
61
|
|
62 Sadly Cursor/Keypad support is less straightforward than it should be.
|
|
63
|
|
64 The various terminal emulators/consoles choose to differentiate the
|
|
65 cursor and keypad keys (with modifiers) in different ways (if at all!).
|
|
66 Furthermore they use different code set sequences for each key only
|
|
67 a subset of which the various curses libraries recognize. Partly due
|
|
68 to incomplete termcap/terminfo entries and partly due to inherent
|
|
69 limitations of those terminal capability databases.
|
|
70
|
|
71 I give curses first crack at decoding the sequences. If it fails to decode
|
|
72 it we check for common ESC-prefixed sequences.
|
|
73
|
|
74 All cursor/keypad results are translated into standard rogue movement
|
|
75 commands.
|
|
76
|
|
77 Unmodified keys are translated to walk commands: hjklyubn
|
|
78 Modified (shift,control,alt) are translated to run commands: HJKLYUBN
|
|
79
|
|
80 Console and supported (differentiated) keys
|
|
81 Interix: Cursor Keys, Keypad, Ctl-Keypad
|
|
82 Cygwin: Cursor Keys, Keypad, Alt-Cursor Keys
|
|
83 MSYS: Cursor Keys, Keypad, Ctl-Cursor Keys, Ctl-Keypad
|
|
84 Win32: Cursor Keys, Keypad, Ctl/Shift/Alt-Cursor Keys, Ctl/Alt-Keypad
|
|
85 DJGPP: Cursor Keys, Keypad, Ctl/Shift/Alt-Cursor Keys, Ctl/Alt-Keypad
|
|
86
|
|
87 Interix Console (raw, ncurses)
|
|
88 ==============================
|
|
89 normal shift ctrl alt
|
|
90 ESC [D, ESC F^, ESC [D, ESC [D /# Left #/
|
|
91 ESC [C, ESC F$, ESC [C, ESC [C /# Right #/
|
|
92 ESC [A, ESC F-, local win, ESC [A /# Up #/
|
|
93 ESC [B, ESC F+, local win, ESC [B /# Down #/
|
|
94 ESC [H, ESC [H, ESC [H, ESC [H /# Home #/
|
|
95 ESC [S, local win, ESC [S, ESC [S /# Page Up #/
|
|
96 ESC [T, local win, ESC [T, ESC [T /# Page Down #/
|
|