annotate srogue/mdport.c @ 191:fb25a62680c7

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