annotate srogue/mdport.c @ 294:fe6b7a1a6dfc

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