annotate srogue/mdport.c @ 282:8b6aba552f6f

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