Mercurial > hg > early-roguelike
annotate srogue/mdport.c @ 96:9fb343307b6b
Fix some 'test' failures when running 'make install'.
When shell variables are unexpectedly empty, 'test' gets the wrong
number of arguments and becomes unhappy. Logical AND should not be
done with 'test EXPR1 -a EXPR2' in such cases, because 'test' logic
does not short-circuit. Replace with 'test EXPR1 && test EXPR2'.
Shell logic does short-circuit, and if the first test invocation
fails, the second will never occur, and will never encounter missing
arguments.
author | John "Elwin" Edwards |
---|---|
date | Tue, 27 Aug 2013 22:54:28 -0700 |
parents | 8757a0593e6e |
children | ea71ef31d9be |
rev | line source |
---|---|
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 #/ | |
8757a0593e6e
srogue: add arrow-key support.
John "Elwin" Edwards |