annotate srogue/mdport.c @ 162:600873555ec0

Don't swap signal handlers in md_shellescape(). md_shellescape() sets SIGINT and SIGQUIT to be ignored, storing the previous handlers, and restores them after the shell exits. But it mixed up the two handlers. Since the signals were usually handled by the same function, this fix doesn't have much effect, but anything that makes signal code less confusing is a good thing.
author John "Elwin" Edwards
date Mon, 08 Jun 2015 10:01:25 -0400
parents e6c8652473fe
children 10c273a62228
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
86
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1 /*
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
2 mdport.c - Machine Dependent Code
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
3
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
4 Copyright (C) 2005-2008 Nicholas J. Kisseberth
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
5 All rights reserved.
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
6
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
7 Redistribution and use in source and binary forms, with or without
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
8 modification, are permitted provided that the following conditions
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
9 are met:
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
10 1. Redistributions of source code must retain the above copyright
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
11 notice, this list of conditions and the following disclaimer.
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
12 2. Redistributions in binary form must reproduce the above copyright
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
13 notice, this list of conditions and the following disclaimer in the
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
14 documentation and/or other materials provided with the distribution.
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
15 3. Neither the name(s) of the author(s) nor the names of other contributors
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
16 may be used to endorse or promote products derived from this software
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
17 without specific prior written permission.
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
18
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
19 THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTORS ``AS IS'' AND
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
20 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
22 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTORS BE LIABLE
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
23 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
24 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
25 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
26 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
27 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
28 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
29 SUCH DAMAGE.
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
30 */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
31
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
32 #include <stdlib.h>
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
33 #include <string.h>
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
34
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
35 #if defined(_WIN32)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
36 #include <Windows.h>
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
37 #include <Lmcons.h>
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
38 #include <io.h>
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
39 #include <conio.h>
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
40 #pragma warning( disable: 4201 )
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
41 #include <shlobj.h>
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
42 #pragma warning( default: 4201 )
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
43 #include <Shlwapi.h>
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
44 #undef MOUSE_MOVED
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
45 #endif
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
46
118
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
47 #include <curses.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
48 #include "rogue.h"
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
49
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
50 #if defined(HAVE_SYS_TYPES)
86
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
51 #include <sys/types.h>
118
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
52 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
53
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
54 #if defined(HAVE_PROCESS_H)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
55 #include <process.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
56 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
57
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
58 #if defined(HAVE_PWD_H)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
59 #include <pwd.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
60 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
61
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
62 #if defined(HAVE_SYS_UTSNAME)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
63 #include <sys/utsname.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
64 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
65
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
66 #if defined(HAVE_ARPA_INET_H)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
67 #include <arpa/inet.h> /* Solaris 2.8 required this for htonl() and ntohl() */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
68 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
69
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
70 #if defined(HAVE_TERMIOS_H)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
71 #include <termios.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
72 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
73
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
74 #if defined(HAVE_UNISTD_H)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
75 #ifndef __USE_GNU
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
76 #define __USE_GNU
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
77 #include <unistd.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
78 #undef __USE_GNU
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
79 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
80 #include <unistd.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
81 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
82 #endif
86
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
83
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
84 #include <curses.h> /* AIX requires curses.h be included before term.h */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
85
118
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
86 #if defined(HAVE_TERM_H)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
87 #include <term.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
88 #elif defined(HAVE_NCURSES_TERM_H)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
89 #include <ncurses/term.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
90 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
91
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
92 #if defined(HAVE_WORKING_FORK)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
93 #include <sys/wait.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
94 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
95
86
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
96 #include <ctype.h>
118
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
97 #include <fcntl.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
98 #include <limits.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
99 #include <sys/stat.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
100 #include <signal.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
101
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
102 #if !defined(PATH_MAX) && defined(_MAX_PATH)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
103 #define PATH_MAX _MAX_PATH
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
104 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
105
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
106 #if !defined(PATH_MAX) && defined(_PATH_MAX)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
107 #define PATH_MAX _PATH_MAX
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
108 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
109
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
110 #define NOOP(x) (x += 0)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
111
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
112 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
113 md_init(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
114 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
115 #if defined(__INTERIX)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
116 char *term;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
117
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
118 term = getenv("TERM");
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
119
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
120 if (term == NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
121 setenv("TERM","interix");
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
122 #elif defined(__DJGPP__)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
123 _fmode = _O_BINARY;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
124 #elif defined(_WIN32)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
125 _fmode = _O_BINARY;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
126 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
127
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
128 #if defined(HAVE_ESCDELAY) || defined(NCURSES_VERSION)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
129 ESCDELAY=64;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
130 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
131
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
132 #if defined(DUMP)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
133 md_onsignal_default();
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
134 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
135 md_onsignal_exit();
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
136 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
137 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
138
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
139 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
140 md_onsignal_default(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
141 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
142 #ifdef SIGHUP
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
143 signal(SIGHUP, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
144 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
145 #ifdef SIGQUIT
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
146 signal(SIGQUIT, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
147 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
148 #ifdef SIGILL
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
149 signal(SIGILL, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
150 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
151 #ifdef SIGTRAP
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
152 signal(SIGTRAP, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
153 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
154 #ifdef SIGIOT
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
155 signal(SIGIOT, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
156 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
157 #ifdef SIGEMT
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
158 signal(SIGEMT, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
159 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
160 #ifdef SIGFPE
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
161 signal(SIGFPE, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
162 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
163 #ifdef SIGBUS
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
164 signal(SIGBUS, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
165 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
166 #ifdef SIGSEGV
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
167 signal(SIGSEGV, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
168 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
169 #ifdef SIGSYS
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
170 signal(SIGSYS, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
171 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
172 #ifdef SIGTERM
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
173 signal(SIGTERM, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
174 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
175 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
176
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
177 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
178 md_onsignal_exit(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
179 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
180 #ifdef SIGHUP
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
181 signal(SIGHUP, SIG_DFL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
182 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
183 #ifdef SIGQUIT
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
184 signal(SIGQUIT, exit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
185 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
186 #ifdef SIGILL
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
187 signal(SIGILL, exit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
188 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
189 #ifdef SIGTRAP
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
190 signal(SIGTRAP, exit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
191 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
192 #ifdef SIGIOT
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
193 signal(SIGIOT, exit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
194 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
195 #ifdef SIGEMT
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
196 signal(SIGEMT, exit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
197 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
198 #ifdef SIGFPE
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
199 signal(SIGFPE, exit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
200 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
201 #ifdef SIGBUS
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
202 signal(SIGBUS, exit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
203 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
204 #ifdef SIGSEGV
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
205 signal(SIGSEGV, exit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
206 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
207 #ifdef SIGSYS
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
208 signal(SIGSYS, exit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
209 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
210 #ifdef SIGTERM
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
211 signal(SIGTERM, exit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
212 #endif
119
458df24e973d srogue: use functions from mdport.c.
John "Elwin" Edwards
parents: 118
diff changeset
213 #ifdef SIGINT
458df24e973d srogue: use functions from mdport.c.
John "Elwin" Edwards
parents: 118
diff changeset
214 signal(SIGINT, exit);
458df24e973d srogue: use functions from mdport.c.
John "Elwin" Edwards
parents: 118
diff changeset
215 #endif
118
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
216 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
217
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
218 extern void auto_save(int sig);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
219 extern void endit(int sig);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
220 extern void quit(int sig);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
221
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
222 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
223 md_onsignal_autosave(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
224 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
225
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
226 #ifdef SIGHUP
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
227 signal(SIGHUP, auto_save);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
228 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
229 #ifdef SIGQUIT
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
230 signal(SIGQUIT, endit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
231 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
232 #ifdef SIGILL
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
233 signal(SIGILL, auto_save);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
234 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
235 #ifdef SIGTRAP
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
236 signal(SIGTRAP, auto_save);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
237 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
238 #ifdef SIGIOT
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
239 signal(SIGIOT, auto_save);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
240 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
241 #ifdef SIGEMT
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
242 signal(SIGEMT, auto_save);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
243 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
244 #ifdef SIGFPE
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
245 signal(SIGFPE, auto_save);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
246 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
247 #ifdef SIGBUS
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
248 signal(SIGBUS, auto_save);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
249 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
250 #ifdef SIGSEGV
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
251 signal(SIGSEGV, auto_save);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
252 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
253 #ifdef SIGSYS
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
254 signal(SIGSYS, auto_save);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
255 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
256 #ifdef SIGTERM
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
257 signal(SIGTERM, auto_save);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
258 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
259 #ifdef SIGINT
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
260 signal(SIGINT, quit);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
261 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
262 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
263
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
264 int
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
265 md_hasclreol(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
266 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
267 #if defined(clr_eol)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
268 #ifdef NCURSES_VERSION
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
269 if (cur_term == NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
270 return(0);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
271 if (cur_term->type.Strings == NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
272 return(0);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
273 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
274 return((clr_eol != NULL) && (*clr_eol != 0));
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
275 #elif defined(__PDCURSES__)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
276 return(TRUE);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
277 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
278 return((CE != NULL) && (*CE != 0));
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
279 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
280 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
281
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
282 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
283 md_putchar(int c)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
284 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
285 putchar(c);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
286 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
287
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
288 #ifdef _WIN32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
289 static int md_standout_mode = 0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
290 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
291
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
292 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
293 md_raw_standout(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
294 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
295 #ifdef _WIN32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
296 CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
297 HANDLE hStdout;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
298 WORD fgattr,bgattr;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
299
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
300 if (md_standout_mode == 0)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
301 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
302 hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
303 GetConsoleScreenBufferInfo(hStdout, &csbiInfo);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
304 fgattr = (csbiInfo.wAttributes & 0xF);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
305 bgattr = (csbiInfo.wAttributes & 0xF0);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
306 SetConsoleTextAttribute(hStdout,(fgattr << 4) | (bgattr >> 4));
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
307 md_standout_mode = 1;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
308 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
309 #elif defined(SO)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
310 tputs(SO,0,md_putchar);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
311 fflush(stdout);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
312 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
313 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
314
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
315 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
316 md_raw_standend(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
317 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
318 #ifdef _WIN32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
319 CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
320 HANDLE hStdout;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
321 WORD fgattr,bgattr;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
322
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
323 if (md_standout_mode == 1)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
324 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
325 hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
326 GetConsoleScreenBufferInfo(hStdout, &csbiInfo);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
327 fgattr = (csbiInfo.wAttributes & 0xF);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
328 bgattr = (csbiInfo.wAttributes & 0xF0);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
329 SetConsoleTextAttribute(hStdout,(fgattr << 4) | (bgattr >> 4));
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
330 md_standout_mode = 0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
331 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
332 #elif defined(SE)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
333 tputs(SE,0,md_putchar);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
334 fflush(stdout);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
335 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
336 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
337
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
338 int
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
339 md_unlink_open_file(const char *file, FILE *inf)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
340 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
341 #ifdef _WIN32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
342 fclose(inf);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
343 (void) _chmod(file, 0600);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
344 return( _unlink(file) );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
345 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
346 return(unlink(file));
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
347 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
348 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
349
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
350 int
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
351 md_unlink(char *file)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
352 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
353 #ifdef _WIN32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
354 (void) _chmod(file, 0600);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
355 return( _unlink(file) );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
356 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
357 return(unlink(file));
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
358 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
359 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
360
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
361 int
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
362 md_chmod(const char *filename, int mode)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
363 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
364 #ifdef _WIN32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
365 return( _chmod(filename, mode) );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
366 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
367 return( chmod(filename, mode) );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
368 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
369 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
370
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
371 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
372 md_normaluser(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
373 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
374 #if defined(HAVE_GETGID) && defined(HAVE_GETUID)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
375 gid_t realgid = getgid();
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
376 uid_t realuid = getuid();
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
377
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
378 #if defined(HAVE_SETRESGID)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
379 if (setresgid(-1, realgid, realgid) != 0) {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
380 #elif defined (HAVE_SETREGID)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
381 if (setregid(realgid, realgid) != 0) {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
382 #elif defined (HAVE_SETGID)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
383 if (setgid(realgid) != 0) {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
384 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
385 if (0) {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
386 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
387 perror("Could not drop setgid privileges. Aborting.");
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
388 exit(1);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
389 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
390
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
391 #if defined(HAVE_SETRESUID)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
392 if (setresuid(-1, realuid, realuid) != 0) {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
393 #elif defined(HAVE_SETREUID)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
394 if (setreuid(realuid, realuid) != 0) {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
395 #elif defined(HAVE_SETUID)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
396 if (setuid(realuid) != 0) {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
397 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
398 if (0) {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
399 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
400 perror("Could not drop setuid privileges. Aborting.");
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
401 exit(1);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
402 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
403 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
404 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
405
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
406 uid_t
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
407 md_getuid(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
408 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
409 #ifdef HAVE_GETUID
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
410 return( getuid() );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
411 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
412 return(42);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
413 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
414 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
415
120
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
416 gid_t
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
417 md_getgid(void)
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
418 {
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
419 #ifdef HAVE_GETGID
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
420 return( getgid() );
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
421 #else
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
422 return(42);
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
423 #endif
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
424 }
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
425
118
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
426 pid_t
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
427 md_getpid(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
428 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
429 #ifdef _WIN32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
430 return( _getpid() );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
431 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
432 return( getpid() );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
433 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
434 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
435
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
436 char *
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
437 md_getusername(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
438 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
439 static char login[80];
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
440 char *l = NULL;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
441
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
442 /* POSIX Shell has priority, then O/S specific methods */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
443 if ( (l = getenv("LOGNAME")) != NULL )
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
444 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
445 strncpy(login,l,80);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
446 login[79] = 0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
447 return(login);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
448 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
449
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
450 #ifdef _WIN32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
451 LPSTR mybuffer;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
452 DWORD size = UNLEN + 1;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
453 TCHAR buffer[UNLEN + 1];
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
454
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
455 mybuffer = buffer;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
456 GetUserName(mybuffer,&size);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
457 l = mybuffer;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
458 #elif defined(HAVE_GETPWUID)&& !defined(__DJGPP__)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
459 struct passwd *pw;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
460
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
461 pw = getpwuid(getuid());
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
462
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
463 if (pw != NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
464 l = pw->pw_name;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
465 else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
466 l = NULL;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
467 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
468
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
469 if ((l == NULL) || (*l == '\0'))
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
470 if ( (l = getenv("USERNAME")) == NULL )
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
471 if ( (l = getenv("LOGNAME")) == NULL )
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
472 if ( (l = getenv("USER")) == NULL )
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
473 l = "nobody";
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
474
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
475 strncpy(login,l,80);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
476 login[79] = 0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
477
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
478 return(login);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
479 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
480
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
481 char *
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
482 md_gethomedir(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
483 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
484 static char homedir[PATH_MAX];
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
485 char *h = NULL;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
486 size_t len;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
487 #if defined(_WIN32)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
488 TCHAR szPath[PATH_MAX];
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
489 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
490 #if defined(_WIN32) || defined(DJGPP)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
491 char slash = '\\';
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
492 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
493 char slash = '/';
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
494 struct passwd *pw;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
495 pw = getpwuid(getuid());
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
496
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
497 if (pw != NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
498 h = pw->pw_dir;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
499 else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
500 h = "";
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
501
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
502 if (strcmp(h,"/") == 0)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
503 h = "";
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
504 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
505 homedir[0] = 0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
506 #ifdef _WIN32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
507 if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, szPath)))
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
508 h = szPath;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
509 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
510
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
511 if ( (h == NULL) || (*h == '\0') )
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
512 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
513 if ( (h = getenv("HOME")) == NULL )
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
514 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
515 if ( (h = getenv("HOMEDRIVE")) == NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
516 h = "";
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
517 else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
518 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
519 strncpy(homedir,h,PATH_MAX-1);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
520 homedir[PATH_MAX-1] = 0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
521
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
522 if ( (h = getenv("HOMEPATH")) == NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
523 h = "";
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
524 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
525 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
526 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
527
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
528
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
529 len = strlen(homedir);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
530 strncat(homedir,h,PATH_MAX-len-1);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
531 len = strlen(homedir);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
532
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
533 if ((len > 0) && (homedir[len-1] != slash)) {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
534 homedir[len] = slash;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
535 homedir[len+1] = 0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
536 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
537
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
538 return(homedir);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
539 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
540
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
541 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
542 md_sleep(int s)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
543 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
544 #ifdef _WIN32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
545 Sleep(s);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
546 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
547 sleep(s);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
548 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
549 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
550
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
551 char *
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
552 md_getshell(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
553 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
554 static char shell[PATH_MAX];
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
555 char *s = NULL;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
556 #ifdef _WIN32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
557 char *def = "C:\\WINDOWS\\SYSTEM32\\CMD.EXE";
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
558 #elif defined(__DJGPP__)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
559 char *def = "C:\\COMMAND.COM";
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
560 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
561 char *def = "/bin/sh";
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
562 struct passwd *pw;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
563 pw = getpwuid(getuid());
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
564 if (pw != NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
565 s = pw->pw_shell;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
566 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
567 if ((s == NULL) || (*s == '\0'))
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
568 if ( (s = getenv("COMSPEC")) == NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
569 if ( (s = getenv("SHELL")) == NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
570 if ( (s = getenv("SystemRoot")) == NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
571 s = def;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
572
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
573 strncpy(shell,s,PATH_MAX);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
574 shell[PATH_MAX-1] = 0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
575
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
576 return(shell);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
577 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
578
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
579 int
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
580 md_shellescape(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
581 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
582 #if defined(HAVE_WORKING_FORK)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
583 int ret_status;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
584 int pid;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
585 void (*myquit)(int);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
586 void (*myend)(int);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
587 char *sh;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
588
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
589 sh = md_getshell();
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
590
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
591 while((pid = fork()) < 0)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
592 sleep(1);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
593
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
594 if (pid == 0) /* Shell Process */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
595 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
596 /*
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
597 * Set back to original user, just in case
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
598 */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
599 md_normaluser();
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
600 execl(sh == NULL ? "/bin/sh" : sh, "shell", "-i", NULL);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
601 perror("No shelly");
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
602 _exit(-1);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
603 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
604 else /* Application */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
605 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
606 myend = signal(SIGINT, SIG_IGN);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
607 #ifdef SIGQUIT
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
608 myquit = signal(SIGQUIT, SIG_IGN);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
609 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
610 while (wait(&ret_status) != pid)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
611 continue;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
612
162
600873555ec0 Don't swap signal handlers in md_shellescape().
John "Elwin" Edwards
parents: 121
diff changeset
613 signal(SIGINT, myend);
118
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
614 #ifdef SIGQUIT
162
600873555ec0 Don't swap signal handlers in md_shellescape().
John "Elwin" Edwards
parents: 121
diff changeset
615 signal(SIGQUIT, myquit);
118
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
616 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
617 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
618 return(ret_status);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
619 #elif defined(HAVE__SPAWNL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
620 return((int)_spawnl(_P_WAIT,md_getshell(),"shell",NULL,0));
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
621 #elif defined(HAVE_SPAWNL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
622 return ( spawnl(P_WAIT,md_getshell(),"shell",NULL,0) );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
623 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
624 return(0);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
625 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
626 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
627
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
628 char *
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
629 md_getrealname(uid_t uid)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
630 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
631 static char uidstr[20];
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
632 #if !defined(_WIN32) && !defined(DJGPP)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
633 struct passwd *pp;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
634
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
635 if ((pp = getpwuid(uid)) == NULL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
636 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
637 sprintf(uidstr,"%d", uid);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
638 return(uidstr);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
639 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
640 else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
641 return(pp->pw_name);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
642 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
643 sprintf(uidstr,"%ld", uid);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
644 return(uidstr);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
645 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
646 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
647
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
648 char *
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
649 md_crypt(const char *key, const char *salt)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
650 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
651 return( xcrypt(key,salt) );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
652 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
653
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
654 char *
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
655 md_getpass(char *prompt)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
656 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
657 #ifndef HAVE_GETPASS
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
658 static char password_buffer[9];
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
659 char *p = password_buffer;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
660 int c, count = 0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
661 int max_length = 9;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
662
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
663 fflush(stdout);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
664 /* If we can't prompt, abort */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
665 if (fputs(prompt, stderr) < 0)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
666 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
667 *p = '\0';
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
668 return NULL;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
669 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
670
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
671 for(;;)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
672 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
673 /* Get a character with no echo */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
674 c = _getch();
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
675
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
676 /* Exit on interrupt (^c or ^break) */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
677 if (c == '\003' || c == 0x100)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
678 exit(1);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
679
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
680 /* Terminate on end of line or file (^j, ^m, ^d, ^z) */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
681 if (c == '\r' || c == '\n' || c == '\004' || c == '\032')
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
682 break;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
683
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
684 /* Back up on backspace */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
685 if (c == '\b')
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
686 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
687 if (count)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
688 count--;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
689 else if (p > password_buffer)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
690 p--;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
691 continue;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
692 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
693
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
694 /* Ignore DOS extended characters */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
695 if ((c & 0xff) != c)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
696 continue;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
697
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
698 /* Add to password if it isn't full */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
699 if (p < password_buffer + max_length - 1)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
700 *p++ = (char) c;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
701 else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
702 count++;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
703 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
704 *p = '\0';
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
705
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
706 fputc('\n', stderr);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
707
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
708 return password_buffer;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
709 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
710 return( getpass(prompt) );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
711 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
712 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
713
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
714 int
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
715 md_erasechar(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
716 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
717 #ifdef HAVE_ERASECHAR
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
718 return( erasechar() ); /* process erase character */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
719 #elif defined(VERASE)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
720 return(_tty.c_cc[VERASE]); /* process erase character */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
721 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
722 return(_tty.sg_erase); /* process erase character */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
723 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
724 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
725
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
726 int
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
727 md_killchar(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
728 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
729 #ifdef HAVE_KILLCHAR
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
730 return( killchar() );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
731 #elif defined(VKILL)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
732 return(_tty.c_cc[VKILL]);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
733 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
734 return(_tty.sg_kill);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
735 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
736 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
737
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
738 int
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
739 md_dsuspchar(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
740 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
741 #if defined(VDSUSP) /* POSIX has priority */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
742 struct termios attr;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
743 tcgetattr(STDIN_FILENO, &attr);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
744 return( attr.c_cc[VDSUSP] );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
745 #elif defined(TIOCGLTC)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
746 struct ltchars ltc;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
747 ioctl(1, TIOCGLTC, &ltc);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
748 return(ltc.t_dsuspc);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
749 #elif defined(_POSIX_VDISABLE)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
750 return(_POSIX_VDISABLE);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
751 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
752 return(0);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
753 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
754 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
755
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
756 int
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
757 md_setdsuspchar(int c)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
758 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
759 #if defined(VDSUSP) /* POSIX has priority */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
760 struct termios attr;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
761 tcgetattr(STDIN_FILENO, &attr);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
762 attr.c_cc[VDSUSP] = c;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
763 tcgetattr(STDIN_FILENO, &attr);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
764 #elif defined(TIOCSLTC)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
765 struct ltchars ltc;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
766 ioctl(1, TIOCGLTC, &ltc);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
767 ltc.t_dsuspc = c;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
768 ioctl(1, TIOCSLTC, &ltc);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
769 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
770 NOOP(c);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
771 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
772 return(0);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
773 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
774
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
775 int
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
776 md_suspchar(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
777 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
778 #if defined(VSUSP) /* POSIX has priority */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
779 struct termios attr;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
780 tcgetattr(STDIN_FILENO, &attr);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
781 return( attr.c_cc[VSUSP] );
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
782 #elif defined(TIOCGLTC)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
783 struct ltchars ltc;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
784 ioctl(1, TIOCGLTC, &ltc);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
785 return(ltc.t_suspc);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
786 #elif defined(_POSIX_VDISABLE)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
787 return(_POSIX_VDISABLE);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
788 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
789 return(0);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
790 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
791 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
792
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
793 int
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
794 md_setsuspchar(int c)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
795 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
796 #if defined(VSUSP) /* POSIX has priority */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
797 struct termios attr;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
798 tcgetattr(STDIN_FILENO, &attr);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
799 attr.c_cc[VSUSP] = c;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
800 tcgetattr(STDIN_FILENO, &attr);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
801 #elif defined(TIOCSLTC)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
802 struct ltchars ltc;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
803 ioctl(1, TIOCGLTC, &ltc);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
804 ltc.t_suspc = c;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
805 ioctl(1, TIOCSLTC, &ltc);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
806 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
807 NOOP(c);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
808 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
809
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
810 return(0);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
811 }
86
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
812
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
813 /*
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
814 Cursor/Keypad Support
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
815
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
816 Sadly Cursor/Keypad support is less straightforward than it should be.
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
817
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
818 The various terminal emulators/consoles choose to differentiate the
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
819 cursor and keypad keys (with modifiers) in different ways (if at all!).
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
820 Furthermore they use different code set sequences for each key only
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
821 a subset of which the various curses libraries recognize. Partly due
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
822 to incomplete termcap/terminfo entries and partly due to inherent
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
823 limitations of those terminal capability databases.
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
824
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
825 I give curses first crack at decoding the sequences. If it fails to decode
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
826 it we check for common ESC-prefixed sequences.
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
827
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
828 All cursor/keypad results are translated into standard rogue movement
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
829 commands.
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
830
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
831 Unmodified keys are translated to walk commands: hjklyubn
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
832 Modified (shift,control,alt) are translated to run commands: HJKLYUBN
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
833
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
834 Console and supported (differentiated) keys
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
835 Interix: Cursor Keys, Keypad, Ctl-Keypad
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
836 Cygwin: Cursor Keys, Keypad, Alt-Cursor Keys
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
837 MSYS: Cursor Keys, Keypad, Ctl-Cursor Keys, Ctl-Keypad
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
838 Win32: Cursor Keys, Keypad, Ctl/Shift/Alt-Cursor Keys, Ctl/Alt-Keypad
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
839 DJGPP: Cursor Keys, Keypad, Ctl/Shift/Alt-Cursor Keys, Ctl/Alt-Keypad
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
840
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
841 Interix Console (raw, ncurses)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
842 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
843 normal shift ctrl alt
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
844 ESC [D, ESC F^, ESC [D, ESC [D /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
845 ESC [C, ESC F$, ESC [C, ESC [C /# Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
846 ESC [A, ESC F-, local win, ESC [A /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
847 ESC [B, ESC F+, local win, ESC [B /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
848 ESC [H, ESC [H, ESC [H, ESC [H /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
849 ESC [S, local win, ESC [S, ESC [S /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
850 ESC [T, local win, ESC [T, ESC [T /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
851 ESC [U, ESC [U, ESC [U, ESC [U /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
852 ESC [D, ESC F^, ESC [D, O /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
853 ESC [C, ESC F$, ESC [C, O /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
854 ESC [A, ESC [A, ESC [-1, O /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
855 ESC [B, ESC [B, ESC [-2, O /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
856 ESC [H, ESC [H, ESC [-263, O /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
857 ESC [S, ESC [S, ESC [-19, O /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
858 ESC [T, ESC [T, ESC [-20, O /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
859 ESC [U, ESC [U, ESC [-21, O /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
860 nothing, nothing, nothing, O /# Kaypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
861
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
862 Interix Console (term=interix, ncurses)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
863 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
864 KEY_LEFT, ESC F^, KEY_LEFT, KEY_LEFT /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
865 KEY_RIGHT, ESC F$, KEY_RIGHT, KEY_RIGHT /# Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
866 KEY_UP, 0x146, local win, KEY_UP /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
867 KEY_DOWN, 0x145, local win, KEY_DOWN /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
868 ESC [H, ESC [H, ESC [H, ESC [H /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
869 KEY_PPAGE, local win, KEY_PPAGE, KEY_PPAGE /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
870 KEY_NPAGE, local win, KEY_NPAGE, KEY_NPAGE /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
871 KEY_LL, KEY_LL, KEY_LL, KEY_LL /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
872 KEY_LEFT, ESC F^, ESC [-4, O /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
873 KEY_RIGHT, ESC F$, ESC [-3, O /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
874 KEY_UP, KEY_UP, ESC [-1, O /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
875 KEY_DOWN, KEY_DOWN, ESC [-2, O /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
876 ESC [H, ESC [H, ESC [-263, O /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
877 KEY_PPAGE, KEY_PPAGE, ESC [-19, O /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
878 KEY_NPAGE, KEY_NPAGE, ESC [-20, O /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
879 KEY_LL, KEY_LL, ESC [-21, O /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
880 nothing, nothing, nothing, O /# Keypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
881
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
882 Cygwin Console (raw, ncurses)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
883 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
884 normal shift ctrl alt
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
885 ESC [D, ESC [D, ESC [D, ESC ESC [D /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
886 ESC [C, ESC [C, ESC [C, ESC ESC [C /# Rght #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
887 ESC [A, ESC [A, ESC [A, ESC ESC [A /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
888 ESC [B, ESC [B, ESC [B, ESC ESC [B /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
889 ESC [1~, ESC [1~, ESC [1~, ESC ESC [1~ /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
890 ESC [5~, ESC [5~, ESC [5~, ESC ESC [5~ /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
891 ESC [6~, ESC [6~, ESC [6~, ESC ESC [6~ /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
892 ESC [4~, ESC [4~, ESC [4~, ESC ESC [4~ /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
893 ESC [D, ESC [D, ESC [D, ESC ESC [D,O /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
894 ESC [C, ESC [C, ESC [C, ESC ESC [C,O /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
895 ESC [A, ESC [A, ESC [A, ESC ESC [A,O /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
896 ESC [B, ESC [B, ESC [B, ESC ESC [B,O /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
897 ESC [1~, ESC [1~, ESC [1~, ESC ESC [1~,O /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
898 ESC [5~, ESC [5~, ESC [5~, ESC ESC [5~,O /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
899 ESC [6~, ESC [6~, ESC [6~, ESC ESC [6~,O /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
900 ESC [4~, ESC [4~, ESC [4~, ESC ESC [4~,O /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
901 ESC [-71, nothing, nothing, O /# Keypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
902
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
903 Cygwin Console (term=cygwin, ncurses)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
904 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
905 KEY_LEFT, KEY_LEFT, KEY_LEFT, ESC-260 /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
906 KEY_RIGHT, KEY_RIGHT, KEY_RIGHT, ESC-261 /# Rght #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
907 KEY_UP, KEY_UP, KEY_UP, ESC-259 /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
908 KEY_DOWN, KEY_DOWN, KEY_DOWN, ESC-258 /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
909 KEY_HOME, KEY_HOME, KEY_HOME, ESC-262 /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
910 KEY_PPAGE, KEY_PPAGE, KEY_PPAGE, ESC-339 /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
911 KEY_NPAGE, KEY_NPAGE, KEY_NPAGE, ESC-338 /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
912 KEY_END, KEY_END, KEY_END, ESC-360 /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
913 KEY_LEFT, KEY_LEFT, KEY_LEFT, ESC-260,O /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
914 KEY_RIGHT, KEY_RIGHT, KEY_RIGHT, ESC-261,O /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
915 KEY_UP, KEY_UP, KEY_UP, ESC-259,O /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
916 KEY_DOWN, KEY_DOWN, KEY_DOWN, ESC-258,O /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
917 KEY_HOME, KEY_HOME, KEY_HOME, ESC-262,O /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
918 KEY_PPAGE, KEY_PPAGE, KEY_PPAGE, ESC-339,O /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
919 KEY_NPAGE, KEY_NPAGE, KEY_NPAGE, ESC-338,O /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
920 KEY_END, KEY_END, KEY_END, ESC-360,O /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
921 ESC [G, nothing, nothing, O /# Keypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
922
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
923 MSYS Console (raw, ncurses)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
924 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
925 normal shift ctrl alt
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
926 ESC OD, ESC [d, ESC Od nothing /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
927 ESC OE, ESC [e, ESC Oe, nothing /# Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
928 ESC OA, ESC [a, ESC Oa, nothing /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
929 ESC OB, ESC [b, ESC Ob, nothing /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
930 ESC [7~, ESC [7$, ESC [7^, nothing /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
931 ESC [5~, local window, ESC [5^, nothing /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
932 ESC [6~, local window, ESC [6^, nothing /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
933 ESC [8~, ESC [8$, ESC [8^, nothing /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
934 ESC OD, ESC [d, ESC Od O /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
935 ESC OE, ESC [c, ESC Oc, O /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
936 ESC OA, ESC [a, ESC Oa, O /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
937 ESC OB, ESC [b, ESC Ob, O /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
938 ESC [7~, ESC [7$, ESC [7^, O /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
939 ESC [5~, local window, ESC [5^, O /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
940 ESC [6~, local window, ESC [6^, O /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
941 ESC [8~, ESC [8$, ESC [8^, O /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
942 11, 11, 11, O /# Keypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
943
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
944 MSYS Console (term=rxvt, ncurses)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
945 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
946 normal shift ctrl alt
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
947 KEY_LEFT, KEY_SLEFT, 514 nothing /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
948 KEY_RIGHT, KEY_SRIGHT, 516, nothing /# Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
949 KEY_UP, 518, 519, nothing /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
950 KEY_DOWN, 511, 512, nothing /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
951 KEY_HOME, KEY_SHOME, ESC [7^, nothing /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
952 KEY_PPAGE, local window, ESC [5^, nothing /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
953 KEY_NPAGE, local window, ESC [6^, nothing /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
954 KEY_END, KEY_SEND, KEY_EOL, nothing /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
955 KEY_LEFT, KEY_SLEFT, 514 O /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
956 KEY_RIGHT, KEY_SRIGHT, 516, O /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
957 KEY_UP, 518, 519, O /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
958 KEY_DOWN, 511, 512, O /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
959 KEY_HOME, KEY_SHOME, ESC [7^, O /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
960 KEY_PPAGE, local window, ESC [5^, O /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
961 KEY_NPAGE, local window, ESC [6^, O /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
962 KEY_END, KEY_SEND, KEY_EOL, O /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
963 11, 11, 11, O /# Keypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
964
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
965 Win32 Console (raw, pdcurses)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
966 DJGPP Console (raw, pdcurses)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
967 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
968 normal shift ctrl alt
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
969 260, 391, 443, 493 /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
970 261, 400, 444, 492 /# Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
971 259, 547, 480, 490 /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
972 258, 548, 481, 491 /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
973 262, 388, 447, 524 /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
974 339, 396, 445, 526 /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
975 338, 394, 446, 520 /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
976 358, 384, 448, 518 /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
977 452, 52('4'), 511, 521 /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
978 454, 54('6'), 513, 523 /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
979 450, 56('8'), 515, 525 /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
980 456, 50('2'), 509, 519 /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
981 449, 55('7'), 514, 524 /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
982 451, 57('9'), 516, 526 /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
983 457, 51('3'), 510, 520 /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
984 455, 49('1'), 508, 518 /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
985 453, 53('5'), 512, 522 /# Keypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
986
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
987 Win32 Console (pdcurses, MSVC/MingW32)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
988 DJGPP Console (pdcurses)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
989 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
990 normal shift ctrl alt
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
991 KEY_LEFT, KEY_SLEFT, CTL_LEFT, ALT_LEFT /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
992 KEY_RIGHT, KEY_SRIGHT, CTL_RIGHT, ALT_RIGHT /# Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
993 KEY_UP, KEY_SUP, CTL_UP, ALT_UP /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
994 KEY_DOWN, KEY_SDOWN, CTL_DOWN, ALT_DOWN /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
995 KEY_HOME, KEY_SHOME, CTL_HOME, ALT_HOME /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
996 KEY_PPAGE, KEY_SPREVIOUS, CTL_PGUP, ALT_PGUP /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
997 KEY_NPAGE, KEY_SNEXTE, CTL_PGDN, ALT_PGDN /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
998 KEY_END, KEY_SEND, CTL_END, ALT_END /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
999 KEY_B1, 52('4'), CTL_PAD4, ALT_PAD4 /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1000 KEY_B3, 54('6'), CTL_PAD6, ALT_PAD6 /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1001 KEY_A2, 56('8'), CTL_PAD8, ALT_PAD8 /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1002 KEY_C2, 50('2'), CTL_PAD2, ALT_PAD2 /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1003 KEY_A1, 55('7'), CTL_PAD7, ALT_PAD7 /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1004 KEY_A3, 57('9'), CTL_PAD9, ALT_PAD9 /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1005 KEY_C3, 51('3'), CTL_PAD3, ALT_PAD3 /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1006 KEY_C1, 49('1'), CTL_PAD1, ALT_PAD1 /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1007 KEY_B2, 53('5'), CTL_PAD5, ALT_PAD5 /# Keypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1008
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1009 Windows Telnet (raw)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1010 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1011 normal shift ctrl alt
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1012 ESC [D, ESC [D, ESC [D, ESC [D /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1013 ESC [C, ESC [C, ESC [C, ESC [C /# Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1014 ESC [A, ESC [A, ESC [A, ESC [A /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1015 ESC [B, ESC [B, ESC [B, ESC [B /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1016 ESC [1~, ESC [1~, ESC [1~, ESC [1~ /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1017 ESC [5~, ESC [5~, ESC [5~, ESC [5~ /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1018 ESC [6~, ESC [6~, ESC [6~, ESC [6~ /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1019 ESC [4~, ESC [4~, ESC [4~, ESC [4~ /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1020 ESC [D, ESC [D, ESC [D, ESC [D /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1021 ESC [C, ESC [C, ESC [C, ESC [C /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1022 ESC [A, ESC [A, ESC [A, ESC [A /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1023 ESC [B, ESC [B, ESC [B, ESC [B /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1024 ESC [1~, ESC [1~, ESC [1~, ESC [1~ /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1025 ESC [5~, ESC [5~, ESC [5~, ESC [5~ /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1026 ESC [6~, ESC [6~, ESC [6~, ESC [6~ /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1027 ESC [4~, ESC [4~, ESC [4~, ESC [4~ /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1028 nothing, nothing, nothing, nothing /# Keypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1029
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1030 Windows Telnet (term=xterm)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1031 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1032 normal shift ctrl alt
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1033 KEY_LEFT, KEY_LEFT, KEY_LEFT, KEY_LEFT /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1034 KEY_RIGHT, KEY_RIGHT, KEY_RIGHT, KEY_RIGHT /# Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1035 KEY_UP, KEY_UP, KEY_UP, KEY_UP /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1036 KEY_DOWN, KEY_DOWN, KEY_DOWN, KEY_DOWN /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1037 ESC [1~, ESC [1~, ESC [1~, ESC [1~ /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1038 KEY_PPAGE, KEY_PPAGE, KEY_PPAGE, KEY_PPAGE /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1039 KEY_NPAGE, KEY_NPAGE, KEY_NPAGE, KEY_NPAGE /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1040 ESC [4~, ESC [4~, ESC [4~, ESC [4~ /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1041 KEY_LEFT, KEY_LEFT, KEY_LEFT, O /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1042 KEY_RIGHT, KEY_RIGHT, KEY_RIGHT, O /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1043 KEY_UP, KEY_UP, KEY_UP, O /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1044 KEY_DOWN, KEY_DOWN, KEY_DOWN, O /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1045 ESC [1~, ESC [1~, ESC [1~, ESC [1~ /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1046 KEY_PPAGE, KEY_PPAGE, KEY_PPAGE, KEY_PPAGE /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1047 KEY_NPAGE, KEY_NPAGE, KEY_NPAGE, KEY_NPAGE /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1048 ESC [4~, ESC [4~, ESC [4~, O /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1049 ESC [-71, nothing, nothing, O /# Keypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1050
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1051 PuTTY
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1052 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1053 normal shift ctrl alt
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1054 ESC [D, ESC [D, ESC OD, ESC [D /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1055 ESC [C, ESC [C, ESC OC, ESC [C /# Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1056 ESC [A, ESC [A, ESC OA, ESC [A /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1057 ESC [B, ESC [B, ESC OB, ESC [B /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1058 ESC [1~, ESC [1~, local win, ESC [1~ /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1059 ESC [5~, local win, local win, ESC [5~ /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1060 ESC [6~, local win, local win, ESC [6~ /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1061 ESC [4~, ESC [4~, local win, ESC [4~ /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1062 ESC [D, ESC [D, ESC [D, O /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1063 ESC [C, ESC [C, ESC [C, O /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1064 ESC [A, ESC [A, ESC [A, O /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1065 ESC [B, ESC [B, ESC [B, O /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1066 ESC [1~, ESC [1~, ESC [1~, O /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1067 ESC [5~, ESC [5~, ESC [5~, O /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1068 ESC [6~, ESC [6~, ESC [6~, O /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1069 ESC [4~, ESC [4~, ESC [4~, O /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1070 nothing, nothing, nothing, O /# Keypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1071
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1072 PuTTY
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1073 ==============================
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1074 normal shift ctrl alt
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1075 KEY_LEFT, KEY_LEFT, ESC OD, ESC KEY_LEFT /# Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1076 KEY_RIGHT KEY_RIGHT, ESC OC, ESC KEY_RIGHT /# Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1077 KEY_UP, KEY_UP, ESC OA, ESC KEY_UP /# Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1078 KEY_DOWN, KEY_DOWN, ESC OB, ESC KEY_DOWN /# Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1079 ESC [1~, ESC [1~, local win, ESC ESC [1~ /# Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1080 KEY_PPAGE local win, local win, ESC KEY_PPAGE /# Page Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1081 KEY_NPAGE local win, local win, ESC KEY_NPAGE /# Page Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1082 ESC [4~, ESC [4~, local win, ESC ESC [4~ /# End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1083 ESC Ot, ESC Ot, ESC Ot, O /# Keypad Left #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1084 ESC Ov, ESC Ov, ESC Ov, O /# Keypad Right #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1085 ESC Ox, ESC Ox, ESC Ox, O /# Keypad Up #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1086 ESC Or, ESC Or, ESC Or, O /# Keypad Down #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1087 ESC Ow, ESC Ow, ESC Ow, O /# Keypad Home #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1088 ESC Oy, ESC Oy, ESC Oy, O /# Keypad PgUp #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1089 ESC Os, ESC Os, ESC Os, O /# Keypad PgDn #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1090 ESC Oq, ESC Oq, ESC Oq, O /# Keypad End #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1091 ESC Ou, ESC Ou, ESC Ou, O /# Keypad 5 #/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1092 */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1093
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1094 #define M_NORMAL 0
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1095 #define M_ESC 1
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1096 #define M_KEYPAD 2
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1097 #define M_TRAIL 3
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1098
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1099 int undo[5];
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1100 int uindex = -1;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1101
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1102 int
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1103 reread()
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1104 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1105 int redo;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1106
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1107 if (uindex < 0)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1108 return 0;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1109
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1110 redo = undo[0];
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1111 undo[0] = undo[1];
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1112 undo[1] = undo[2];
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1113 undo[2] = undo[3];
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1114 undo[3] = undo[4];
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1115 uindex--;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1116 return redo;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1117 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1118
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1119 void
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1120 unread(int c)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1121 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1122 if (uindex >= 4)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1123 abort();
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1124
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1125 undo[++uindex] = c;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1126 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1127
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1128 int
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1129 md_readchar(WINDOW *win)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1130 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1131 int ch = 0;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1132 int lastch = 0;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1133 int mode = M_NORMAL;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1134 int mode2 = M_NORMAL;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1135 int nodelayf = 0;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1136 int count = 0;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1137
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1138 for(;;)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1139 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1140 if (mode == M_NORMAL && uindex >= 0)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1141 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1142 ch = reread();
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1143 break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1144 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1145
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1146 ch = wgetch(win);
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1147
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1148 if (ch == ERR) /* timed out or error */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1149 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1150 if (nodelayf) /* likely timed out, switch to */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1151 { /* normal mode and block on */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1152 mode = M_NORMAL; /* next read */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1153 nodelayf = 0;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1154 nodelay(win,0);
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1155 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1156 else if (count > 10) /* after 10 errors assume */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1157 auto_save(0); /* input stream is broken and */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1158 else /* auto save and exit */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1159 count++;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1160
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1161 continue;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1162 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1163
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1164 count = 0; /* reset input error count */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1165
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1166 if (mode == M_TRAIL)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1167 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1168 if (ch == '^') /* msys console : 7,5,6,8: modified*/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1169 ch = CTRL( toupper(lastch) );
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1170 else if (ch == '~') /* cygwin console: 1,5,6,4: normal */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1171 ch = tolower(lastch); /* windows telnet: 1,5,6,4: normal */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1172 /* msys console : 7,5,6,8: normal */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1173 else if (mode2 == M_ESC) /* cygwin console: 1,5,6,4: modified*/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1174 ch = CTRL( toupper(ch) );
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1175 else
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1176 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1177 mode = M_NORMAL;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1178 unread(ch);
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1179 continue;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1180 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1181
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1182 break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1183 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1184
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1185 if (mode == M_ESC)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1186 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1187 if (ch == 27)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1188 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1189 mode2 = M_ESC;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1190 unread(ch);
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1191 continue;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1192 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1193
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1194 if ((ch == 'F') || (ch == 'O') || (ch == '['))
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1195 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1196 mode = M_KEYPAD;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1197 unread(ch);
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1198 continue;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1199 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1200
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1201
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1202 switch(ch)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1203 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1204 /* Cygwin Console */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1205 /* PuTTY */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1206 case KEY_LEFT : ch = CTRL('H'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1207 case KEY_RIGHT: ch = CTRL('L'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1208 case KEY_UP : ch = CTRL('K'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1209 case KEY_DOWN : ch = CTRL('J'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1210 case KEY_HOME : ch = CTRL('Y'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1211 case KEY_PPAGE: ch = CTRL('U'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1212 case KEY_NPAGE: ch = CTRL('N'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1213 case KEY_END : ch = CTRL('B'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1214
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1215 default: mode = M_NORMAL;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1216 mode2 = M_NORMAL;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1217 unread(ch);
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1218 continue;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1219 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1220
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1221 break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1222 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1223
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1224 if (mode == M_KEYPAD)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1225 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1226 switch(ch)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1227 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1228 /* ESC F - Interix Console codes */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1229 case '^': ch = CTRL('H'); break; /* Shift-Left */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1230 case '$': ch = CTRL('L'); break; /* Shift-Right */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1231
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1232 /* ESC [ - Interix Console codes */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1233 case 'H': ch = 'y'; break; /* Home */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1234 case 1: ch = CTRL('K'); break; /* Ctl-Keypad Up */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1235 case 2: ch = CTRL('J'); break; /* Ctl-Keypad Down */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1236 case 3: ch = CTRL('L'); break; /* Ctl-Keypad Right */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1237 case 4: ch = CTRL('H'); break; /* Ctl-Keypad Left */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1238 case 263: ch = CTRL('Y'); break; /* Ctl-Keypad Home */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1239 case 19: ch = CTRL('U'); break; /* Ctl-Keypad PgUp */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1240 case 20: ch = CTRL('N'); break; /* Ctl-Keypad PgDn */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1241 case 21: ch = CTRL('B'); break; /* Ctl-Keypad End */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1242
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1243 /* ESC [ - Cygwin Console codes */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1244 case 'G': ch = '.'; break; /* Keypad 5 */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1245 case '7': lastch = 'Y'; mode=M_TRAIL; break; /* Ctl-Home */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1246 case '5': lastch = 'U'; mode=M_TRAIL; break; /* Ctl-PgUp */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1247 case '6': lastch = 'N'; mode=M_TRAIL; break; /* Ctl-PgDn */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1248
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1249 /* ESC [ - Win32 Telnet, PuTTY */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1250 case '1': lastch = 'y'; mode=M_TRAIL; break; /* Home */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1251 case '4': lastch = 'b'; mode=M_TRAIL; break; /* End */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1252
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1253 /* ESC [ - not understood by screen/tmux */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1254 case 'E': ch = '.'; break; /* Keypad 5 */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1255
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1256 /* ESC O - PuTTY */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1257 case 'D': ch = CTRL('H'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1258 case 'C': ch = CTRL('L'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1259 case 'A': ch = CTRL('K'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1260 case 'B': ch = CTRL('J'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1261 case 't': ch = 'h'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1262 case 'v': ch = 'l'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1263 case 'x': ch = 'k'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1264 case 'r': ch = 'j'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1265 case 'w': ch = 'y'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1266 case 'y': ch = 'u'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1267 case 's': ch = 'n'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1268 case 'q': ch = 'b'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1269 case 'u': ch = '.'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1270 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1271
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1272 if (mode != M_KEYPAD)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1273 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1274 unread(ch);
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1275 continue;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1276 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1277 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1278
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1279 if (ch == 27)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1280 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1281 nodelay(win,1);
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1282 mode = M_ESC;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1283 nodelayf = 1;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1284 unread(ch);
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1285 continue;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1286 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1287
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1288 switch(ch)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1289 {
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1290 case KEY_LEFT : ch = 'h'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1291 case KEY_DOWN : ch = 'j'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1292 case KEY_UP : ch = 'k'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1293 case KEY_RIGHT : ch = 'l'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1294 case KEY_HOME : ch = 'y'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1295 case KEY_PPAGE : ch = 'u'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1296 case KEY_END : ch = 'b'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1297 #ifdef KEY_LL
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1298 case KEY_LL : ch = 'b'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1299 #endif
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1300 case KEY_NPAGE : ch = 'n'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1301 case KEY_BEG : ch = '.'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1302
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1303 #ifdef KEY_B1
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1304 case KEY_B1 : ch = 'h'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1305 case KEY_C2 : ch = 'j'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1306 case KEY_A2 : ch = 'k'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1307 case KEY_B3 : ch = 'l'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1308 #endif
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1309 case KEY_A1 : ch = 'y'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1310 case KEY_A3 : ch = 'u'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1311 case KEY_C1 : ch = 'b'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1312 case KEY_C3 : ch = 'n'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1313 case KEY_B2 : ch = '.'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1314
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1315 #ifdef KEY_SLEFT
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1316 case KEY_SRIGHT : ch = CTRL('L'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1317 case KEY_SLEFT : ch = CTRL('H'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1318 #ifdef KEY_SUP
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1319 case KEY_SUP : ch = CTRL('K'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1320 case KEY_SDOWN : ch = CTRL('J'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1321 #endif
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1322 case KEY_SHOME : ch = CTRL('Y'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1323 case KEY_SPREVIOUS:ch = CTRL('U'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1324 case KEY_SEND : ch = CTRL('B'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1325 case KEY_SNEXT : ch = CTRL('N'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1326 #endif
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1327 case 0x146 : ch = CTRL('K'); break; /* Shift-Up */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1328 case 0x145 : ch = CTRL('J'); break; /* Shift-Down */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1329
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1330
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1331 #ifdef CTL_RIGHT
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1332 case CTL_RIGHT : ch = CTRL('L'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1333 case CTL_LEFT : ch = CTRL('H'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1334 case CTL_UP : ch = CTRL('K'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1335 case CTL_DOWN : ch = CTRL('J'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1336 case CTL_HOME : ch = CTRL('Y'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1337 case CTL_PGUP : ch = CTRL('U'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1338 case CTL_END : ch = CTRL('B'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1339 case CTL_PGDN : ch = CTRL('N'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1340 #endif
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1341 #ifdef KEY_EOL
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1342 case KEY_EOL : ch = CTRL('B'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1343 #endif
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1344
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1345 #ifndef CTL_PAD1
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1346 /* MSYS rxvt console */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1347 case 511 : ch = CTRL('J'); break; /* Shift Dn */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1348 case 512 : ch = CTRL('J'); break; /* Ctl Down */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1349 case 514 : ch = CTRL('H'); break; /* Ctl Left */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1350 case 516 : ch = CTRL('L'); break; /* Ctl Right*/
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1351 case 518 : ch = CTRL('K'); break; /* Shift Up */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1352 case 519 : ch = CTRL('K'); break; /* Ctl Up */
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1353 #endif
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1354
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1355 #ifdef CTL_PAD1
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1356 case CTL_PAD1 : ch = CTRL('B'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1357 case CTL_PAD2 : ch = CTRL('J'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1358 case CTL_PAD3 : ch = CTRL('N'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1359 case CTL_PAD4 : ch = CTRL('H'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1360 case CTL_PAD5 : ch = '.'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1361 case CTL_PAD6 : ch = CTRL('L'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1362 case CTL_PAD7 : ch = CTRL('Y'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1363 case CTL_PAD8 : ch = CTRL('K'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1364 case CTL_PAD9 : ch = CTRL('U'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1365 #endif
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1366
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1367 #ifdef ALT_RIGHT
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1368 case ALT_RIGHT : ch = CTRL('L'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1369 case ALT_LEFT : ch = CTRL('H'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1370 case ALT_DOWN : ch = CTRL('J'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1371 case ALT_HOME : ch = CTRL('Y'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1372 case ALT_PGUP : ch = CTRL('U'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1373 case ALT_END : ch = CTRL('B'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1374 case ALT_PGDN : ch = CTRL('N'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1375 #endif
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1376
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1377 #ifdef ALT_PAD1
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1378 case ALT_PAD1 : ch = CTRL('B'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1379 case ALT_PAD2 : ch = CTRL('J'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1380 case ALT_PAD3 : ch = CTRL('N'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1381 case ALT_PAD4 : ch = CTRL('H'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1382 case ALT_PAD5 : ch = '.'; break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1383 case ALT_PAD6 : ch = CTRL('L'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1384 case ALT_PAD7 : ch = CTRL('Y'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1385 case ALT_PAD8 : ch = CTRL('K'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1386 case ALT_PAD9 : ch = CTRL('U'); break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1387 #endif
118
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1388 #ifdef KEY_BACKSPACE
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1389 case KEY_BACKSPACE: ch = md_erasechar(); break;
86
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1390 #endif
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1391 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1392
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1393 break;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1394 }
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1395
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1396 if (nodelayf)
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1397 nodelay(win,0);
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1398
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1399 uindex = -1;
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1400
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1401 return(ch & 0x7F);
8757a0593e6e srogue: add arrow-key support.
John "Elwin" Edwards
parents:
diff changeset
1402 }
118
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1403
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1404 #if defined(LOADAV) && defined(HAVE_NLIST_H) && defined(HAVE_NLIST)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1405 /*
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1406 * loadav:
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1407 * Looking up load average in core (for system where the loadav()
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1408 * system call isn't defined
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1409 */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1410
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1411 #include <nlist.h>
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1412
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1413 struct nlist avenrun = {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1414 "_avenrun"
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1415 };
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1416
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1417 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1418 md_loadav(double *avg)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1419 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1420 int kmem;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1421
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1422 if ((kmem = open("/dev/kmem", 0)) < 0)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1423 goto bad;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1424 nlist(NAMELIST, &avenrun);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1425 if (avenrun.n_type == 0)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1426 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1427 close(kmem);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1428 bad:
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1429 avg[0] = 0.0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1430 avg[1] = 0.0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1431 avg[2] = 0.0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1432 return;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1433 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1434
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1435 lseek(kmem, avenrun.n_value, 0);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1436 read(kmem, (char *) avg, 3 * sizeof (double));
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1437 close(kmem);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1438 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1439 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1440 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1441 md_loadav(double *avg)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1442 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1443 #if defined(HAVE_LOADAV)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1444 loadav(avg);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1445 #elif defined(HAVE_GETLOADAVG)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1446 getloadavg(avg,3);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1447 #else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1448 avg[0] = avg[1] = avg[2] = 0;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1449 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1450 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1451 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1452
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1453 #ifndef NSIG
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1454 #define NSIG 32
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1455 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1456
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1457 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1458 md_ignoreallsignals(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1459 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1460 int i;
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1461
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1462 for (i = 0; i < NSIG; i++)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1463 signal(i, SIG_IGN);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1464 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1465
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1466 #if 0
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1467 /* tstp() isn't ported until I make sure it really works. */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1468 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1469 md_tstphold(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1470 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1471 #ifdef SIGTSTP
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1472 /*
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1473 * If a process can be suspended, this code wouldn't work
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1474 */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1475 # ifdef SIG_HOLD
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1476 signal(SIGTSTP, SIG_HOLD);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1477 # else
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1478 signal(SIGTSTP, SIG_IGN);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1479 # endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1480 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1481 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1482
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1483 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1484 md_tstpresume(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1485 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1486 #ifdef SIGTSTP
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1487 signal(SIGTSTP, tstp);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1488 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1489 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1490
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1491 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1492 md_tstpsignal(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1493 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1494 #ifdef SIGTSTP
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1495 kill(0, SIGTSTP); /* send actual signal and suspend process */
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1496 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1497 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1498 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1499
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1500 #if defined(CHECKTIME)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1501 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1502 md_start_checkout_timer(int time)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1503 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1504 int checkout();
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1505
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1506 #if defined(HAVE_ALARM) && defined(SIGALRM)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1507 signal(SIGALRM, checkout);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1508 alarm(time);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1509 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1510 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1511
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1512 void
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1513 md_stop_checkout_timer(void)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1514 {
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1515 #if defined(SIGALRM)
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1516 signal(SIGALRM, SIG_IGN);
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1517 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1518 }
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1519
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1520 #endif
8d1dfc5a912c srogue: add a complete mdport.c.
John "Elwin" Edwards
parents: 98
diff changeset
1521
120
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1522 long
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1523 md_memused(void)
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1524 {
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1525 #ifdef _WIN32
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1526 MEMORYSTATUS stat;
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1527
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1528 GlobalMemoryStatus(&stat);
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1529
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1530 return((long)stat.dwTotalPageFile);
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1531 #else
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1532 return( (long)sbrk(0) );
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1533 #endif
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1534 }
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1535
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1536 void
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1537 md_droppriv(void)
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1538 {
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1539 #if defined(HAVE_GETUID)
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1540 uid_t realuid = getuid();
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1541
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1542 #if defined(HAVE_SETRESUID)
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1543 if (setresuid(-1, realuid, realuid) != 0) {
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1544 #elif defined (HAVE_SETREUID)
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1545 if (setreuid(realuid, realuid) != 0) {
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1546 #elif defined (HAVE_SETUID)
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1547 if (setuid(realuid) != 0) {
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1548 #else
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1549 if (0) {
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1550 #endif
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1551 printf("Cannot change to effective uid: %d\n", realuid);
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1552 exit(1);
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1553 }
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1554 #endif
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1555 }
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1556
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1557 extern uid_t playuid;
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1558 extern gid_t playgid;
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1559
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1560 void
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1561 md_resetpriv(void)
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1562 {
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1563 #if defined (HAVE_SETUID)
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1564 setuid(playuid);
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1565 #endif
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1566 #if defined (HAVE_SETGID)
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1567 setgid(playgid);
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1568 #endif
d6b7c3fb37ea srogue: add and use more md_* portable functions.
John "Elwin" Edwards
parents: 119
diff changeset
1569 }
121
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1570
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1571 int
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1572 md_random(void)
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1573 {
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1574 #if defined (HAVE_LRAND48)
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1575 return lrand48();
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1576 #elif defined (HAVE_RANDOM)
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1577 return random();
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1578 #else
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1579 return rand();
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1580 #endif
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1581 }
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1582
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1583 void
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1584 md_srandom(unsigned int seed)
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1585 {
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1586 #if defined (HAVE_SRAND48)
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1587 srand48(seed);
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1588 #elif defined (HAVE_SRANDOM)
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1589 srandom(seed);
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1590 #else
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1591 srand(seed);
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1592 #endif
e6c8652473fe srogue: more compatibility improvements.
John "Elwin" Edwards
parents: 120
diff changeset
1593 }