Mercurial > emacs
annotate src/sysdep.c @ 102217:e368bec025a6
Remove ever expanding versions of Windows. Shorten FAQ URL. Remove
mention of obsolete lock directory. Windows distribution now bin and
barebin only. Add note about SVG support. Remove old tar and gzip
problem workarounds. Use new (22.x) -Q option. Report all bugs through
bug tracker.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Mon, 23 Feb 2009 13:13:07 +0000 |
parents | 18eabb5ae6df |
children | dcf1f34f1713 |
rev | line source |
---|---|
491 | 1 /* Interfaces to system-dependent kernel and library entries. |
58518
1a5509ec45da
(sys_signal): Don't use SA_RESTART if SYNC_INPUT is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56714
diff
changeset
|
2 Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1999, 2000, 2001, |
100862
63bb1043409e
(list_system_processes, system_process_attributes) [MSDOS]: Don't use the
Eli Zaretskii <eliz@gnu.org>
parents:
100838
diff
changeset
|
3 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 |
79759 | 4 Free Software Foundation, Inc. |
491 | 5 |
6 This file is part of GNU Emacs. | |
7 | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93895
diff
changeset
|
8 GNU Emacs is free software: you can redistribute it and/or modify |
491 | 9 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93895
diff
changeset
|
10 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93895
diff
changeset
|
11 (at your option) any later version. |
491 | 12 |
13 GNU Emacs is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93895
diff
changeset
|
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
491 | 20 |
42469 | 21 #ifdef HAVE_CONFIG_H |
22 #include <config.h> | |
23 #endif | |
24 | |
491 | 25 #include <signal.h> |
53901
d85f8f2e71f7
Move include stdio.h to same place as in other files.
Jan Djärv <jan.h.d@swipnet.se>
parents:
53715
diff
changeset
|
26 #include <stdio.h> |
491 | 27 #include <setjmp.h> |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
28 #ifdef HAVE_PWD_H |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
29 #include <pwd.h> |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
30 #include <grp.h> |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
31 #endif /* HAVE_PWD_H */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
32 #ifdef HAVE_LIMITS_H |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
33 #include <limits.h> |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
34 #endif /* HAVE_LIMITS_H */ |
29387
2ead157165c4
Conditionally include stdlib.h, unistd.h.
Dave Love <fx@gnu.org>
parents:
29252
diff
changeset
|
35 #ifdef HAVE_UNISTD_H |
2ead157165c4
Conditionally include stdlib.h, unistd.h.
Dave Love <fx@gnu.org>
parents:
29252
diff
changeset
|
36 #include <unistd.h> |
2ead157165c4
Conditionally include stdlib.h, unistd.h.
Dave Love <fx@gnu.org>
parents:
29252
diff
changeset
|
37 #endif |
100566 | 38 #ifdef HAVE_ALLOCA_H |
39 #include <alloca.h> | |
40 #endif /* HAVE_ALLOCA_H */ | |
41 | |
491 | 42 #include "lisp.h" |
35055
daf01616a3e7
(random, srandom): Declare explicitly.
Dave Love <fx@gnu.org>
parents:
33718
diff
changeset
|
43 /* Including stdlib.h isn't necessarily enough to get srandom |
daf01616a3e7
(random, srandom): Declare explicitly.
Dave Love <fx@gnu.org>
parents:
33718
diff
changeset
|
44 declared, e.g. without __USE_XOPEN_EXTENDED with glibc 2. */ |
daf01616a3e7
(random, srandom): Declare explicitly.
Dave Love <fx@gnu.org>
parents:
33718
diff
changeset
|
45 |
84396
a21cc2869d36
[WINDOWSNT]: Don't include sysselect.h
Eli Zaretskii <eliz@gnu.org>
parents:
83648
diff
changeset
|
46 /* The w32 build defines select stuff in w32.h, which is included by |
a21cc2869d36
[WINDOWSNT]: Don't include sysselect.h
Eli Zaretskii <eliz@gnu.org>
parents:
83648
diff
changeset
|
47 sys/select.h (included below). */ |
a21cc2869d36
[WINDOWSNT]: Don't include sysselect.h
Eli Zaretskii <eliz@gnu.org>
parents:
83648
diff
changeset
|
48 #ifndef WINDOWSNT |
82988
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
49 #include "sysselect.h" |
84396
a21cc2869d36
[WINDOWSNT]: Don't include sysselect.h
Eli Zaretskii <eliz@gnu.org>
parents:
83648
diff
changeset
|
50 #endif |
82988
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
51 |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2332
diff
changeset
|
52 #include "blockinput.h" |
491 | 53 |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
54 #ifdef WINDOWSNT |
27933
ea5807a5d84e
[WINDOWSNT]: Use sys_read and sys_write to ensure correct line-ending
Jason Rumney <jasonr@gnu.org>
parents:
27922
diff
changeset
|
55 #define read sys_read |
ea5807a5d84e
[WINDOWSNT]: Use sys_read and sys_write to ensure correct line-ending
Jason Rumney <jasonr@gnu.org>
parents:
27922
diff
changeset
|
56 #define write sys_write |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
57 #include <windows.h> |
31101
1a4f15527382
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30611
diff
changeset
|
58 #ifndef NULL |
1a4f15527382
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30611
diff
changeset
|
59 #define NULL 0 |
1a4f15527382
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30611
diff
changeset
|
60 #endif |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
61 #endif /* not WINDOWSNT */ |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
62 |
1596
0e105bd23f44
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1570
diff
changeset
|
63 /* Does anyone other than VMS need this? */ |
0e105bd23f44
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1570
diff
changeset
|
64 #ifndef fwrite |
0e105bd23f44
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1570
diff
changeset
|
65 #define sys_fwrite fwrite |
0e105bd23f44
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1570
diff
changeset
|
66 #else |
0e105bd23f44
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1570
diff
changeset
|
67 #undef fwrite |
0e105bd23f44
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1570
diff
changeset
|
68 #endif |
0e105bd23f44
* systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents:
1570
diff
changeset
|
69 |
491 | 70 #include <sys/types.h> |
71 #include <sys/stat.h> | |
72 #include <errno.h> | |
73 | |
29125
63520d6017fb
(setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents:
29033
diff
changeset
|
74 #ifdef HAVE_SETPGID |
29150
0398ec3316c5
(setpgrp): Don't define if USG and BSD_PGRPS are not defined.
Gerd Moellmann <gerd@gnu.org>
parents:
29125
diff
changeset
|
75 #if !defined (USG) || defined (BSD_PGRPS) |
29911
02b0c6c15f1c
Undefine setpgrp before setting it.
Dave Love <fx@gnu.org>
parents:
29812
diff
changeset
|
76 #undef setpgrp |
29125
63520d6017fb
(setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents:
29033
diff
changeset
|
77 #define setpgrp setpgid |
63520d6017fb
(setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents:
29033
diff
changeset
|
78 #endif |
29150
0398ec3316c5
(setpgrp): Don't define if USG and BSD_PGRPS are not defined.
Gerd Moellmann <gerd@gnu.org>
parents:
29125
diff
changeset
|
79 #endif |
29125
63520d6017fb
(setpgrp) [HAVE_SETPGID]: Define as setpgid.
Gerd Moellmann <gerd@gnu.org>
parents:
29033
diff
changeset
|
80 |
16003
96349e2b7511
(<sys/systeminfo.h>): Include if HAVE_SYS_SYSTEMINFO_H is defined.
Paul Eggert <eggert@twinsun.com>
parents:
15718
diff
changeset
|
81 /* Get SI_SRPC_DOMAIN, if it is available. */ |
96349e2b7511
(<sys/systeminfo.h>): Include if HAVE_SYS_SYSTEMINFO_H is defined.
Paul Eggert <eggert@twinsun.com>
parents:
15718
diff
changeset
|
82 #ifdef HAVE_SYS_SYSTEMINFO_H |
96349e2b7511
(<sys/systeminfo.h>): Include if HAVE_SYS_SYSTEMINFO_H is defined.
Paul Eggert <eggert@twinsun.com>
parents:
15718
diff
changeset
|
83 #include <sys/systeminfo.h> |
96349e2b7511
(<sys/systeminfo.h>): Include if HAVE_SYS_SYSTEMINFO_H is defined.
Paul Eggert <eggert@twinsun.com>
parents:
15718
diff
changeset
|
84 #endif |
96349e2b7511
(<sys/systeminfo.h>): Include if HAVE_SYS_SYSTEMINFO_H is defined.
Paul Eggert <eggert@twinsun.com>
parents:
15718
diff
changeset
|
85 |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
86 #ifdef MSDOS /* Demacs 1.1.2 91/10/20 Manabu Higashida, MW Aug 1993 */ |
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
87 #include <dos.h> |
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
88 #include "dosfns.h" |
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
89 #include "msdos.h" |
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
90 #include <sys/param.h> |
14971
497b73cc5818
[DJGPP v2] (etext, start): Declared.
Richard M. Stallman <rms@gnu.org>
parents:
14790
diff
changeset
|
91 |
497b73cc5818
[DJGPP v2] (etext, start): Declared.
Richard M. Stallman <rms@gnu.org>
parents:
14790
diff
changeset
|
92 #if __DJGPP__ > 1 |
497b73cc5818
[DJGPP v2] (etext, start): Declared.
Richard M. Stallman <rms@gnu.org>
parents:
14790
diff
changeset
|
93 extern int etext; |
497b73cc5818
[DJGPP v2] (etext, start): Declared.
Richard M. Stallman <rms@gnu.org>
parents:
14790
diff
changeset
|
94 extern unsigned start __asm__ ("start"); |
497b73cc5818
[DJGPP v2] (etext, start): Declared.
Richard M. Stallman <rms@gnu.org>
parents:
14790
diff
changeset
|
95 #endif |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
96 #endif |
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
97 |
31101
1a4f15527382
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30611
diff
changeset
|
98 #ifndef USE_CRT_DLL |
25453
61fb4dde8684
Include <stdlib.h> if available. Declare errno only if it is not a macro.
Andreas Schwab <schwab@suse.de>
parents:
25431
diff
changeset
|
99 #ifndef errno |
491 | 100 extern int errno; |
25453
61fb4dde8684
Include <stdlib.h> if available. Declare errno only if it is not a macro.
Andreas Schwab <schwab@suse.de>
parents:
25431
diff
changeset
|
101 #endif |
31101
1a4f15527382
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30611
diff
changeset
|
102 #endif |
5518
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
103 |
5533
cabacc65710f
Restore big block of #ifdef and #include lines for fcntl.h and friends,
Roland McGrath <roland@gnu.org>
parents:
5518
diff
changeset
|
104 #include <sys/file.h> |
46922
ee04d07683ab
[!VMS]: Include sys/files.h.
Richard M. Stallman <rms@gnu.org>
parents:
46653
diff
changeset
|
105 |
48652
682129896be4
(fcntl.h): Test only HAVE_FCNTL_H.
Richard M. Stallman <rms@gnu.org>
parents:
48507
diff
changeset
|
106 #ifdef HAVE_FCNTL_H |
5533
cabacc65710f
Restore big block of #ifdef and #include lines for fcntl.h and friends,
Roland McGrath <roland@gnu.org>
parents:
5518
diff
changeset
|
107 #include <fcntl.h> |
cabacc65710f
Restore big block of #ifdef and #include lines for fcntl.h and friends,
Roland McGrath <roland@gnu.org>
parents:
5518
diff
changeset
|
108 #endif |
491 | 109 |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
110 #ifndef MSDOS |
491 | 111 #include <sys/ioctl.h> |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
112 #endif |
16240
b448d7632094
Replaced symbol BSD with BSD_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
16117
diff
changeset
|
113 |
1048
9899cb2199af
* sysdep.c (init_baud_rate): Re-arranged order of conditionals -
Jim Blandy <jimb@redhat.com>
parents:
1014
diff
changeset
|
114 #include "systty.h" |
4640 | 115 #include "syswait.h" |
491 | 116 |
87730 | 117 #if defined (USG) |
491 | 118 #include <sys/utsname.h> |
119 #include <memory.h> | |
87730 | 120 #endif /* USG */ |
491 | 121 |
122 extern int quit_char; | |
123 | |
31101
1a4f15527382
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30611
diff
changeset
|
124 #include "keyboard.h" |
766 | 125 #include "frame.h" |
491 | 126 #include "window.h" |
127 #include "termhooks.h" | |
128 #include "termchar.h" | |
129 #include "termopts.h" | |
130 #include "dispextern.h" | |
131 #include "process.h" | |
53341 | 132 #include "cm.h" /* for reset_sys_modes */ |
491 | 133 |
95917 | 134 /* For serial_configure and serial_open. */ |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
135 extern Lisp_Object QCport, QCspeed, QCprocess; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
136 extern Lisp_Object QCbytesize, QCstopbits, QCparity, Qodd, Qeven; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
137 extern Lisp_Object QCflowcontrol, Qhw, Qsw, QCsummary; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
138 |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
139 #ifdef WINDOWSNT |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
140 #include <direct.h> |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
141 /* In process.h which conflicts with the local copy. */ |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
142 #define _P_WAIT 0 |
96348
ecd6143014da
Remove unneeded -Defines in the compiler command line (MinGW and MSVC).
Juanma Barranquero <lekktu@gmail.com>
parents:
96309
diff
changeset
|
143 int _cdecl _spawnlp (int, const char *, const char *, ...); |
ecd6143014da
Remove unneeded -Defines in the compiler command line (MinGW and MSVC).
Juanma Barranquero <lekktu@gmail.com>
parents:
96309
diff
changeset
|
144 int _cdecl _getpid (void); |
65418
b7f29d144468
[WINDOWSNT]: Add prototype for getwd.
Eli Zaretskii <eliz@gnu.org>
parents:
65410
diff
changeset
|
145 extern char *getwd (char *); |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
146 #endif |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
147 |
579 | 148 #include "syssignal.h" |
149 #include "systime.h" | |
9239
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
150 #ifdef HAVE_UTIME_H |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
151 #include <utime.h> |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
152 #endif |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
153 |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
154 #ifndef HAVE_UTIMES |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
155 #ifndef HAVE_STRUCT_UTIMBUF |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
156 /* We want to use utime rather than utimes, but we couldn't find the |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
157 structure declaration. We'll use the traditional one. */ |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
158 struct utimbuf { |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
159 long actime; |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
160 long modtime; |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
161 }; |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
162 #endif |
d4ad53f37cc7
Include <utime.h> here instead of in systime.h.
Karl Heuer <kwzh@gnu.org>
parents:
9110
diff
changeset
|
163 #endif |
491 | 164 |
4952
0c973730e476
(read_input_waiting): Don't mess with meta bit
Richard M. Stallman <rms@gnu.org>
parents:
4916
diff
changeset
|
165 /* LPASS8 is new in 4.3, and makes cbreak mode provide all 8 bits. */ |
0c973730e476
(read_input_waiting): Don't mess with meta bit
Richard M. Stallman <rms@gnu.org>
parents:
4916
diff
changeset
|
166 #ifndef LPASS8 |
0c973730e476
(read_input_waiting): Don't mess with meta bit
Richard M. Stallman <rms@gnu.org>
parents:
4916
diff
changeset
|
167 #define LPASS8 0 |
0c973730e476
(read_input_waiting): Don't mess with meta bit
Richard M. Stallman <rms@gnu.org>
parents:
4916
diff
changeset
|
168 #endif |
0c973730e476
(read_input_waiting): Don't mess with meta bit
Richard M. Stallman <rms@gnu.org>
parents:
4916
diff
changeset
|
169 |
491 | 170 static int baud_convert[] = |
171 { | |
172 0, 50, 75, 110, 135, 150, 200, 300, 600, 1200, | |
173 1800, 2400, 4800, 9600, 19200, 38400 | |
174 }; | |
175 | |
29252
c8f4d06938b9
(ospeed) [HAVE_SPEED_T]: Declare as `extern speed_t'.
Gerd Moellmann <gerd@gnu.org>
parents:
29150
diff
changeset
|
176 #ifdef HAVE_SPEED_T |
c8f4d06938b9
(ospeed) [HAVE_SPEED_T]: Declare as `extern speed_t'.
Gerd Moellmann <gerd@gnu.org>
parents:
29150
diff
changeset
|
177 #include <termios.h> |
c8f4d06938b9
(ospeed) [HAVE_SPEED_T]: Declare as `extern speed_t'.
Gerd Moellmann <gerd@gnu.org>
parents:
29150
diff
changeset
|
178 #else |
19023
f7a3c16c49cb
[HAVE_LIBNCURSES]: Declare ospeed as short, unless NCURSES_OSPEED_T.
Richard M. Stallman <rms@gnu.org>
parents:
18808
diff
changeset
|
179 #if defined (HAVE_LIBNCURSES) && ! defined (NCURSES_OSPEED_T) |
f7a3c16c49cb
[HAVE_LIBNCURSES]: Declare ospeed as short, unless NCURSES_OSPEED_T.
Richard M. Stallman <rms@gnu.org>
parents:
18808
diff
changeset
|
180 #else |
41969
e669966d496e
Test GNU_LINUX, not LINUX.
Richard M. Stallman <rms@gnu.org>
parents:
41275
diff
changeset
|
181 #if defined (HAVE_TERMIOS_H) && defined (GNU_LINUX) |
18808 | 182 #include <termios.h> |
16117
16c866efd8b5
[HAVE_TERMIOS_H]: Include termios.h.
Richard M. Stallman <rms@gnu.org>
parents:
16051
diff
changeset
|
183 #endif |
19023
f7a3c16c49cb
[HAVE_LIBNCURSES]: Declare ospeed as short, unless NCURSES_OSPEED_T.
Richard M. Stallman <rms@gnu.org>
parents:
18808
diff
changeset
|
184 #endif |
29252
c8f4d06938b9
(ospeed) [HAVE_SPEED_T]: Declare as `extern speed_t'.
Gerd Moellmann <gerd@gnu.org>
parents:
29150
diff
changeset
|
185 #endif |
491 | 186 |
33617
a9247e019ab7
(emacs_ospeed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33217
diff
changeset
|
187 int emacs_ospeed; |
a9247e019ab7
(emacs_ospeed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33217
diff
changeset
|
188 |
71063
7510757f449b
* search.c (matcher_overflow): Mark as NO_RETURN.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
68651
diff
changeset
|
189 void croak P_ ((char *)) NO_RETURN; |
21769
07999a47f2ee
(croak): Add forward declaration.
Richard M. Stallman <rms@gnu.org>
parents:
21532
diff
changeset
|
190 |
29812
e4f28eb9a373
(sigprocmask_set): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29387
diff
changeset
|
191 /* Temporary used by `sigblock' when defined in terms of signprocmask. */ |
e4f28eb9a373
(sigprocmask_set): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29387
diff
changeset
|
192 |
e4f28eb9a373
(sigprocmask_set): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29387
diff
changeset
|
193 SIGMASKTYPE sigprocmask_set; |
e4f28eb9a373
(sigprocmask_set): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29387
diff
changeset
|
194 |
65410
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
195 |
65657
c6e45e9a83bf
* s/aix4-2.h (BROKEN_GET_CURRENT_DIR_NAME): Define
Dan Nicolaescu <dann@ics.uci.edu>
parents:
65580
diff
changeset
|
196 #if !defined (HAVE_GET_CURRENT_DIR_NAME) || defined (BROKEN_GET_CURRENT_DIR_NAME) |
65410
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
197 |
65418
b7f29d144468
[WINDOWSNT]: Add prototype for getwd.
Eli Zaretskii <eliz@gnu.org>
parents:
65410
diff
changeset
|
198 /* Return the current working directory. Returns NULL on errors. |
65410
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
199 Any other returned value must be freed with free. This is used |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
200 only when get_current_dir_name is not defined on the system. */ |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
201 char* |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
202 get_current_dir_name () |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
203 { |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
204 char *buf; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
205 char *pwd; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
206 struct stat dotstat, pwdstat; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
207 /* If PWD is accurate, use it instead of calling getwd. PWD is |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
208 sometimes a nicer name, and using it may avoid a fatal error if a |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
209 parent directory is searchable but not readable. */ |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
210 if ((pwd = getenv ("PWD")) != 0 |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
211 && (IS_DIRECTORY_SEP (*pwd) || (*pwd && IS_DEVICE_SEP (pwd[1]))) |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
212 && stat (pwd, &pwdstat) == 0 |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
213 && stat (".", &dotstat) == 0 |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
214 && dotstat.st_ino == pwdstat.st_ino |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
215 && dotstat.st_dev == pwdstat.st_dev |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
216 #ifdef MAXPATHLEN |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
217 && strlen (pwd) < MAXPATHLEN |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
218 #endif |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
219 ) |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
220 { |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
221 buf = (char *) malloc (strlen (pwd) + 1); |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
222 if (!buf) |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
223 return NULL; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
224 strcpy (buf, pwd); |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
225 } |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
226 #ifdef HAVE_GETCWD |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
227 else |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
228 { |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
229 size_t buf_size = 1024; |
65418
b7f29d144468
[WINDOWSNT]: Add prototype for getwd.
Eli Zaretskii <eliz@gnu.org>
parents:
65410
diff
changeset
|
230 buf = (char *) malloc (buf_size); |
65410
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
231 if (!buf) |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
232 return NULL; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
233 for (;;) |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
234 { |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
235 if (getcwd (buf, buf_size) == buf) |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
236 break; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
237 if (errno != ERANGE) |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
238 { |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
239 int tmp_errno = errno; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
240 free (buf); |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
241 errno = tmp_errno; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
242 return NULL; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
243 } |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
244 buf_size *= 2; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
245 buf = (char *) realloc (buf, buf_size); |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
246 if (!buf) |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
247 return NULL; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
248 } |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
249 } |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
250 #else |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
251 else |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
252 { |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
253 /* We need MAXPATHLEN here. */ |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
254 buf = (char *) malloc (MAXPATHLEN + 1); |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
255 if (!buf) |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
256 return NULL; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
257 if (getwd (buf) == NULL) |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
258 { |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
259 int tmp_errno = errno; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
260 free (buf); |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
261 errno = tmp_errno; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
262 return NULL; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
263 } |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
264 } |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
265 #endif |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
266 return buf; |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
267 } |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
268 #endif |
2a3fa7d60327
(get_current_dir_name) [!HAVE_CURRENT_DIR_NAME]: New function.
Eli Zaretskii <eliz@gnu.org>
parents:
64770
diff
changeset
|
269 |
4681
6945d02dd725
(stuff_char): Use input_fd.
Richard M. Stallman <rms@gnu.org>
parents:
4643
diff
changeset
|
270 |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
271 /* Discard pending input on all input descriptors. */ |
579 | 272 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
273 void |
491 | 274 discard_tty_input () |
275 { | |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
276 #ifndef WINDOWSNT |
579 | 277 struct emacs_tty buf; |
491 | 278 |
279 if (noninteractive) | |
280 return; | |
281 | |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
282 #ifdef MSDOS /* Demacs 1.1.1 91/10/16 HIRANO Satoshi */ |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
283 while (dos_keyread () != -1) |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
284 ; |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
285 #else /* not MSDOS */ |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
286 { |
82989
f3845715a5f6
Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
82988
diff
changeset
|
287 struct tty_display_info *tty; |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
288 for (tty = tty_list; tty; tty = tty->next) |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
289 { |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
290 if (tty->input) /* Is the device suspended? */ |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
291 { |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
292 EMACS_GET_TTY (fileno (tty->input), &buf); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
293 EMACS_SET_TTY (fileno (tty->input), &buf, 0); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
294 } |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
295 } |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
296 } |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
297 #endif /* not MSDOS */ |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
298 #endif /* not WINDOWSNT */ |
491 | 299 } |
300 | |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
301 |
491 | 302 #ifdef SIGTSTP |
303 | |
4681
6945d02dd725
(stuff_char): Use input_fd.
Richard M. Stallman <rms@gnu.org>
parents:
4643
diff
changeset
|
304 /* Arrange for character C to be read as the next input from |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
305 the terminal. |
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
306 XXX What if we have multiple ttys? |
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
307 */ |
4681
6945d02dd725
(stuff_char): Use input_fd.
Richard M. Stallman <rms@gnu.org>
parents:
4643
diff
changeset
|
308 |
21514 | 309 void |
48507
00bcc92f4acf
(stuff_char) [PROTOTYPES]: Provide ISO C arglist.
Dave Love <fx@gnu.org>
parents:
46952
diff
changeset
|
310 stuff_char (char c) |
491 | 311 { |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
312 if (! FRAME_TERMCAP_P (SELECTED_FRAME ())) |
9688
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
313 return; |
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
314 |
491 | 315 /* Should perhaps error if in batch mode */ |
316 #ifdef TIOCSTI | |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
317 ioctl (fileno (CURTTY()->input), TIOCSTI, &c); |
491 | 318 #else /* no TIOCSTI */ |
5167
6ac5c999a7cc
(init_baud_rate): Avoid referring to sg uninitialized.
Richard M. Stallman <rms@gnu.org>
parents:
5158
diff
changeset
|
319 error ("Cannot stuff terminal input characters in this version of Unix"); |
491 | 320 #endif /* no TIOCSTI */ |
321 } | |
322 | |
323 #endif /* SIGTSTP */ | |
4681
6945d02dd725
(stuff_char): Use input_fd.
Richard M. Stallman <rms@gnu.org>
parents:
4643
diff
changeset
|
324 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
325 void |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
326 init_baud_rate (int fd) |
491 | 327 { |
328 if (noninteractive) | |
33617
a9247e019ab7
(emacs_ospeed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33217
diff
changeset
|
329 emacs_ospeed = 0; |
491 | 330 else |
331 { | |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
332 #ifdef DOS_NT |
33617
a9247e019ab7
(emacs_ospeed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33217
diff
changeset
|
333 emacs_ospeed = 15; |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
334 #else /* not DOS_NT */ |
579 | 335 #ifdef HAVE_TERMIOS |
336 struct termios sg; | |
337 | |
5167
6ac5c999a7cc
(init_baud_rate): Avoid referring to sg uninitialized.
Richard M. Stallman <rms@gnu.org>
parents:
5158
diff
changeset
|
338 sg.c_cflag = B9600; |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
339 tcgetattr (fd, &sg); |
33617
a9247e019ab7
(emacs_ospeed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33217
diff
changeset
|
340 emacs_ospeed = cfgetospeed (&sg); |
97142 | 341 #else /* not TERMIOS */ |
1048
9899cb2199af
* sysdep.c (init_baud_rate): Re-arranged order of conditionals -
Jim Blandy <jimb@redhat.com>
parents:
1014
diff
changeset
|
342 #ifdef HAVE_TERMIO |
9899cb2199af
* sysdep.c (init_baud_rate): Re-arranged order of conditionals -
Jim Blandy <jimb@redhat.com>
parents:
1014
diff
changeset
|
343 struct termio sg; |
9899cb2199af
* sysdep.c (init_baud_rate): Re-arranged order of conditionals -
Jim Blandy <jimb@redhat.com>
parents:
1014
diff
changeset
|
344 |
5167
6ac5c999a7cc
(init_baud_rate): Avoid referring to sg uninitialized.
Richard M. Stallman <rms@gnu.org>
parents:
5158
diff
changeset
|
345 sg.c_cflag = B9600; |
1048
9899cb2199af
* sysdep.c (init_baud_rate): Re-arranged order of conditionals -
Jim Blandy <jimb@redhat.com>
parents:
1014
diff
changeset
|
346 #ifdef HAVE_TCATTR |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
347 tcgetattr (fd, &sg); |
1048
9899cb2199af
* sysdep.c (init_baud_rate): Re-arranged order of conditionals -
Jim Blandy <jimb@redhat.com>
parents:
1014
diff
changeset
|
348 #else |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
349 ioctl (fd, TCGETA, &sg); |
1048
9899cb2199af
* sysdep.c (init_baud_rate): Re-arranged order of conditionals -
Jim Blandy <jimb@redhat.com>
parents:
1014
diff
changeset
|
350 #endif |
33617
a9247e019ab7
(emacs_ospeed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33217
diff
changeset
|
351 emacs_ospeed = sg.c_cflag & CBAUD; |
97142 | 352 #else /* neither TERMIOS nor TERMIO */ |
579 | 353 struct sgttyb sg; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
354 |
579 | 355 sg.sg_ospeed = B9600; |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
356 if (ioctl (fd, TIOCGETP, &sg) < 0) |
3559
a9b886b3f976
(init_baud_rate) [HAVE_TERMIOS]: Use cfgetospeed.
Richard M. Stallman <rms@gnu.org>
parents:
3472
diff
changeset
|
357 abort (); |
33617
a9247e019ab7
(emacs_ospeed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33217
diff
changeset
|
358 emacs_ospeed = sg.sg_ospeed; |
1048
9899cb2199af
* sysdep.c (init_baud_rate): Re-arranged order of conditionals -
Jim Blandy <jimb@redhat.com>
parents:
1014
diff
changeset
|
359 #endif /* not HAVE_TERMIO */ |
579 | 360 #endif /* not HAVE_TERMIOS */ |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
361 #endif /* not DOS_NT */ |
491 | 362 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
363 |
33617
a9247e019ab7
(emacs_ospeed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33217
diff
changeset
|
364 baud_rate = (emacs_ospeed < sizeof baud_convert / sizeof baud_convert[0] |
a9247e019ab7
(emacs_ospeed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33217
diff
changeset
|
365 ? baud_convert[emacs_ospeed] : 9600); |
491 | 366 if (baud_rate == 0) |
367 baud_rate = 1200; | |
368 } | |
369 | |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
370 |
491 | 371 /*ARGSUSED*/ |
21514 | 372 void |
491 | 373 set_exclusive_use (fd) |
374 int fd; | |
375 { | |
376 #ifdef FIOCLEX | |
377 ioctl (fd, FIOCLEX, 0); | |
378 #endif | |
379 /* Ok to do nothing if this feature does not exist */ | |
380 } | |
4681
6945d02dd725
(stuff_char): Use input_fd.
Richard M. Stallman <rms@gnu.org>
parents:
4643
diff
changeset
|
381 |
491 | 382 #ifndef subprocesses |
383 | |
384 wait_without_blocking () | |
385 { | |
16240
b448d7632094
Replaced symbol BSD with BSD_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
16117
diff
changeset
|
386 #ifdef BSD_SYSTEM |
491 | 387 wait3 (0, WNOHANG | WUNTRACED, 0); |
388 #else | |
389 croak ("wait_without_blocking"); | |
390 #endif | |
391 synch_process_alive = 0; | |
392 } | |
393 | |
394 #endif /* not subprocesses */ | |
395 | |
396 int wait_debugging; /* Set nonzero to make following function work under dbx | |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
397 (at least for bsd). */ |
491 | 398 |
399 SIGTYPE | |
400 wait_for_termination_signal () | |
401 {} | |
402 | |
403 /* Wait for subprocess with process id `pid' to terminate and | |
404 make sure it will get eliminated (not remain forever as a zombie) */ | |
405 | |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
406 void |
491 | 407 wait_for_termination (pid) |
408 int pid; | |
409 { | |
410 while (1) | |
411 { | |
412 #ifdef subprocesses | |
96303 | 413 #if defined (BSD_SYSTEM) || defined (HPUX) |
2942
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
414 /* Note that kill returns -1 even if the process is just a zombie now. |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
415 But inevitably a SIGCHLD interrupt should be generated |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
416 and child_sig will do wait3 and make the process go away. */ |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
417 /* There is some indication that there is a bug involved with |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
418 termination of subprocesses, perhaps involving a kernel bug too, |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
419 but no idea what it is. Just as a hunch we signal SIGCHLD to see |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
420 if that causes the problem to go away or get worse. */ |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
421 sigsetmask (sigmask (SIGCHLD)); |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
422 if (0 > kill (pid, 0)) |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
423 { |
2942
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
424 sigsetmask (SIGEMPTYMASK); |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
425 kill (getpid (), SIGCHLD); |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
426 break; |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
427 } |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
428 if (wait_debugging) |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
429 sleep (1); |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
430 else |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
431 sigpause (SIGEMPTYMASK); |
16240
b448d7632094
Replaced symbol BSD with BSD_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
16117
diff
changeset
|
432 #else /* not BSD_SYSTEM, and not HPUX version >= 6 */ |
41969
e669966d496e
Test GNU_LINUX, not LINUX.
Richard M. Stallman <rms@gnu.org>
parents:
41275
diff
changeset
|
433 #ifdef POSIX_SIGNALS /* would this work for GNU/Linux as well? */ |
3301
aaf396661221
(wait_for_termination): Add POSIX_SIGNALS alternative.
Richard M. Stallman <rms@gnu.org>
parents:
3292
diff
changeset
|
434 sigblock (sigmask (SIGCHLD)); |
39374
54dd36cef0e2
(wait_for_termination) [POSIX_SIGNALS]: Terminate
Gerd Moellmann <gerd@gnu.org>
parents:
39363
diff
changeset
|
435 errno = 0; |
54dd36cef0e2
(wait_for_termination) [POSIX_SIGNALS]: Terminate
Gerd Moellmann <gerd@gnu.org>
parents:
39363
diff
changeset
|
436 if (kill (pid, 0) == -1 && errno == ESRCH) |
3301
aaf396661221
(wait_for_termination): Add POSIX_SIGNALS alternative.
Richard M. Stallman <rms@gnu.org>
parents:
3292
diff
changeset
|
437 { |
aaf396661221
(wait_for_termination): Add POSIX_SIGNALS alternative.
Richard M. Stallman <rms@gnu.org>
parents:
3292
diff
changeset
|
438 sigunblock (sigmask (SIGCHLD)); |
aaf396661221
(wait_for_termination): Add POSIX_SIGNALS alternative.
Richard M. Stallman <rms@gnu.org>
parents:
3292
diff
changeset
|
439 break; |
aaf396661221
(wait_for_termination): Add POSIX_SIGNALS alternative.
Richard M. Stallman <rms@gnu.org>
parents:
3292
diff
changeset
|
440 } |
39363
50bf161d854c
(wait_for_termination): Add a FIXME comment for the use of non-POSIX
Gerd Moellmann <gerd@gnu.org>
parents:
37219
diff
changeset
|
441 |
44099
0400b67840ba
(wait_for_termination): Use sigsuspend rather than sigpause.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43713
diff
changeset
|
442 sigsuspend (&empty_mask); |
3301
aaf396661221
(wait_for_termination): Add POSIX_SIGNALS alternative.
Richard M. Stallman <rms@gnu.org>
parents:
3292
diff
changeset
|
443 #else /* not POSIX_SIGNALS */ |
2942
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
444 #ifdef HAVE_SYSV_SIGPAUSE |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
445 sighold (SIGCHLD); |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
446 if (0 > kill (pid, 0)) |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
447 { |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
448 sigrelse (SIGCHLD); |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
449 break; |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
450 } |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
451 sigpause (SIGCHLD); |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
452 #else /* not HAVE_SYSV_SIGPAUSE */ |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
453 #ifdef WINDOWSNT |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
454 wait (0); |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
455 break; |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
456 #else /* not WINDOWSNT */ |
2942
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
457 if (0 > kill (pid, 0)) |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
458 break; |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
459 /* Using sleep instead of pause avoids timing error. |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
460 If the inferior dies just before the sleep, |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
461 we lose just one second. */ |
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
462 sleep (1); |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
463 #endif /* not WINDOWSNT */ |
2942
9ac629dc3a4b
(wait_for_termination): Copy code from 18.59 (but sans BSD4_1 alternatives).
Richard M. Stallman <rms@gnu.org>
parents:
2939
diff
changeset
|
464 #endif /* not HAVE_SYSV_SIGPAUSE */ |
3301
aaf396661221
(wait_for_termination): Add POSIX_SIGNALS alternative.
Richard M. Stallman <rms@gnu.org>
parents:
3292
diff
changeset
|
465 #endif /* not POSIX_SIGNALS */ |
16240
b448d7632094
Replaced symbol BSD with BSD_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
16117
diff
changeset
|
466 #endif /* not BSD_SYSTEM, and not HPUX version >= 6 */ |
491 | 467 #else /* not subprocesses */ |
14971
497b73cc5818
[DJGPP v2] (etext, start): Declared.
Richard M. Stallman <rms@gnu.org>
parents:
14790
diff
changeset
|
468 #if __DJGPP__ > 1 |
497b73cc5818
[DJGPP v2] (etext, start): Declared.
Richard M. Stallman <rms@gnu.org>
parents:
14790
diff
changeset
|
469 break; |
497b73cc5818
[DJGPP v2] (etext, start): Declared.
Richard M. Stallman <rms@gnu.org>
parents:
14790
diff
changeset
|
470 #else /* not __DJGPP__ > 1 */ |
491 | 471 if (kill (pid, 0) < 0) |
472 break; | |
473 wait (0); | |
14971
497b73cc5818
[DJGPP v2] (etext, start): Declared.
Richard M. Stallman <rms@gnu.org>
parents:
14790
diff
changeset
|
474 #endif /* not __DJGPP__ > 1*/ |
491 | 475 #endif /* not subprocesses */ |
476 } | |
477 } | |
478 | |
479 #ifdef subprocesses | |
480 | |
481 /* | |
482 * flush any pending output | |
483 * (may flush input as well; it does not matter the way we use it) | |
484 */ | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
485 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
486 void |
491 | 487 flush_pending_output (channel) |
488 int channel; | |
489 { | |
490 #ifdef HAVE_TERMIOS | |
491 /* If we try this, we get hit with SIGTTIN, because | |
492 the child's tty belongs to the child's pgrp. */ | |
493 #else | |
494 #ifdef TCFLSH | |
495 ioctl (channel, TCFLSH, 1); | |
496 #else | |
497 #ifdef TIOCFLUSH | |
498 int zero = 0; | |
499 /* 3rd arg should be ignored | |
500 but some 4.2 kernels actually want the address of an int | |
501 and nonzero means something different. */ | |
502 ioctl (channel, TIOCFLUSH, &zero); | |
503 #endif | |
504 #endif | |
505 #endif | |
506 } | |
4681
6945d02dd725
(stuff_char): Use input_fd.
Richard M. Stallman <rms@gnu.org>
parents:
4643
diff
changeset
|
507 |
491 | 508 /* Set up the terminal at the other end of a pseudo-terminal that |
509 we will be controlling an inferior through. | |
510 It should not echo or do line-editing, since that is done | |
511 in Emacs. No padding needed for insertion into an Emacs buffer. */ | |
512 | |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
513 void |
491 | 514 child_setup_tty (out) |
515 int out; | |
516 { | |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
517 #ifndef DOS_NT |
579 | 518 struct emacs_tty s; |
519 | |
520 EMACS_GET_TTY (out, &s); | |
521 | |
1927
c6dc1a37aeb4
* sysdep.c (child_setup_tty): Recognize HAVE_TERMIOS as well as
Jim Blandy <jimb@redhat.com>
parents:
1596
diff
changeset
|
522 #if defined (HAVE_TERMIO) || defined (HAVE_TERMIOS) |
579 | 523 s.main.c_oflag |= OPOST; /* Enable output postprocessing */ |
524 s.main.c_oflag &= ~ONLCR; /* Disable map of NL to CR-NL on output */ | |
5967
ac268a6d91d6
(child_setup_tty): Use IUCLC, OLCUC, NLDLY only if defined.
Richard M. Stallman <rms@gnu.org>
parents:
5964
diff
changeset
|
525 #ifdef NLDLY |
95063
b309a7cbf6e1
(child_setup_tty): Handle systems with NLDLY, without FFDLY.
Glenn Morris <rgm@gnu.org>
parents:
94963
diff
changeset
|
526 /* http://lists.gnu.org/archive/html/emacs-devel/2008-05/msg00406.html |
b309a7cbf6e1
(child_setup_tty): Handle systems with NLDLY, without FFDLY.
Glenn Morris <rgm@gnu.org>
parents:
94963
diff
changeset
|
527 Some versions of GNU Hurd do not have FFDLY? */ |
b309a7cbf6e1
(child_setup_tty): Handle systems with NLDLY, without FFDLY.
Glenn Morris <rgm@gnu.org>
parents:
94963
diff
changeset
|
528 #ifdef FFDLY |
579 | 529 s.main.c_oflag &= ~(NLDLY|CRDLY|TABDLY|BSDLY|VTDLY|FFDLY); |
530 /* No output delays */ | |
95063
b309a7cbf6e1
(child_setup_tty): Handle systems with NLDLY, without FFDLY.
Glenn Morris <rgm@gnu.org>
parents:
94963
diff
changeset
|
531 #else |
b309a7cbf6e1
(child_setup_tty): Handle systems with NLDLY, without FFDLY.
Glenn Morris <rgm@gnu.org>
parents:
94963
diff
changeset
|
532 s.main.c_oflag &= ~(NLDLY|CRDLY|TABDLY|BSDLY|VTDLY); |
b309a7cbf6e1
(child_setup_tty): Handle systems with NLDLY, without FFDLY.
Glenn Morris <rgm@gnu.org>
parents:
94963
diff
changeset
|
533 /* No output delays */ |
b309a7cbf6e1
(child_setup_tty): Handle systems with NLDLY, without FFDLY.
Glenn Morris <rgm@gnu.org>
parents:
94963
diff
changeset
|
534 #endif |
5967
ac268a6d91d6
(child_setup_tty): Use IUCLC, OLCUC, NLDLY only if defined.
Richard M. Stallman <rms@gnu.org>
parents:
5964
diff
changeset
|
535 #endif |
579 | 536 s.main.c_lflag &= ~ECHO; /* Disable echo */ |
537 s.main.c_lflag |= ISIG; /* Enable signals */ | |
5967
ac268a6d91d6
(child_setup_tty): Use IUCLC, OLCUC, NLDLY only if defined.
Richard M. Stallman <rms@gnu.org>
parents:
5964
diff
changeset
|
538 #ifdef IUCLC |
ac268a6d91d6
(child_setup_tty): Use IUCLC, OLCUC, NLDLY only if defined.
Richard M. Stallman <rms@gnu.org>
parents:
5964
diff
changeset
|
539 s.main.c_iflag &= ~IUCLC; /* Disable downcasing on input. */ |
ac268a6d91d6
(child_setup_tty): Use IUCLC, OLCUC, NLDLY only if defined.
Richard M. Stallman <rms@gnu.org>
parents:
5964
diff
changeset
|
540 #endif |
14390
d16ba81e278a
(child_setup_tty): Turn off ISTRIP to pass 8bit. Turn off TAB3 so
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
541 #ifdef ISTRIP |
d16ba81e278a
(child_setup_tty): Turn off ISTRIP to pass 8bit. Turn off TAB3 so
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
542 s.main.c_iflag &= ~ISTRIP; /* don't strip 8th bit on input */ |
d16ba81e278a
(child_setup_tty): Turn off ISTRIP to pass 8bit. Turn off TAB3 so
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
543 #endif |
5972
ccb0f99750e3
(child_setup_tty): Typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
5967
diff
changeset
|
544 #ifdef OLCUC |
5967
ac268a6d91d6
(child_setup_tty): Use IUCLC, OLCUC, NLDLY only if defined.
Richard M. Stallman <rms@gnu.org>
parents:
5964
diff
changeset
|
545 s.main.c_oflag &= ~OLCUC; /* Disable upcasing on output. */ |
ac268a6d91d6
(child_setup_tty): Use IUCLC, OLCUC, NLDLY only if defined.
Richard M. Stallman <rms@gnu.org>
parents:
5964
diff
changeset
|
546 #endif |
14390
d16ba81e278a
(child_setup_tty): Turn off ISTRIP to pass 8bit. Turn off TAB3 so
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
547 s.main.c_oflag &= ~TAB3; /* Disable tab expansion */ |
4916
83db42883f64
(child_setup_tty): Make the pty handle 8-bit characters.
Richard M. Stallman <rms@gnu.org>
parents:
4772
diff
changeset
|
548 s.main.c_cflag = (s.main.c_cflag & ~CSIZE) | CS8; /* Don't strip 8th bit */ |
579 | 549 s.main.c_lflag |= ICANON; /* Enable erase/kill and eof processing */ |
550 s.main.c_cc[VEOF] = 04; /* insure that EOF is Control-D */ | |
10108
2844db63605f
(child_setup_tty): Use CDISABLE for setting VERASE, VKILL.
Richard M. Stallman <rms@gnu.org>
parents:
10049
diff
changeset
|
551 s.main.c_cc[VERASE] = CDISABLE; /* disable erase processing */ |
2844db63605f
(child_setup_tty): Use CDISABLE for setting VERASE, VKILL.
Richard M. Stallman <rms@gnu.org>
parents:
10049
diff
changeset
|
552 s.main.c_cc[VKILL] = CDISABLE; /* disable kill processing */ |
579 | 553 |
491 | 554 #ifdef HPUX |
579 | 555 s.main.c_cflag = (s.main.c_cflag & ~CBAUD) | B9600; /* baud rate sanity */ |
491 | 556 #endif /* HPUX */ |
579 | 557 |
56696
fb72da59e269
(child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
Richard M. Stallman <rms@gnu.org>
parents:
56479
diff
changeset
|
558 #ifdef SIGNALS_VIA_CHARACTERS |
fb72da59e269
(child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
Richard M. Stallman <rms@gnu.org>
parents:
56479
diff
changeset
|
559 /* the QUIT and INTR character are used in process_send_signal |
fb72da59e269
(child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
Richard M. Stallman <rms@gnu.org>
parents:
56479
diff
changeset
|
560 so set them here to something useful. */ |
56714
ba670a86ca95
(child_setup_tty, init_sys_modes): Use CDISABLE.
Kim F. Storm <storm@cua.dk>
parents:
56696
diff
changeset
|
561 if (s.main.c_cc[VQUIT] == CDISABLE) |
56696
fb72da59e269
(child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
Richard M. Stallman <rms@gnu.org>
parents:
56479
diff
changeset
|
562 s.main.c_cc[VQUIT] = '\\'&037; /* Control-\ */ |
56714
ba670a86ca95
(child_setup_tty, init_sys_modes): Use CDISABLE.
Kim F. Storm <storm@cua.dk>
parents:
56696
diff
changeset
|
563 if (s.main.c_cc[VINTR] == CDISABLE) |
56696
fb72da59e269
(child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
Richard M. Stallman <rms@gnu.org>
parents:
56479
diff
changeset
|
564 s.main.c_cc[VINTR] = 'C'&037; /* Control-C */ |
fb72da59e269
(child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
Richard M. Stallman <rms@gnu.org>
parents:
56479
diff
changeset
|
565 #endif /* not SIGNALS_VIA_CHARACTERS */ |
fb72da59e269
(child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
Richard M. Stallman <rms@gnu.org>
parents:
56479
diff
changeset
|
566 |
491 | 567 #ifdef AIX |
568 /* AIX enhanced edit loses NULs, so disable it */ | |
569 #ifndef IBMR2AIX | |
579 | 570 s.main.c_line = 0; |
571 s.main.c_iflag &= ~ASCEDIT; | |
491 | 572 #endif |
573 /* Also, PTY overloads NUL and BREAK. | |
574 don't ignore break, but don't signal either, so it looks like NUL. */ | |
579 | 575 s.main.c_iflag &= ~IGNBRK; |
576 s.main.c_iflag &= ~BRKINT; | |
56696
fb72da59e269
(child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
Richard M. Stallman <rms@gnu.org>
parents:
56479
diff
changeset
|
577 /* rms: Formerly it set s.main.c_cc[VINTR] to 0377 here |
fb72da59e269
(child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
Richard M. Stallman <rms@gnu.org>
parents:
56479
diff
changeset
|
578 unconditionally. Then a SIGNALS_VIA_CHARACTERS conditional |
fb72da59e269
(child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
Richard M. Stallman <rms@gnu.org>
parents:
56479
diff
changeset
|
579 would force it to 0377. That looks like duplicated code. */ |
fb72da59e269
(child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
Richard M. Stallman <rms@gnu.org>
parents:
56479
diff
changeset
|
580 #ifndef SIGNALS_VIA_CHARACTERS |
3321
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
581 /* QUIT and INTR work better as signals, so disable character forms */ |
56714
ba670a86ca95
(child_setup_tty, init_sys_modes): Use CDISABLE.
Kim F. Storm <storm@cua.dk>
parents:
56696
diff
changeset
|
582 s.main.c_cc[VQUIT] = CDISABLE; |
ba670a86ca95
(child_setup_tty, init_sys_modes): Use CDISABLE.
Kim F. Storm <storm@cua.dk>
parents:
56696
diff
changeset
|
583 s.main.c_cc[VINTR] = CDISABLE; |
3321
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
584 s.main.c_lflag &= ~ISIG; |
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
585 #endif /* no TIOCGPGRP or no TIOCGLTC or no TIOCGETC */ |
56714
ba670a86ca95
(child_setup_tty, init_sys_modes): Use CDISABLE.
Kim F. Storm <storm@cua.dk>
parents:
56696
diff
changeset
|
586 s.main.c_cc[VEOL] = CDISABLE; |
579 | 587 s.main.c_cflag = (s.main.c_cflag & ~CBAUD) | B9600; /* baud rate sanity */ |
491 | 588 #endif /* AIX */ |
589 | |
590 #else /* not HAVE_TERMIO */ | |
579 | 591 |
592 s.main.sg_flags &= ~(ECHO | CRMOD | ANYP | ALLDELAY | RAW | LCASE | |
593 | CBREAK | TANDEM); | |
4952
0c973730e476
(read_input_waiting): Don't mess with meta bit
Richard M. Stallman <rms@gnu.org>
parents:
4916
diff
changeset
|
594 s.main.sg_flags |= LPASS8; |
579 | 595 s.main.sg_erase = 0377; |
596 s.main.sg_kill = 0377; | |
4916
83db42883f64
(child_setup_tty): Make the pty handle 8-bit characters.
Richard M. Stallman <rms@gnu.org>
parents:
4772
diff
changeset
|
597 s.lmode = LLITOUT | s.lmode; /* Don't strip 8th bit */ |
579 | 598 |
491 | 599 #endif /* not HAVE_TERMIO */ |
600 | |
579 | 601 EMACS_SET_TTY (out, &s, 0); |
491 | 602 |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
603 #endif /* not DOS_NT */ |
491 | 604 } |
605 | |
606 #endif /* subprocesses */ | |
4681
6945d02dd725
(stuff_char): Use input_fd.
Richard M. Stallman <rms@gnu.org>
parents:
4643
diff
changeset
|
607 |
491 | 608 /* Record a signal code and the handler for it. */ |
609 struct save_signal | |
610 { | |
611 int code; | |
20348 | 612 SIGTYPE (*handler) P_ ((int)); |
491 | 613 }; |
614 | |
20348 | 615 static void save_signal_handlers P_ ((struct save_signal *)); |
616 static void restore_signal_handlers P_ ((struct save_signal *)); | |
617 | |
491 | 618 /* Suspend the Emacs process; give terminal to its superior. */ |
619 | |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
620 void |
491 | 621 sys_suspend () |
622 { | |
25578
4c9cf2c63703
[macintosh] (stat, fstat, mkdir, rmdir, utime, access)
Richard M. Stallman <rms@gnu.org>
parents:
25453
diff
changeset
|
623 #if defined (SIGTSTP) && !defined (MSDOS) |
491 | 624 |
3826
647bef18618f
Changes for Irix 4.0, tested this time:
Jim Blandy <jimb@redhat.com>
parents:
3797
diff
changeset
|
625 { |
4958
8d58e388e71b
(sys_suspend): Use EMACS_GETPGRP macro.
Richard M. Stallman <rms@gnu.org>
parents:
4952
diff
changeset
|
626 int pgrp = EMACS_GETPGRP (0); |
3826
647bef18618f
Changes for Irix 4.0, tested this time:
Jim Blandy <jimb@redhat.com>
parents:
3797
diff
changeset
|
627 EMACS_KILLPG (pgrp, SIGTSTP); |
647bef18618f
Changes for Irix 4.0, tested this time:
Jim Blandy <jimb@redhat.com>
parents:
3797
diff
changeset
|
628 } |
491 | 629 |
630 #else /* No SIGTSTP */ | |
631 #ifdef USG_JOBCTRL /* If you don't know what this is don't mess with it */ | |
632 ptrace (0, 0, 0, 0); /* set for ptrace - caught by csh */ | |
633 kill (getpid (), SIGQUIT); | |
634 | |
635 #else /* No SIGTSTP or USG_JOBCTRL */ | |
636 | |
637 /* On a system where suspending is not implemented, | |
638 instead fork a subshell and let it talk directly to the terminal | |
639 while we wait. */ | |
6102
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
640 sys_subshell (); |
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
641 |
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
642 #endif /* no USG_JOBCTRL */ |
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
643 #endif /* no SIGTSTP */ |
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
644 } |
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
645 |
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
646 /* Fork a subshell. */ |
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
647 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
648 void |
6102
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
649 sys_subshell () |
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
650 { |
19699
ce0b47a57e23
(sys_subshell) [DOS_NT]: Save and restore parent's
Geoff Voelker <voelker@cs.washington.edu>
parents:
19639
diff
changeset
|
651 #ifdef DOS_NT /* Demacs 1.1.2 91/10/20 Manabu Higashida */ |
6102
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
652 int st; |
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
653 char oldwd[MAXPATHLEN+1]; /* Fixed length is safe on MSDOS. */ |
a92ee78acd12
(sys_subshell): New function, split from sys_suspend.
Karl Heuer <kwzh@gnu.org>
parents:
5972
diff
changeset
|
654 #endif |
8285
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
655 int pid; |
491 | 656 struct save_signal saved_handlers[5]; |
8285
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
657 Lisp_Object dir; |
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
658 unsigned char *str = 0; |
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
659 int len; |
491 | 660 |
661 saved_handlers[0].code = SIGINT; | |
662 saved_handlers[1].code = SIGQUIT; | |
663 saved_handlers[2].code = SIGTERM; | |
664 #ifdef SIGIO | |
665 saved_handlers[3].code = SIGIO; | |
666 saved_handlers[4].code = 0; | |
667 #else | |
668 saved_handlers[3].code = 0; | |
669 #endif | |
670 | |
8285
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
671 /* Mentioning current_buffer->buffer would mean including buffer.h, |
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
672 which somehow wedges the hp compiler. So instead... */ |
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
673 |
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
674 dir = intern ("default-directory"); |
9426
4dd2d351ea53
(sys_subshell): Use NILP macro directly, not its expansion. Previous code was
Karl Heuer <kwzh@gnu.org>
parents:
9279
diff
changeset
|
675 if (NILP (Fboundp (dir))) |
8285
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
676 goto xyzzy; |
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
677 dir = Fsymbol_value (dir); |
9110
c0eefdfd11f4
(sys_subshell): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9082
diff
changeset
|
678 if (!STRINGP (dir)) |
8285
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
679 goto xyzzy; |
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
680 |
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
681 dir = expand_and_dir_to_file (Funhandled_file_name_directory (dir), Qnil); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46298
diff
changeset
|
682 str = (unsigned char *) alloca (SCHARS (dir) + 2); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46298
diff
changeset
|
683 len = SCHARS (dir); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46298
diff
changeset
|
684 bcopy (SDATA (dir), str, len); |
8285
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
685 if (str[len - 1] != '/') str[len++] = '/'; |
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
686 str[len] = 0; |
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
687 xyzzy: |
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
688 |
19699
ce0b47a57e23
(sys_subshell) [DOS_NT]: Save and restore parent's
Geoff Voelker <voelker@cs.washington.edu>
parents:
19639
diff
changeset
|
689 #ifdef DOS_NT |
12988
4ccd1ffa8b33
(sys_subshell) [MSDOS]: Handle SUSPEND env var.
Richard M. Stallman <rms@gnu.org>
parents:
12547
diff
changeset
|
690 pid = 0; |
14991
0147f1c8cd2c
(sys_subshell): Add conditionals for DJGPP v2.
Richard M. Stallman <rms@gnu.org>
parents:
14971
diff
changeset
|
691 #if __DJGPP__ > 1 |
0147f1c8cd2c
(sys_subshell): Add conditionals for DJGPP v2.
Richard M. Stallman <rms@gnu.org>
parents:
14971
diff
changeset
|
692 save_signal_handlers (saved_handlers); |
0147f1c8cd2c
(sys_subshell): Add conditionals for DJGPP v2.
Richard M. Stallman <rms@gnu.org>
parents:
14971
diff
changeset
|
693 synch_process_alive = 1; |
0147f1c8cd2c
(sys_subshell): Add conditionals for DJGPP v2.
Richard M. Stallman <rms@gnu.org>
parents:
14971
diff
changeset
|
694 #endif /* __DJGPP__ > 1 */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
695 #else |
8285
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
696 pid = vfork (); |
491 | 697 if (pid == -1) |
698 error ("Can't spawn subshell"); | |
12988
4ccd1ffa8b33
(sys_subshell) [MSDOS]: Handle SUSPEND env var.
Richard M. Stallman <rms@gnu.org>
parents:
12547
diff
changeset
|
699 #endif |
4ccd1ffa8b33
(sys_subshell) [MSDOS]: Handle SUSPEND env var.
Richard M. Stallman <rms@gnu.org>
parents:
12547
diff
changeset
|
700 |
491 | 701 if (pid == 0) |
702 { | |
12988
4ccd1ffa8b33
(sys_subshell) [MSDOS]: Handle SUSPEND env var.
Richard M. Stallman <rms@gnu.org>
parents:
12547
diff
changeset
|
703 char *sh = 0; |
491 | 704 |
19699
ce0b47a57e23
(sys_subshell) [DOS_NT]: Save and restore parent's
Geoff Voelker <voelker@cs.washington.edu>
parents:
19639
diff
changeset
|
705 #ifdef DOS_NT /* MW, Aug 1993 */ |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
706 getwd (oldwd); |
12988
4ccd1ffa8b33
(sys_subshell) [MSDOS]: Handle SUSPEND env var.
Richard M. Stallman <rms@gnu.org>
parents:
12547
diff
changeset
|
707 if (sh == 0) |
4ccd1ffa8b33
(sys_subshell) [MSDOS]: Handle SUSPEND env var.
Richard M. Stallman <rms@gnu.org>
parents:
12547
diff
changeset
|
708 sh = (char *) egetenv ("SUSPEND"); /* KFS, 1994-12-14 */ |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
709 #endif |
12988
4ccd1ffa8b33
(sys_subshell) [MSDOS]: Handle SUSPEND env var.
Richard M. Stallman <rms@gnu.org>
parents:
12547
diff
changeset
|
710 if (sh == 0) |
4ccd1ffa8b33
(sys_subshell) [MSDOS]: Handle SUSPEND env var.
Richard M. Stallman <rms@gnu.org>
parents:
12547
diff
changeset
|
711 sh = (char *) egetenv ("SHELL"); |
491 | 712 if (sh == 0) |
713 sh = "sh"; | |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
714 |
491 | 715 /* Use our buffer's default directory for the subshell. */ |
8285
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
716 if (str) |
22336
0af99a2dc706
(sys_subshell): Cast arg to chdir.
Karl Heuer <kwzh@gnu.org>
parents:
21843
diff
changeset
|
717 chdir ((char *) str); |
8285
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
718 |
491 | 719 #ifdef subprocesses |
720 close_process_descs (); /* Close Emacs's pipes/ptys */ | |
721 #endif | |
1203
bc1acd76b294
* sysdep.c (sys_suspend): Don't try to use "nice (- nice (0))" to
Jim Blandy <jimb@redhat.com>
parents:
1171
diff
changeset
|
722 |
7482
8193d122cf6e
(sys_subshell): PRIO_PROCESS renamed to SET_EMACS_PRIORITY.
Richard M. Stallman <rms@gnu.org>
parents:
7326
diff
changeset
|
723 #ifdef SET_EMACS_PRIORITY |
1203
bc1acd76b294
* sysdep.c (sys_suspend): Don't try to use "nice (- nice (0))" to
Jim Blandy <jimb@redhat.com>
parents:
1171
diff
changeset
|
724 { |
43713
f92c4d87863a
Change defvar_int def and vars to use EMACS_INT instead of just int.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43708
diff
changeset
|
725 extern EMACS_INT emacs_priority; |
1203
bc1acd76b294
* sysdep.c (sys_suspend): Don't try to use "nice (- nice (0))" to
Jim Blandy <jimb@redhat.com>
parents:
1171
diff
changeset
|
726 |
7482
8193d122cf6e
(sys_subshell): PRIO_PROCESS renamed to SET_EMACS_PRIORITY.
Richard M. Stallman <rms@gnu.org>
parents:
7326
diff
changeset
|
727 if (emacs_priority < 0) |
1203
bc1acd76b294
* sysdep.c (sys_suspend): Don't try to use "nice (- nice (0))" to
Jim Blandy <jimb@redhat.com>
parents:
1171
diff
changeset
|
728 nice (-emacs_priority); |
bc1acd76b294
* sysdep.c (sys_suspend): Don't try to use "nice (- nice (0))" to
Jim Blandy <jimb@redhat.com>
parents:
1171
diff
changeset
|
729 } |
bc1acd76b294
* sysdep.c (sys_suspend): Don't try to use "nice (- nice (0))" to
Jim Blandy <jimb@redhat.com>
parents:
1171
diff
changeset
|
730 #endif |
bc1acd76b294
* sysdep.c (sys_suspend): Don't try to use "nice (- nice (0))" to
Jim Blandy <jimb@redhat.com>
parents:
1171
diff
changeset
|
731 |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
732 #ifdef MSDOS /* Demacs 1.1.2 91/10/20 Manabu Higashida */ |
43706
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
733 { |
43708
8d176857311d
(sys_subshell): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
43706
diff
changeset
|
734 char *epwd = getenv ("PWD"); |
8d176857311d
(sys_subshell): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
43706
diff
changeset
|
735 char old_pwd[MAXPATHLEN+1+4]; |
43706
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
736 |
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
737 /* If PWD is set, pass it with corrected value. */ |
43708
8d176857311d
(sys_subshell): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
43706
diff
changeset
|
738 if (epwd) |
43706
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
739 { |
43708
8d176857311d
(sys_subshell): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
43706
diff
changeset
|
740 strcpy (old_pwd, epwd); |
43706
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
741 if (str[len - 1] == '/') |
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
742 str[len - 1] = '\0'; |
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
743 setenv ("PWD", str, 1); |
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
744 } |
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
745 st = system (sh); |
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
746 chdir (oldwd); |
43708
8d176857311d
(sys_subshell): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
43706
diff
changeset
|
747 if (epwd) |
43706
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
748 putenv (old_pwd); /* restore previous value */ |
009de2eaf047
(sys_subshell) [MSDOS]: If PWD is set in the
Eli Zaretskii <eliz@gnu.org>
parents:
43177
diff
changeset
|
749 } |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
750 #else /* not MSDOS */ |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
751 #ifdef WINDOWSNT |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
752 /* Waits for process completion */ |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
753 pid = _spawnlp (_P_WAIT, sh, sh, NULL); |
19699
ce0b47a57e23
(sys_subshell) [DOS_NT]: Save and restore parent's
Geoff Voelker <voelker@cs.washington.edu>
parents:
19639
diff
changeset
|
754 chdir (oldwd); |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
755 if (pid == -1) |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
756 write (1, "Can't execute subshell", 22); |
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
757 #else /* not WINDOWSNT */ |
59937
89e653e08ed9
(sys_subshell): Properly terminate execlp argument list.
Andreas Schwab <schwab@suse.de>
parents:
58986
diff
changeset
|
758 execlp (sh, sh, (char *) 0); |
491 | 759 write (1, "Can't execute subshell", 22); |
760 _exit (1); | |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
761 #endif /* not WINDOWSNT */ |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
762 #endif /* not MSDOS */ |
491 | 763 } |
764 | |
14991
0147f1c8cd2c
(sys_subshell): Add conditionals for DJGPP v2.
Richard M. Stallman <rms@gnu.org>
parents:
14971
diff
changeset
|
765 /* Do this now if we did not do it before. */ |
0147f1c8cd2c
(sys_subshell): Add conditionals for DJGPP v2.
Richard M. Stallman <rms@gnu.org>
parents:
14971
diff
changeset
|
766 #if !defined (MSDOS) || __DJGPP__ == 1 |
491 | 767 save_signal_handlers (saved_handlers); |
2939
34492be68ced
* sysdep.c (sys_suspend): Set synch_process_alive, so that
Jim Blandy <jimb@redhat.com>
parents:
2913
diff
changeset
|
768 synch_process_alive = 1; |
14991
0147f1c8cd2c
(sys_subshell): Add conditionals for DJGPP v2.
Richard M. Stallman <rms@gnu.org>
parents:
14971
diff
changeset
|
769 #endif |
0147f1c8cd2c
(sys_subshell): Add conditionals for DJGPP v2.
Richard M. Stallman <rms@gnu.org>
parents:
14971
diff
changeset
|
770 |
19699
ce0b47a57e23
(sys_subshell) [DOS_NT]: Save and restore parent's
Geoff Voelker <voelker@cs.washington.edu>
parents:
19639
diff
changeset
|
771 #ifndef DOS_NT |
491 | 772 wait_for_termination (pid); |
12988
4ccd1ffa8b33
(sys_subshell) [MSDOS]: Handle SUSPEND env var.
Richard M. Stallman <rms@gnu.org>
parents:
12547
diff
changeset
|
773 #endif |
491 | 774 restore_signal_handlers (saved_handlers); |
14991
0147f1c8cd2c
(sys_subshell): Add conditionals for DJGPP v2.
Richard M. Stallman <rms@gnu.org>
parents:
14971
diff
changeset
|
775 synch_process_alive = 0; |
32752
923b8d6d8277
Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents:
32236
diff
changeset
|
776 } |
491 | 777 |
20348 | 778 static void |
491 | 779 save_signal_handlers (saved_handlers) |
780 struct save_signal *saved_handlers; | |
781 { | |
782 while (saved_handlers->code) | |
783 { | |
692 | 784 saved_handlers->handler |
20348 | 785 = (SIGTYPE (*) P_ ((int))) signal (saved_handlers->code, SIG_IGN); |
491 | 786 saved_handlers++; |
787 } | |
788 } | |
789 | |
20348 | 790 static void |
491 | 791 restore_signal_handlers (saved_handlers) |
792 struct save_signal *saved_handlers; | |
793 { | |
794 while (saved_handlers->code) | |
795 { | |
796 signal (saved_handlers->code, saved_handlers->handler); | |
797 saved_handlers++; | |
798 } | |
799 } | |
800 | |
82995
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
801 #ifndef SIGIO |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
802 /* If SIGIO is broken, don't do anything. */ |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
803 void |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
804 init_sigio (int fd) |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
805 { |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
806 } |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
807 |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
808 void |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
809 reset_sigio (int fd) |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
810 { |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
811 } |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
812 |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
813 void |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
814 request_sigio (void) |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
815 { |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
816 } |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
817 |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
818 void |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
819 unrequest_sigio (void) |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
820 { |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
821 } |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
822 |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
823 #else |
491 | 824 #ifdef F_SETFL |
825 | |
82988
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
826 int old_fcntl_flags[MAXDESC]; |
491 | 827 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
828 void |
9688
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
829 init_sigio (fd) |
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
830 int fd; |
491 | 831 { |
832 #ifdef FASYNC | |
82988
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
833 old_fcntl_flags[fd] = fcntl (fd, F_GETFL, 0) & ~FASYNC; |
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
834 fcntl (fd, F_SETFL, old_fcntl_flags[fd] | FASYNC); |
491 | 835 #endif |
9688
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
836 interrupts_deferred = 0; |
491 | 837 } |
838 | |
20379
e6db4b8d2834
(reset_sigio): Return void.
Andreas Schwab <schwab@suse.de>
parents:
20367
diff
changeset
|
839 void |
53341 | 840 reset_sigio (fd) |
841 int fd; | |
491 | 842 { |
82995
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
843 #ifdef FASYNC |
82988
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
844 fcntl (fd, F_SETFL, old_fcntl_flags[fd]); |
82995
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
845 #endif |
491 | 846 } |
847 | |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3559
diff
changeset
|
848 #ifdef FASYNC /* F_SETFL does not imply existence of FASYNC */ |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
849 /* XXX Uhm, FASYNC is not used anymore here. */ |
83385
1cd4072747c6
Merged from miles@gnu.org--gnu-2005 (patch 593-595)
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
850 /* XXX Yeah, but you need it for SIGIO, don't you? */ |
491 | 851 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
852 void |
491 | 853 request_sigio () |
854 { | |
83454
845a93c68e9a
Fix C-g during `make-network-process'. (Reported by Mark Plaksin.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83431
diff
changeset
|
855 if (noninteractive) |
9688
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
856 return; |
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
857 |
491 | 858 #ifdef SIGWINCH |
638 | 859 sigunblock (sigmask (SIGWINCH)); |
491 | 860 #endif |
53341 | 861 sigunblock (sigmask (SIGIO)); |
491 | 862 |
863 interrupts_deferred = 0; | |
864 } | |
865 | |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
866 void |
53341 | 867 unrequest_sigio (void) |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
868 { |
83454
845a93c68e9a
Fix C-g during `make-network-process'. (Reported by Mark Plaksin.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83431
diff
changeset
|
869 if (noninteractive) |
9688
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
870 return; |
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
871 |
83454
845a93c68e9a
Fix C-g during `make-network-process'. (Reported by Mark Plaksin.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83431
diff
changeset
|
872 #if 0 /* XXX What's wrong with blocking SIGIO under X? */ |
845a93c68e9a
Fix C-g during `make-network-process'. (Reported by Mark Plaksin.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83431
diff
changeset
|
873 if (x_display_list) |
9688
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
874 return; |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
875 #endif |
83454
845a93c68e9a
Fix C-g during `make-network-process'. (Reported by Mark Plaksin.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83431
diff
changeset
|
876 |
491 | 877 #ifdef SIGWINCH |
638 | 878 sigblock (sigmask (SIGWINCH)); |
491 | 879 #endif |
53341 | 880 sigblock (sigmask (SIGIO)); |
491 | 881 interrupts_deferred = 1; |
882 } | |
883 | |
884 #else /* no FASYNC */ | |
46952
2ff6f626f0ce
[MSDOS]: Don't define request_sigio and
Eli Zaretskii <eliz@gnu.org>
parents:
46922
diff
changeset
|
885 #ifndef MSDOS |
5594
f97415a8cf41
(request_sigio, unrequest_sigio): Add new versions of
Richard M. Stallman <rms@gnu.org>
parents:
5573
diff
changeset
|
886 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
887 void |
491 | 888 request_sigio () |
889 { | |
66065
6345e0814501
(request_sigio, unrequest_sigio): Do nothing in
Andreas Schwab <schwab@suse.de>
parents:
65657
diff
changeset
|
890 if (noninteractive || read_socket_hook) |
9688
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
891 return; |
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
892 |
491 | 893 croak ("request_sigio"); |
894 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
895 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
896 void |
491 | 897 unrequest_sigio () |
898 { | |
66065
6345e0814501
(request_sigio, unrequest_sigio): Do nothing in
Andreas Schwab <schwab@suse.de>
parents:
65657
diff
changeset
|
899 if (noninteractive || read_socket_hook) |
9688
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
900 return; |
31f317386c4c
Never use input_fd if using X.
Richard M. Stallman <rms@gnu.org>
parents:
9651
diff
changeset
|
901 |
491 | 902 croak ("unrequest_sigio"); |
903 } | |
46952
2ff6f626f0ce
[MSDOS]: Don't define request_sigio and
Eli Zaretskii <eliz@gnu.org>
parents:
46922
diff
changeset
|
904 |
2ff6f626f0ce
[MSDOS]: Don't define request_sigio and
Eli Zaretskii <eliz@gnu.org>
parents:
46922
diff
changeset
|
905 #endif /* MSDOS */ |
491 | 906 #endif /* FASYNC */ |
907 #endif /* F_SETFL */ | |
82995
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
908 #endif /* SIGIO */ |
491 | 909 |
3655
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
910 /* Saving and restoring the process group of Emacs's terminal. */ |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
911 |
5964
1b850ec1a5e2
(init_sys_modes, reset_sys_modes): Test BSD_PGRPS.
Richard M. Stallman <rms@gnu.org>
parents:
5960
diff
changeset
|
912 #ifdef BSD_PGRPS |
3655
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
913 |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
914 /* The process group of which Emacs was a member when it initially |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
915 started. |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
916 |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
917 If Emacs was in its own process group (i.e. inherited_pgroup == |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
918 getpid ()), then we know we're running under a shell with job |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
919 control (Emacs would never be run as part of a pipeline). |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
920 Everything is fine. |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
921 |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
922 If Emacs was not in its own process group, then we know we're |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
923 running under a shell (or a caller) that doesn't know how to |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
924 separate itself from Emacs (like sh). Emacs must be in its own |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
925 process group in order to receive SIGIO correctly. In this |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
926 situation, we put ourselves in our own pgroup, forcibly set the |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
927 tty's pgroup to our pgroup, and make sure to restore and reinstate |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
928 the tty's pgroup just like any other terminal setting. If |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
929 inherited_group was not the tty's pgroup, then we'll get a |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
930 SIGTTmumble when we try to change the tty's pgroup, and a CONT if |
83035
fcf6fc349e0d
Don't hang on the tty if called from a shell script.
Karoly Lorentey <lorentey@elte.hu>
parents:
83031
diff
changeset
|
931 it goes foreground in the future, which is what should happen. |
fcf6fc349e0d
Don't hang on the tty if called from a shell script.
Karoly Lorentey <lorentey@elte.hu>
parents:
83031
diff
changeset
|
932 |
fcf6fc349e0d
Don't hang on the tty if called from a shell script.
Karoly Lorentey <lorentey@elte.hu>
parents:
83031
diff
changeset
|
933 This variable is initialized in emacs.c. */ |
3655
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
934 int inherited_pgroup; |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
935 |
83035
fcf6fc349e0d
Don't hang on the tty if called from a shell script.
Karoly Lorentey <lorentey@elte.hu>
parents:
83031
diff
changeset
|
936 /* Split off the foreground process group to Emacs alone. When we are |
fcf6fc349e0d
Don't hang on the tty if called from a shell script.
Karoly Lorentey <lorentey@elte.hu>
parents:
83031
diff
changeset
|
937 in the foreground, but not started in our own process group, |
fcf6fc349e0d
Don't hang on the tty if called from a shell script.
Karoly Lorentey <lorentey@elte.hu>
parents:
83031
diff
changeset
|
938 redirect the tty device handle FD to point to our own process |
fcf6fc349e0d
Don't hang on the tty if called from a shell script.
Karoly Lorentey <lorentey@elte.hu>
parents:
83031
diff
changeset
|
939 group. We need to be in our own process group to receive SIGIO |
fcf6fc349e0d
Don't hang on the tty if called from a shell script.
Karoly Lorentey <lorentey@elte.hu>
parents:
83031
diff
changeset
|
940 properly. */ |
84956
29a2854dd601
(narrow_foreground_group, widen_foreground_group): Static.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84848
diff
changeset
|
941 static void |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
942 narrow_foreground_group (int fd) |
3655
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
943 { |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
944 int me = getpid (); |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
945 |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
946 setpgrp (0, inherited_pgroup); |
83266
e5edfda9b768
Don't abort with GTK when a tty is opened.
Karoly Lorentey <lorentey@elte.hu>
parents:
83250
diff
changeset
|
947 #if 0 |
e5edfda9b768
Don't abort with GTK when a tty is opened.
Karoly Lorentey <lorentey@elte.hu>
parents:
83250
diff
changeset
|
948 /* XXX inherited_pgroup should not be zero here, but GTK seems to |
e5edfda9b768
Don't abort with GTK when a tty is opened.
Karoly Lorentey <lorentey@elte.hu>
parents:
83250
diff
changeset
|
949 mess this up. */ |
82988
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
950 if (! inherited_pgroup) |
83035
fcf6fc349e0d
Don't hang on the tty if called from a shell script.
Karoly Lorentey <lorentey@elte.hu>
parents:
83031
diff
changeset
|
951 abort (); /* Should not happen. */ |
83266
e5edfda9b768
Don't abort with GTK when a tty is opened.
Karoly Lorentey <lorentey@elte.hu>
parents:
83250
diff
changeset
|
952 #endif |
3655
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
953 if (inherited_pgroup != me) |
83035
fcf6fc349e0d
Don't hang on the tty if called from a shell script.
Karoly Lorentey <lorentey@elte.hu>
parents:
83031
diff
changeset
|
954 EMACS_SET_TTY_PGRP (fd, &me); /* XXX This only works on the controlling tty. */ |
3655
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
955 setpgrp (0, me); |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
956 } |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
957 |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
958 /* Set the tty to our original foreground group. */ |
84956
29a2854dd601
(narrow_foreground_group, widen_foreground_group): Static.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84848
diff
changeset
|
959 static void |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
960 widen_foreground_group (int fd) |
3655
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
961 { |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
962 if (inherited_pgroup != getpid ()) |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
963 EMACS_SET_TTY_PGRP (fd, &inherited_pgroup); |
3655
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
964 setpgrp (0, inherited_pgroup); |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
965 } |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
966 |
5964
1b850ec1a5e2
(init_sys_modes, reset_sys_modes): Test BSD_PGRPS.
Richard M. Stallman <rms@gnu.org>
parents:
5960
diff
changeset
|
967 #endif /* BSD_PGRPS */ |
3655
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
968 |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
969 /* Getting and setting emacs_tty structures. */ |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
970 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
971 /* Set *TC to the parameters associated with the terminal FD. |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
972 Return zero if all's well, or -1 if we ran into an error we |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
973 couldn't deal with. */ |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
974 int |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
975 emacs_get_tty (fd, settings) |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
976 int fd; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
977 struct emacs_tty *settings; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
978 { |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
979 /* Retrieve the primary parameters - baud rate, character size, etcetera. */ |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
980 #ifdef HAVE_TCATTR |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
981 /* We have those nifty POSIX tcmumbleattr functions. */ |
21843
600f19764b68
(emacs_get_tty): Zero out termios structure before
Andreas Schwab <schwab@suse.de>
parents:
21769
diff
changeset
|
982 bzero (&settings->main, sizeof (settings->main)); |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
983 if (tcgetattr (fd, &settings->main) < 0) |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
984 return -1; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
985 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
986 #else |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
987 #ifdef HAVE_TERMIO |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
988 /* The SYSV-style interface? */ |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
989 if (ioctl (fd, TCGETA, &settings->main) < 0) |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
990 return -1; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
991 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
992 #else |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
993 #ifndef DOS_NT |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
994 /* I give up - I hope you have the BSD ioctls. */ |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
995 if (ioctl (fd, TIOCGETP, &settings->main) < 0) |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
996 return -1; |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
997 #endif /* not DOS_NT */ |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
998 #endif |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
999 #endif |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1000 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1001 /* Suivant - Do we have to get struct ltchars data? */ |
3157
84825e357019
* systty.h (HAVE_LTCHARS, HAVE_TCHARS): New macros; define them if
Jim Blandy <jimb@redhat.com>
parents:
3150
diff
changeset
|
1002 #ifdef HAVE_LTCHARS |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1003 if (ioctl (fd, TIOCGLTC, &settings->ltchars) < 0) |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1004 return -1; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1005 #endif |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1006 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1007 /* How about a struct tchars and a wordful of lmode bits? */ |
3157
84825e357019
* systty.h (HAVE_LTCHARS, HAVE_TCHARS): New macros; define them if
Jim Blandy <jimb@redhat.com>
parents:
3150
diff
changeset
|
1008 #ifdef HAVE_TCHARS |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1009 if (ioctl (fd, TIOCGETC, &settings->tchars) < 0 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1010 || ioctl (fd, TIOCLGET, &settings->lmode) < 0) |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1011 return -1; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1012 #endif |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1013 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1014 /* We have survived the tempest. */ |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1015 return 0; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1016 } |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1017 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1018 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1019 /* Set the parameters of the tty on FD according to the contents of |
12231
c00af359fde5
(emacs_set_tty): Swap TCSETAF and TCSETAW.
Richard M. Stallman <rms@gnu.org>
parents:
12070
diff
changeset
|
1020 *SETTINGS. If FLUSHP is non-zero, we discard input. |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1021 Return 0 if all went well, and -1 if anything failed. */ |
12231
c00af359fde5
(emacs_set_tty): Swap TCSETAF and TCSETAW.
Richard M. Stallman <rms@gnu.org>
parents:
12070
diff
changeset
|
1022 |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1023 int |
12231
c00af359fde5
(emacs_set_tty): Swap TCSETAF and TCSETAW.
Richard M. Stallman <rms@gnu.org>
parents:
12070
diff
changeset
|
1024 emacs_set_tty (fd, settings, flushp) |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1025 int fd; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1026 struct emacs_tty *settings; |
12231
c00af359fde5
(emacs_set_tty): Swap TCSETAF and TCSETAW.
Richard M. Stallman <rms@gnu.org>
parents:
12070
diff
changeset
|
1027 int flushp; |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1028 { |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1029 /* Set the primary parameters - baud rate, character size, etcetera. */ |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1030 #ifdef HAVE_TCATTR |
3321
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1031 int i; |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1032 /* We have those nifty POSIX tcmumbleattr functions. |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1033 William J. Smith <wjs@wiis.wang.com> writes: |
25578
4c9cf2c63703
[macintosh] (stat, fstat, mkdir, rmdir, utime, access)
Richard M. Stallman <rms@gnu.org>
parents:
25453
diff
changeset
|
1034 "POSIX 1003.1 defines tcsetattr to return success if it was |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1035 able to perform any of the requested actions, even if some |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1036 of the requested actions could not be performed. |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1037 We must read settings back to ensure tty setup properly. |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1038 AIX requires this to keep tty from hanging occasionally." */ |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3559
diff
changeset
|
1039 /* This make sure that we don't loop indefinitely in here. */ |
3321
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1040 for (i = 0 ; i < 10 ; i++) |
12231
c00af359fde5
(emacs_set_tty): Swap TCSETAF and TCSETAW.
Richard M. Stallman <rms@gnu.org>
parents:
12070
diff
changeset
|
1041 if (tcsetattr (fd, flushp ? TCSAFLUSH : TCSADRAIN, &settings->main) < 0) |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1042 { |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1043 if (errno == EINTR) |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1044 continue; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1045 else |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1046 return -1; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1047 } |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1048 else |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1049 { |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1050 struct termios new; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1051 |
21843
600f19764b68
(emacs_get_tty): Zero out termios structure before
Andreas Schwab <schwab@suse.de>
parents:
21769
diff
changeset
|
1052 bzero (&new, sizeof (new)); |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1053 /* Get the current settings, and see if they're what we asked for. */ |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1054 tcgetattr (fd, &new); |
3321
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1055 /* We cannot use memcmp on the whole structure here because under |
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1056 * aix386 the termios structure has some reserved field that may |
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1057 * not be filled in. |
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1058 */ |
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1059 if ( new.c_iflag == settings->main.c_iflag |
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1060 && new.c_oflag == settings->main.c_oflag |
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1061 && new.c_cflag == settings->main.c_cflag |
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1062 && new.c_lflag == settings->main.c_lflag |
25578
4c9cf2c63703
[macintosh] (stat, fstat, mkdir, rmdir, utime, access)
Richard M. Stallman <rms@gnu.org>
parents:
25453
diff
changeset
|
1063 && memcmp (new.c_cc, settings->main.c_cc, NCCS) == 0) |
3321
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1064 break; |
d2adfd22a854
(child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install
Richard M. Stallman <rms@gnu.org>
parents:
3301
diff
changeset
|
1065 else |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1066 continue; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1067 } |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1068 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1069 #else |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1070 #ifdef HAVE_TERMIO |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1071 /* The SYSV-style interface? */ |
12231
c00af359fde5
(emacs_set_tty): Swap TCSETAF and TCSETAW.
Richard M. Stallman <rms@gnu.org>
parents:
12070
diff
changeset
|
1072 if (ioctl (fd, flushp ? TCSETAF : TCSETAW, &settings->main) < 0) |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1073 return -1; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1074 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1075 #else |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
1076 #ifndef DOS_NT |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1077 /* I give up - I hope you have the BSD ioctls. */ |
12231
c00af359fde5
(emacs_set_tty): Swap TCSETAF and TCSETAW.
Richard M. Stallman <rms@gnu.org>
parents:
12070
diff
changeset
|
1078 if (ioctl (fd, (flushp) ? TIOCSETP : TIOCSETN, &settings->main) < 0) |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1079 return -1; |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
1080 #endif /* not DOS_NT */ |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1081 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1082 #endif |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1083 #endif |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1084 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1085 /* Suivant - Do we have to get struct ltchars data? */ |
3157
84825e357019
* systty.h (HAVE_LTCHARS, HAVE_TCHARS): New macros; define them if
Jim Blandy <jimb@redhat.com>
parents:
3150
diff
changeset
|
1086 #ifdef HAVE_LTCHARS |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1087 if (ioctl (fd, TIOCSLTC, &settings->ltchars) < 0) |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1088 return -1; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1089 #endif |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1090 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1091 /* How about a struct tchars and a wordful of lmode bits? */ |
3157
84825e357019
* systty.h (HAVE_LTCHARS, HAVE_TCHARS): New macros; define them if
Jim Blandy <jimb@redhat.com>
parents:
3150
diff
changeset
|
1092 #ifdef HAVE_TCHARS |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1093 if (ioctl (fd, TIOCSETC, &settings->tchars) < 0 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1094 || ioctl (fd, TIOCLSET, &settings->lmode) < 0) |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1095 return -1; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1096 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
1097 |
2656
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1098 /* We have survived the tempest. */ |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1099 return 0; |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1100 } |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1101 |
93eda11d38de
* systty.h (EMACS_GET_TTY, EMACS_SET_TTY): Move these into
Jim Blandy <jimb@redhat.com>
parents:
2589
diff
changeset
|
1102 |
491 | 1103 |
1104 #ifdef F_SETOWN | |
82988
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
1105 int old_fcntl_owner[MAXDESC]; |
491 | 1106 #endif /* F_SETOWN */ |
1107 | |
1108 /* This may also be defined in stdio, | |
1109 but if so, this does no harm, | |
1110 and using the same name avoids wasting the other one's space. */ | |
1111 | |
97119
b57392641da7
* systty.h (sensemode): Remove empty #if. Remove reference to
Dan Nicolaescu <dann@ics.uci.edu>
parents:
97043
diff
changeset
|
1112 #if defined (USG) |
491 | 1113 unsigned char _sobuf[BUFSIZ+8]; |
1114 #else | |
1115 char _sobuf[BUFSIZ]; | |
1116 #endif | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
1117 |
3157
84825e357019
* systty.h (HAVE_LTCHARS, HAVE_TCHARS): New macros; define them if
Jim Blandy <jimb@redhat.com>
parents:
3150
diff
changeset
|
1118 #ifdef HAVE_LTCHARS |
491 | 1119 static struct ltchars new_ltchars = {-1,-1,-1,-1,-1,-1}; |
1120 #endif | |
3157
84825e357019
* systty.h (HAVE_LTCHARS, HAVE_TCHARS): New macros; define them if
Jim Blandy <jimb@redhat.com>
parents:
3150
diff
changeset
|
1121 #ifdef HAVE_TCHARS |
17869
a2fefbc6e46b
(init_sys_modes): Initialize Vtty_erase_char if
Richard M. Stallman <rms@gnu.org>
parents:
17108
diff
changeset
|
1122 static struct tchars new_tchars = {-1,-1,-1,-1,-1,-1}; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
1123 #endif |
491 | 1124 |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1125 /* Initialize the terminal mode on all tty devices that are currently |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1126 open. */ |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1127 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
1128 void |
53226
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
53225
diff
changeset
|
1129 init_all_sys_modes (void) |
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
53225
diff
changeset
|
1130 { |
82989
f3845715a5f6
Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
82988
diff
changeset
|
1131 struct tty_display_info *tty; |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
1132 for (tty = tty_list; tty; tty = tty->next) |
53226
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
53225
diff
changeset
|
1133 init_sys_modes (tty); |
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
53225
diff
changeset
|
1134 } |
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
53225
diff
changeset
|
1135 |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1136 /* Initialize the terminal mode on the given tty device. */ |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1137 |
53226
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
53225
diff
changeset
|
1138 void |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1139 init_sys_modes (tty_out) |
82989
f3845715a5f6
Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
82988
diff
changeset
|
1140 struct tty_display_info *tty_out; |
491 | 1141 { |
579 | 1142 struct emacs_tty tty; |
1143 | |
17869
a2fefbc6e46b
(init_sys_modes): Initialize Vtty_erase_char if
Richard M. Stallman <rms@gnu.org>
parents:
17108
diff
changeset
|
1144 Vtty_erase_char = Qnil; |
a2fefbc6e46b
(init_sys_modes): Initialize Vtty_erase_char if
Richard M. Stallman <rms@gnu.org>
parents:
17108
diff
changeset
|
1145 |
491 | 1146 if (noninteractive) |
1147 return; | |
1148 | |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1149 if (!tty_out->output) |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1150 return; /* The tty is suspended. */ |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1151 |
5964
1b850ec1a5e2
(init_sys_modes, reset_sys_modes): Test BSD_PGRPS.
Richard M. Stallman <rms@gnu.org>
parents:
5960
diff
changeset
|
1152 #ifdef BSD_PGRPS |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
1153 #if 0 |
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
1154 /* read_socket_hook is not global anymore. I think doing this |
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
1155 unconditionally will not cause any problems. */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1156 if (! read_socket_hook && EQ (Vinitial_window_system, Qnil)) |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
1157 #endif |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1158 narrow_foreground_group (fileno (tty_out->input)); |
3655
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
1159 #endif |
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
1160 |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1161 if (! tty_out->old_tty) |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1162 tty_out->old_tty = (struct emacs_tty *) xmalloc (sizeof (struct emacs_tty)); |
53233
fe9b37bee5f7
Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
53232
diff
changeset
|
1163 |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1164 EMACS_GET_TTY (fileno (tty_out->input), tty_out->old_tty); |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1165 |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1166 tty = *tty_out->old_tty; |
491 | 1167 |
1927
c6dc1a37aeb4
* sysdep.c (child_setup_tty): Recognize HAVE_TERMIOS as well as
Jim Blandy <jimb@redhat.com>
parents:
1596
diff
changeset
|
1168 #if defined (HAVE_TERMIO) || defined (HAVE_TERMIOS) |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1169 XSETINT (Vtty_erase_char, tty.main.c_cc[VERASE]); |
17869
a2fefbc6e46b
(init_sys_modes): Initialize Vtty_erase_char if
Richard M. Stallman <rms@gnu.org>
parents:
17108
diff
changeset
|
1170 |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1171 tty.main.c_iflag |= (IGNBRK); /* Ignore break condition */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1172 tty.main.c_iflag &= ~ICRNL; /* Disable map of CR to NL on input */ |
14790
70553c545976
(init_sys_modes): Clear INLCR like ICRNL.
Richard M. Stallman <rms@gnu.org>
parents:
14390
diff
changeset
|
1173 #ifdef INLCR /* I'm just being cautious, |
70553c545976
(init_sys_modes): Clear INLCR like ICRNL.
Richard M. Stallman <rms@gnu.org>
parents:
14390
diff
changeset
|
1174 since I can't check how widespread INLCR is--rms. */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1175 tty.main.c_iflag &= ~INLCR; /* Disable map of NL to CR on input */ |
14790
70553c545976
(init_sys_modes): Clear INLCR like ICRNL.
Richard M. Stallman <rms@gnu.org>
parents:
14390
diff
changeset
|
1176 #endif |
491 | 1177 #ifdef ISTRIP |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1178 tty.main.c_iflag &= ~ISTRIP; /* don't strip 8th bit on input */ |
491 | 1179 #endif |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1180 tty.main.c_lflag &= ~ECHO; /* Disable echo */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1181 tty.main.c_lflag &= ~ICANON; /* Disable erase/kill processing */ |
1102
ff73961932eb
(init_sys_modes): Handle VDSUSP like V_DSUSP.
Richard M. Stallman <rms@gnu.org>
parents:
1048
diff
changeset
|
1182 #ifdef IEXTEN |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1183 tty.main.c_lflag &= ~IEXTEN; /* Disable other editing characters. */ |
1102
ff73961932eb
(init_sys_modes): Handle VDSUSP like V_DSUSP.
Richard M. Stallman <rms@gnu.org>
parents:
1048
diff
changeset
|
1184 #endif |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1185 tty.main.c_lflag |= ISIG; /* Enable signals */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1186 if (tty_out->flow_control) |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1187 { |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1188 tty.main.c_iflag |= IXON; /* Enable start/stop output control */ |
491 | 1189 #ifdef IXANY |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1190 tty.main.c_iflag &= ~IXANY; |
491 | 1191 #endif /* IXANY */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1192 } |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1193 else |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1194 tty.main.c_iflag &= ~IXON; /* Disable start/stop output control */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1195 tty.main.c_oflag &= ~ONLCR; /* Disable map of NL to CR-NL |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1196 on output */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1197 tty.main.c_oflag &= ~TAB3; /* Disable tab expansion */ |
491 | 1198 #ifdef CS8 |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1199 if (tty_out->meta_key) |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1200 { |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1201 tty.main.c_cflag |= CS8; /* allow 8th bit on input */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1202 tty.main.c_cflag &= ~PARENB;/* Don't check parity */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1203 } |
491 | 1204 #endif |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1205 if (tty_out->input == stdin) |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1206 { |
579 | 1207 tty.main.c_cc[VINTR] = quit_char; /* C-g (usually) gives SIGINT */ |
491 | 1208 /* Set up C-g for both SIGQUIT and SIGINT. |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1209 We don't know which we will get, but we handle both alike |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1210 so which one it really gives us does not matter. */ |
579 | 1211 tty.main.c_cc[VQUIT] = quit_char; |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1212 } |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1213 else |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1214 { |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1215 /* We normally don't get interrupt or quit signals from tty |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1216 devices other than our controlling terminal; therefore, |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1217 we must handle C-g as normal input. Unfortunately, this |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1218 means that the interrupt and quit feature must be |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1219 disabled on secondary ttys, or we would not even see the |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1220 keypress. |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1221 |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1222 Note that even though emacsclient could have special code |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1223 to pass SIGINT to Emacs, we should _not_ enable |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1224 interrupt/quit keys for emacsclient frames. This means |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1225 that we can't break out of loops in C code from a |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1226 secondary tty frame, but we can always decide what |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1227 display the C-g came from, which is more important from a |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1228 usability point of view. (Consider the case when two |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1229 people work together using the same Emacs instance.) */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1230 tty.main.c_cc[VINTR] = CDISABLE; |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1231 tty.main.c_cc[VQUIT] = CDISABLE; |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1232 } |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1233 tty.main.c_cc[VMIN] = 1; /* Input should wait for at least 1 char */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1234 tty.main.c_cc[VTIME] = 0; /* no matter how long that takes. */ |
491 | 1235 #ifdef VSWTCH |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1236 tty.main.c_cc[VSWTCH] = CDISABLE; /* Turn off shell layering use |
579 | 1237 of C-z */ |
491 | 1238 #endif /* VSWTCH */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1239 |
96877
feac6d588d82
* m/mips.h (LOAD_AVE_TYPE, LOAD_AVE_CVT): Do not define, not used
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96833
diff
changeset
|
1240 #if defined (__mips__) || defined (HAVE_TCATTR) |
491 | 1241 #ifdef VSUSP |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1242 tty.main.c_cc[VSUSP] = CDISABLE; /* Turn off mips handling of C-z. */ |
491 | 1243 #endif /* VSUSP */ |
1244 #ifdef V_DSUSP | |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1245 tty.main.c_cc[V_DSUSP] = CDISABLE; /* Turn off mips handling of C-y. */ |
491 | 1246 #endif /* V_DSUSP */ |
1102
ff73961932eb
(init_sys_modes): Handle VDSUSP like V_DSUSP.
Richard M. Stallman <rms@gnu.org>
parents:
1048
diff
changeset
|
1247 #ifdef VDSUSP /* Some systems have VDSUSP, some have V_DSUSP. */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1248 tty.main.c_cc[VDSUSP] = CDISABLE; |
1102
ff73961932eb
(init_sys_modes): Handle VDSUSP like V_DSUSP.
Richard M. Stallman <rms@gnu.org>
parents:
1048
diff
changeset
|
1249 #endif /* VDSUSP */ |
3472
6f05f6e83e94
(wait_for_termination): Fix sigpause in POSIX_SIGNALS case.
Richard M. Stallman <rms@gnu.org>
parents:
3334
diff
changeset
|
1250 #ifdef VLNEXT |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1251 tty.main.c_cc[VLNEXT] = CDISABLE; |
3472
6f05f6e83e94
(wait_for_termination): Fix sigpause in POSIX_SIGNALS case.
Richard M. Stallman <rms@gnu.org>
parents:
3334
diff
changeset
|
1252 #endif /* VLNEXT */ |
6f05f6e83e94
(wait_for_termination): Fix sigpause in POSIX_SIGNALS case.
Richard M. Stallman <rms@gnu.org>
parents:
3334
diff
changeset
|
1253 #ifdef VREPRINT |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1254 tty.main.c_cc[VREPRINT] = CDISABLE; |
3472
6f05f6e83e94
(wait_for_termination): Fix sigpause in POSIX_SIGNALS case.
Richard M. Stallman <rms@gnu.org>
parents:
3334
diff
changeset
|
1255 #endif /* VREPRINT */ |
6f05f6e83e94
(wait_for_termination): Fix sigpause in POSIX_SIGNALS case.
Richard M. Stallman <rms@gnu.org>
parents:
3334
diff
changeset
|
1256 #ifdef VWERASE |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1257 tty.main.c_cc[VWERASE] = CDISABLE; |
3472
6f05f6e83e94
(wait_for_termination): Fix sigpause in POSIX_SIGNALS case.
Richard M. Stallman <rms@gnu.org>
parents:
3334
diff
changeset
|
1258 #endif /* VWERASE */ |
6f05f6e83e94
(wait_for_termination): Fix sigpause in POSIX_SIGNALS case.
Richard M. Stallman <rms@gnu.org>
parents:
3334
diff
changeset
|
1259 #ifdef VDISCARD |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1260 tty.main.c_cc[VDISCARD] = CDISABLE; |
3472
6f05f6e83e94
(wait_for_termination): Fix sigpause in POSIX_SIGNALS case.
Richard M. Stallman <rms@gnu.org>
parents:
3334
diff
changeset
|
1261 #endif /* VDISCARD */ |
19198
49274b3596a7
(init_sys_modes) [mips || HAVE_TCATTR]:
Richard M. Stallman <rms@gnu.org>
parents:
19023
diff
changeset
|
1262 |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1263 if (tty_out->flow_control) |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1264 { |
8104
5434ea918f34
(init_sys_modes): Turn off VSTART and VSTOP chars. On
Richard M. Stallman <rms@gnu.org>
parents:
7908
diff
changeset
|
1265 #ifdef VSTART |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1266 tty.main.c_cc[VSTART] = '\021'; |
8104
5434ea918f34
(init_sys_modes): Turn off VSTART and VSTOP chars. On
Richard M. Stallman <rms@gnu.org>
parents:
7908
diff
changeset
|
1267 #endif /* VSTART */ |
5434ea918f34
(init_sys_modes): Turn off VSTART and VSTOP chars. On
Richard M. Stallman <rms@gnu.org>
parents:
7908
diff
changeset
|
1268 #ifdef VSTOP |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1269 tty.main.c_cc[VSTOP] = '\023'; |
8104
5434ea918f34
(init_sys_modes): Turn off VSTART and VSTOP chars. On
Richard M. Stallman <rms@gnu.org>
parents:
7908
diff
changeset
|
1270 #endif /* VSTOP */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1271 } |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1272 else |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1273 { |
19198
49274b3596a7
(init_sys_modes) [mips || HAVE_TCATTR]:
Richard M. Stallman <rms@gnu.org>
parents:
19023
diff
changeset
|
1274 #ifdef VSTART |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1275 tty.main.c_cc[VSTART] = CDISABLE; |
19198
49274b3596a7
(init_sys_modes) [mips || HAVE_TCATTR]:
Richard M. Stallman <rms@gnu.org>
parents:
19023
diff
changeset
|
1276 #endif /* VSTART */ |
49274b3596a7
(init_sys_modes) [mips || HAVE_TCATTR]:
Richard M. Stallman <rms@gnu.org>
parents:
19023
diff
changeset
|
1277 #ifdef VSTOP |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1278 tty.main.c_cc[VSTOP] = CDISABLE; |
19198
49274b3596a7
(init_sys_modes) [mips || HAVE_TCATTR]:
Richard M. Stallman <rms@gnu.org>
parents:
19023
diff
changeset
|
1279 #endif /* VSTOP */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1280 } |
491 | 1281 #endif /* mips or HAVE_TCATTR */ |
19198
49274b3596a7
(init_sys_modes) [mips || HAVE_TCATTR]:
Richard M. Stallman <rms@gnu.org>
parents:
19023
diff
changeset
|
1282 |
491 | 1283 #ifdef AIX |
1284 #ifndef IBMR2AIX | |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1285 /* AIX enhanced edit loses NULs, so disable it. */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1286 tty.main.c_line = 0; |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1287 tty.main.c_iflag &= ~ASCEDIT; |
491 | 1288 #else |
83196 | 1289 tty.main.c_cc[VSTRT] = CDISABLE; |
1290 tty.main.c_cc[VSTOP] = CDISABLE; | |
1291 tty.main.c_cc[VSUSP] = CDISABLE; | |
1292 tty.main.c_cc[VDSUSP] = CDISABLE; | |
491 | 1293 #endif /* IBMR2AIX */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1294 if (tty_out->flow_control) |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1295 { |
18232
4183933733e6
(init_sys_modes): Enable VSTART and VSTOP if flow_control.
Richard M. Stallman <rms@gnu.org>
parents:
18095
diff
changeset
|
1296 #ifdef VSTART |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1297 tty.main.c_cc[VSTART] = '\021'; |
18232
4183933733e6
(init_sys_modes): Enable VSTART and VSTOP if flow_control.
Richard M. Stallman <rms@gnu.org>
parents:
18095
diff
changeset
|
1298 #endif /* VSTART */ |
4183933733e6
(init_sys_modes): Enable VSTART and VSTOP if flow_control.
Richard M. Stallman <rms@gnu.org>
parents:
18095
diff
changeset
|
1299 #ifdef VSTOP |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1300 tty.main.c_cc[VSTOP] = '\023'; |
18232
4183933733e6
(init_sys_modes): Enable VSTART and VSTOP if flow_control.
Richard M. Stallman <rms@gnu.org>
parents:
18095
diff
changeset
|
1301 #endif /* VSTOP */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1302 } |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1303 /* Also, PTY overloads NUL and BREAK. |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1304 don't ignore break, but don't signal either, so it looks like NUL. |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1305 This really serves a purpose only if running in an XTERM window |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1306 or via TELNET or the like, but does no harm elsewhere. */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1307 tty.main.c_iflag &= ~IGNBRK; |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1308 tty.main.c_iflag &= ~BRKINT; |
491 | 1309 #endif |
1310 #else /* if not HAVE_TERMIO */ | |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
1311 #ifndef DOS_NT |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1312 XSETINT (Vtty_erase_char, tty.main.sg_erase); |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1313 tty.main.sg_flags &= ~(ECHO | CRMOD | XTABS); |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1314 if (meta_key) |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1315 tty.main.sg_flags |= ANYP; |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1316 tty.main.sg_flags |= interrupt_input ? RAW : CBREAK; |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
1317 #endif /* not DOS_NT */ |
491 | 1318 #endif /* not HAVE_TERMIO */ |
1319 | |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1320 /* If going to use CBREAK mode, we must request C-g to interrupt |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1321 and turn off start and stop chars, etc. If not going to use |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1322 CBREAK mode, do this anyway so as to turn off local flow |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1323 control for user coming over network on 4.2; in this case, |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1324 only t_stopc and t_startc really matter. */ |
579 | 1325 #ifndef HAVE_TERMIO |
3157
84825e357019
* systty.h (HAVE_LTCHARS, HAVE_TCHARS): New macros; define them if
Jim Blandy <jimb@redhat.com>
parents:
3150
diff
changeset
|
1326 #ifdef HAVE_TCHARS |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1327 /* Note: if not using CBREAK mode, it makes no difference how we |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1328 set this */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1329 tty.tchars = new_tchars; |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1330 tty.tchars.t_intrc = quit_char; |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1331 if (tty_out->flow_control) |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1332 { |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1333 tty.tchars.t_startc = '\021'; |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1334 tty.tchars.t_stopc = '\023'; |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1335 } |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1336 |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1337 tty.lmode = LDECCTQ | LLITOUT | LPASS8 | LNOFLSH | tty_out->old_tty.lmode; |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1338 |
3157
84825e357019
* systty.h (HAVE_LTCHARS, HAVE_TCHARS): New macros; define them if
Jim Blandy <jimb@redhat.com>
parents:
3150
diff
changeset
|
1339 #endif /* HAVE_TCHARS */ |
579 | 1340 #endif /* not HAVE_TERMIO */ |
1341 | |
3157
84825e357019
* systty.h (HAVE_LTCHARS, HAVE_TCHARS): New macros; define them if
Jim Blandy <jimb@redhat.com>
parents:
3150
diff
changeset
|
1342 #ifdef HAVE_LTCHARS |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1343 tty.ltchars = new_ltchars; |
3157
84825e357019
* systty.h (HAVE_LTCHARS, HAVE_TCHARS): New macros; define them if
Jim Blandy <jimb@redhat.com>
parents:
3150
diff
changeset
|
1344 #endif /* HAVE_LTCHARS */ |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
1345 #ifdef MSDOS /* Demacs 1.1.2 91/10/20 Manabu Higashida, MW Aug 1993 */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1346 if (!tty_out->term_initted) |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1347 internal_terminal_init (); |
97652
d711e8ee1f6b
(init_sys_modes): Call dos_ttraw with tty_out as argument.
Eli Zaretskii <eliz@gnu.org>
parents:
97142
diff
changeset
|
1348 dos_ttraw (tty_out); |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
1349 #endif |
579 | 1350 |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1351 EMACS_SET_TTY (fileno (tty_out->input), &tty, 0); |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1352 |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1353 /* This code added to insure that, if flow-control is not to be used, |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1354 we have an unlocked terminal at the start. */ |
579 | 1355 |
491 | 1356 #ifdef TCXONC |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1357 if (!tty_out->flow_control) ioctl (fileno (tty_out->input), TCXONC, 1); |
491 | 1358 #endif |
1359 #ifdef TIOCSTART | |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1360 if (!tty_out->flow_control) ioctl (fileno (tty_out->input), TIOCSTART, 0); |
491 | 1361 #endif |
1362 | |
96303 | 1363 #if defined (HAVE_TERMIOS) || defined (HPUX) |
11258
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
1364 #ifdef TCOON |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1365 if (!tty_out->flow_control) tcflow (fileno (tty_out->input), TCOON); |
9937
cd2db9aeeb25
(init_sys_modes): Maybe call tcflow.
Richard M. Stallman <rms@gnu.org>
parents:
9794
diff
changeset
|
1366 #endif |
11258
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
1367 #endif |
9937
cd2db9aeeb25
(init_sys_modes): Maybe call tcflow.
Richard M. Stallman <rms@gnu.org>
parents:
9794
diff
changeset
|
1368 |
491 | 1369 #ifdef F_SETFL |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3559
diff
changeset
|
1370 #ifdef F_GETOWN /* F_SETFL does not imply existence of F_GETOWN */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1371 if (interrupt_input) |
491 | 1372 { |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1373 old_fcntl_owner[fileno (tty_out->input)] = |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1374 fcntl (fileno (tty_out->input), F_GETOWN, 0); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1375 fcntl (fileno (tty_out->input), F_SETOWN, getpid ()); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1376 init_sigio (fileno (tty_out->input)); |
80994
62b6aa7f8c37
Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents:
80981
diff
changeset
|
1377 #ifdef HAVE_GPM |
84956
29a2854dd601
(narrow_foreground_group, widen_foreground_group): Static.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84848
diff
changeset
|
1378 if (gpm_tty == tty_out) |
80981
f454fb9563fd
(init_sys_modes): Make gpm_fd nonblocking
Nick Roberts <nickrob@snap.net.nz>
parents:
77349
diff
changeset
|
1379 { |
84956
29a2854dd601
(narrow_foreground_group, widen_foreground_group): Static.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84848
diff
changeset
|
1380 /* Arrange for mouse events to give us SIGIO signals. */ |
80981
f454fb9563fd
(init_sys_modes): Make gpm_fd nonblocking
Nick Roberts <nickrob@snap.net.nz>
parents:
77349
diff
changeset
|
1381 fcntl (gpm_fd, F_SETOWN, getpid ()); |
81105
1f40aca3eadc
(init_sys_modes): Add rather than replace with
Nick Roberts <nickrob@snap.net.nz>
parents:
80994
diff
changeset
|
1382 fcntl (gpm_fd, F_SETFL, fcntl (gpm_fd, F_GETFL, 0) | O_NONBLOCK); |
80981
f454fb9563fd
(init_sys_modes): Make gpm_fd nonblocking
Nick Roberts <nickrob@snap.net.nz>
parents:
77349
diff
changeset
|
1383 init_sigio (gpm_fd); |
f454fb9563fd
(init_sys_modes): Make gpm_fd nonblocking
Nick Roberts <nickrob@snap.net.nz>
parents:
77349
diff
changeset
|
1384 } |
80994
62b6aa7f8c37
Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents:
80981
diff
changeset
|
1385 #endif /* HAVE_GPM */ |
491 | 1386 } |
1387 #endif /* F_GETOWN */ | |
1388 #endif /* F_SETFL */ | |
1389 | |
1390 #ifdef _IOFBF | |
1391 /* This symbol is defined on recent USG systems. | |
1392 Someone says without this call USG won't really buffer the file | |
1393 even with a call to setbuf. */ | |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1394 setvbuf (tty_out->output, (char *) _sobuf, _IOFBF, sizeof _sobuf); |
491 | 1395 #else |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1396 setbuf (tty_out->output, (char *) _sobuf); |
491 | 1397 #endif |
82995
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82990
diff
changeset
|
1398 |
84848
d8f4346c8ee1
(init_sys_modes): Use set_terminal_modes_hook.
Jason Rumney <jasonr@gnu.org>
parents:
84768
diff
changeset
|
1399 if (tty_out->terminal->set_terminal_modes_hook) |
d8f4346c8ee1
(init_sys_modes): Use set_terminal_modes_hook.
Jason Rumney <jasonr@gnu.org>
parents:
84768
diff
changeset
|
1400 tty_out->terminal->set_terminal_modes_hook (tty_out->terminal); |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1401 |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1402 if (!tty_out->term_initted) |
491 | 1403 { |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1404 Lisp_Object tail, frame; |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1405 FOR_EACH_FRAME (tail, frame) |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1406 { |
82990
2ecd1f669db9
Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents:
82989
diff
changeset
|
1407 /* XXX This needs to be revised. */ |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1408 if (FRAME_TERMCAP_P (XFRAME (frame)) |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1409 && FRAME_TTY (XFRAME (frame)) == tty_out) |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1410 init_frame_faces (XFRAME (frame)); |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1411 } |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1412 } |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1413 |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1414 if (tty_out->term_initted && no_redraw_on_reenter) |
491 | 1415 { |
83318
666b48e39a5a
Work around mysterious breakage of arrow key recognition under screen (see first TODO in README).
Karoly Lorentey <lorentey@elte.hu>
parents:
83296
diff
changeset
|
1416 /* XXX This seems wrong on multi-tty. */ |
491 | 1417 if (display_completed) |
1418 direct_output_forward_char (0); | |
1419 } | |
1420 else | |
1421 { | |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1422 Lisp_Object tail, frame; |
766 | 1423 frame_garbaged = 1; |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1424 FOR_EACH_FRAME (tail, frame) |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1425 { |
98505
47fd5fc61588
(init_sys_modes): Set FRAME_GARBAGED_P for MSDOS frames as well as for TTY.
Eli Zaretskii <eliz@gnu.org>
parents:
97652
diff
changeset
|
1426 if ((FRAME_TERMCAP_P (XFRAME (frame)) |
47fd5fc61588
(init_sys_modes): Set FRAME_GARBAGED_P for MSDOS frames as well as for TTY.
Eli Zaretskii <eliz@gnu.org>
parents:
97652
diff
changeset
|
1427 || FRAME_MSDOS_P (XFRAME (frame))) |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1428 && FRAME_TTY (XFRAME (frame)) == tty_out) |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1429 FRAME_GARBAGED_P (XFRAME (frame)) = 1; |
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1430 } |
491 | 1431 } |
579 | 1432 |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1433 tty_out->term_initted = 1; |
491 | 1434 } |
1435 | |
1436 /* Return nonzero if safe to use tabs in output. | |
1437 At the time this is called, init_sys_modes has not been done yet. */ | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
1438 |
21514 | 1439 int |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
1440 tabs_safe_p (int fd) |
491 | 1441 { |
53232
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53231
diff
changeset
|
1442 struct emacs_tty etty; |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53231
diff
changeset
|
1443 |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
1444 EMACS_GET_TTY (fd, &etty); |
53232
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53231
diff
changeset
|
1445 return EMACS_TTY_TABS_OK (&etty); |
491 | 1446 } |
6829
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1447 |
491 | 1448 /* Get terminal size from system. |
6829
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1449 Store number of lines into *HEIGHTP and width into *WIDTHP. |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1450 We store 0 if there's no valid information. */ |
491 | 1451 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
1452 void |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
1453 get_tty_size (int fd, int *widthp, int *heightp) |
491 | 1454 { |
579 | 1455 |
1456 #ifdef TIOCGWINSZ | |
1457 | |
1458 /* BSD-style. */ | |
1459 struct winsize size; | |
1460 | |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
1461 if (ioctl (fd, TIOCGWINSZ, &size) == -1) |
579 | 1462 *widthp = *heightp = 0; |
1463 else | |
1464 { | |
1465 *widthp = size.ws_col; | |
1466 *heightp = size.ws_row; | |
1467 } | |
1468 | |
1469 #else | |
491 | 1470 #ifdef TIOCGSIZE |
579 | 1471 |
1472 /* SunOS - style. */ | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
1473 struct ttysize size; |
579 | 1474 |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
1475 if (ioctl (fd, TIOCGSIZE, &size) == -1) |
579 | 1476 *widthp = *heightp = 0; |
1477 else | |
1478 { | |
1479 *widthp = size.ts_cols; | |
1480 *heightp = size.ts_lines; | |
1481 } | |
1482 | |
1483 #else | |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
1484 #ifdef MSDOS |
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
1485 *widthp = ScreenCols (); |
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
1486 *heightp = ScreenRows (); |
491 | 1487 #else /* system doesn't know size */ |
1488 *widthp = 0; | |
1489 *heightp = 0; | |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
1490 #endif |
579 | 1491 #endif /* not SunOS-style */ |
1492 #endif /* not BSD-style */ | |
491 | 1493 } |
579 | 1494 |
6829
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1495 /* Set the logical window size associated with descriptor FD |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1496 to HEIGHT and WIDTH. This is used mainly with ptys. */ |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1497 |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1498 int |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1499 set_window_size (fd, height, width) |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1500 int fd, height, width; |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1501 { |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1502 #ifdef TIOCSWINSZ |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1503 |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1504 /* BSD-style. */ |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1505 struct winsize size; |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1506 size.ws_row = height; |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1507 size.ws_col = width; |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1508 |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1509 if (ioctl (fd, TIOCSWINSZ, &size) == -1) |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1510 return 0; /* error */ |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1511 else |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1512 return 1; |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1513 |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1514 #else |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1515 #ifdef TIOCSSIZE |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1516 |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1517 /* SunOS - style. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
1518 struct ttysize size; |
6829
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1519 size.ts_lines = height; |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1520 size.ts_cols = width; |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1521 |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1522 if (ioctl (fd, TIOCGSIZE, &size) == -1) |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1523 return 0; |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1524 else |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1525 return 1; |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1526 #else |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1527 return -1; |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1528 #endif /* not SunOS-style */ |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1529 #endif /* not BSD-style */ |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1530 } |
684201f9fa7f
(set_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6799
diff
changeset
|
1531 |
491 | 1532 |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1533 |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1534 /* Prepare all terminal devices for exiting Emacs. */ |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1535 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
1536 void |
53226
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
53225
diff
changeset
|
1537 reset_all_sys_modes (void) |
491 | 1538 { |
82989
f3845715a5f6
Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
82988
diff
changeset
|
1539 struct tty_display_info *tty; |
82987
1682917e56b4
Major bugfixes and slight enhancements.
Karoly Lorentey <lorentey@elte.hu>
parents:
82986
diff
changeset
|
1540 for (tty = tty_list; tty; tty = tty->next) |
53226
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
53225
diff
changeset
|
1541 reset_sys_modes (tty); |
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
53225
diff
changeset
|
1542 } |
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
53225
diff
changeset
|
1543 |
53341 | 1544 /* Prepare the terminal for closing it; move the cursor to the |
766 | 1545 bottom of the frame, turn off interrupt-driven I/O, etc. */ |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1546 |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
1547 void |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1548 reset_sys_modes (tty_out) |
82989
f3845715a5f6
Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
82988
diff
changeset
|
1549 struct tty_display_info *tty_out; |
491 | 1550 { |
1551 if (noninteractive) | |
1552 { | |
1553 fflush (stdout); | |
1554 return; | |
1555 } | |
53229
33c3c7c16e13
lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
1556 if (!tty_out->term_initted) |
491 | 1557 return; |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1558 |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1559 if (!tty_out->output) |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1560 return; /* The tty is suspended. */ |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1561 |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1562 /* Go to and clear the last line of the terminal. */ |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1563 |
53341 | 1564 cmgoto (tty_out, FrameRows (tty_out) - 1, 0); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1565 |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1566 /* Code adapted from tty_clear_end_of_line. */ |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1567 if (tty_out->TS_clr_line) |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1568 { |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1569 emacs_tputs (tty_out, tty_out->TS_clr_line, 1, cmputc); |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1570 } |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1571 else |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1572 { /* have to do it the hard way */ |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1573 int i; |
83420
521d3f18b3d1
Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents:
83385
diff
changeset
|
1574 tty_turn_off_insert (tty_out); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1575 |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1576 for (i = curX (tty_out); i < FrameCols (tty_out) - 1; i++) |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1577 { |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1578 fputc (' ', tty_out->output); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1579 } |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83014
diff
changeset
|
1580 } |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1581 |
53341 | 1582 cmgoto (tty_out, FrameRows (tty_out) - 1, 0); |
82988
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
1583 fflush (tty_out->output); |
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
1584 |
84848
d8f4346c8ee1
(init_sys_modes): Use set_terminal_modes_hook.
Jason Rumney <jasonr@gnu.org>
parents:
84768
diff
changeset
|
1585 if (tty_out->terminal->reset_terminal_modes_hook) |
d8f4346c8ee1
(init_sys_modes): Use set_terminal_modes_hook.
Jason Rumney <jasonr@gnu.org>
parents:
84768
diff
changeset
|
1586 tty_out->terminal->reset_terminal_modes_hook (tty_out->terminal); |
83330
233c9974025b
Fix the original cause of the "arrow keys don't work on screen" bug.
Karoly Lorentey <lorentey@elte.hu>
parents:
83318
diff
changeset
|
1587 |
16240
b448d7632094
Replaced symbol BSD with BSD_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
16117
diff
changeset
|
1588 #ifdef BSD_SYSTEM |
491 | 1589 /* Avoid possible loss of output when changing terminal modes. */ |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1590 fsync (fileno (tty_out->output)); |
491 | 1591 #endif |
579 | 1592 |
491 | 1593 #ifdef F_SETFL |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3559
diff
changeset
|
1594 #ifdef F_SETOWN /* F_SETFL does not imply existence of F_SETOWN */ |
491 | 1595 if (interrupt_input) |
1596 { | |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1597 reset_sigio (fileno (tty_out->input)); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1598 fcntl (fileno (tty_out->input), F_SETOWN, |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1599 old_fcntl_owner[fileno (tty_out->input)]); |
491 | 1600 } |
1601 #endif /* F_SETOWN */ | |
6489
6c138b61c8b4
(reset_sys_modes): Turn off O_NDELAY.
Karl Heuer <kwzh@gnu.org>
parents:
6102
diff
changeset
|
1602 #ifdef O_NDELAY |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1603 fcntl (fileno (tty_out->input), F_SETFL, |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1604 fcntl (fileno (tty_out->input), F_GETFL, 0) & ~O_NDELAY); |
6489
6c138b61c8b4
(reset_sys_modes): Turn off O_NDELAY.
Karl Heuer <kwzh@gnu.org>
parents:
6102
diff
changeset
|
1605 #endif |
491 | 1606 #endif /* F_SETFL */ |
579 | 1607 |
53233
fe9b37bee5f7
Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
53232
diff
changeset
|
1608 if (tty_out->old_tty) |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1609 while (EMACS_SET_TTY (fileno (tty_out->input), |
53233
fe9b37bee5f7
Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents:
53232
diff
changeset
|
1610 tty_out->old_tty, 0) < 0 && errno == EINTR) |
12070 | 1611 ; |
491 | 1612 |
5498
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
1613 #ifdef MSDOS /* Demacs 1.1.2 91/10/20 Manabu Higashida */ |
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
1614 dos_ttcooked (); |
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
1615 #endif |
636e4507b52b
[MSDOS]: #include <dos.h>, "dosfns.h", "msdos.h", and
Richard M. Stallman <rms@gnu.org>
parents:
5420
diff
changeset
|
1616 |
5964
1b850ec1a5e2
(init_sys_modes, reset_sys_modes): Test BSD_PGRPS.
Richard M. Stallman <rms@gnu.org>
parents:
5960
diff
changeset
|
1617 #ifdef BSD_PGRPS |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1618 widen_foreground_group (fileno (tty_out->input)); |
3655
3e6cc11cfe9f
Interact properly with shells lacking job control (sh, rc, es...)
Jim Blandy <jimb@redhat.com>
parents:
3604
diff
changeset
|
1619 #endif |
491 | 1620 } |
1621 | |
1622 #ifdef HAVE_PTYS | |
1623 | |
1624 /* Set up the proper status flags for use of a pty. */ | |
1625 | |
20367
3d1939f30ec6
(discard_tty_input, init_baud_rate,
Kenichi Handa <handa@m17n.org>
parents:
20348
diff
changeset
|
1626 void |
491 | 1627 setup_pty (fd) |
1628 int fd; | |
1629 { | |
1630 /* I'm told that TOICREMOTE does not mean control chars | |
1631 "can't be sent" but rather that they don't have | |
1632 input-editing or signaling effects. | |
1633 That should be good, because we have other ways | |
1634 to do those things in Emacs. | |
1635 However, telnet mode seems not to work on 4.2. | |
1636 So TIOCREMOTE is turned off now. */ | |
1637 | |
1638 /* Under hp-ux, if TIOCREMOTE is turned on, some calls | |
1639 will hang. In particular, the "timeout" feature (which | |
1640 causes a read to return if there is no data available) | |
1641 does this. Also it is known that telnet mode will hang | |
1642 in such a way that Emacs must be stopped (perhaps this | |
1643 is the same problem). | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
1644 |
491 | 1645 If TIOCREMOTE is turned off, then there is a bug in |
1646 hp-ux which sometimes loses data. Apparently the | |
1647 code which blocks the master process when the internal | |
1648 buffer fills up does not work. Other than this, | |
1649 though, everything else seems to work fine. | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
1650 |
491 | 1651 Since the latter lossage is more benign, we may as well |
1652 lose that way. -- cph */ | |
1653 #ifdef FIONBIO | |
96643
79121a8f01e3
* config.nt (HAVE_FACES): Remove, unused.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96595
diff
changeset
|
1654 #if defined(UNIX98_PTYS) |
491 | 1655 { |
1656 int on = 1; | |
1657 ioctl (fd, FIONBIO, &on); | |
1658 } | |
1659 #endif | |
1660 #endif | |
1661 } | |
1662 #endif /* HAVE_PTYS */ | |
1663 | |
97142 | 1664 #if !defined(CANNOT_DUMP) || !defined(SYSTEM_MALLOC) |
491 | 1665 /* Some systems that cannot dump also cannot implement these. */ |
1666 | |
1667 /* | |
1668 * Return the address of the start of the text segment prior to | |
1669 * doing an unexec. After unexec the return value is undefined. | |
1670 * See crt0.c for further explanation and _start. | |
1671 * | |
1672 */ | |
1673 | |
27922
db5a4af9fafd
(start_of_text): Don't define this function for NetBSD
Gerd Moellmann <gerd@gnu.org>
parents:
27709
diff
changeset
|
1674 #if !(defined (__NetBSD__) && defined (__ELF__)) |
9039
22e5c594d59d
(start_of_text): Don't test CANNOT_UNEXEC.
Richard M. Stallman <rms@gnu.org>
parents:
9036
diff
changeset
|
1675 #ifndef HAVE_TEXT_START |
491 | 1676 char * |
1677 start_of_text () | |
1678 { | |
1679 #ifdef TEXT_START | |
1680 return ((char *) TEXT_START); | |
1681 #else | |
1682 extern int _start (); | |
1683 return ((char *) _start); | |
1684 #endif /* TEXT_START */ | |
1685 } | |
9039
22e5c594d59d
(start_of_text): Don't test CANNOT_UNEXEC.
Richard M. Stallman <rms@gnu.org>
parents:
9036
diff
changeset
|
1686 #endif /* not HAVE_TEXT_START */ |
27922
db5a4af9fafd
(start_of_text): Don't define this function for NetBSD
Gerd Moellmann <gerd@gnu.org>
parents:
27709
diff
changeset
|
1687 #endif |
491 | 1688 |
1689 /* | |
1690 * Return the address of the start of the data segment prior to | |
1691 * doing an unexec. After unexec the return value is undefined. | |
1692 * See crt0.c for further information and definition of data_start. | |
1693 * | |
1694 * Apparently, on BSD systems this is etext at startup. On | |
1695 * USG systems (swapping) this is highly mmu dependent and | |
1696 * is also dependent on whether or not the program is running | |
1697 * with shared text. Generally there is a (possibly large) | |
1698 * gap between end of text and start of data with shared text. | |
1699 * | |
1700 * On Uniplus+ systems with shared text, data starts at a | |
1701 * fixed address. Each port (from a given oem) is generally | |
1702 * different, and the specific value of the start of data can | |
1703 * be obtained via the UniPlus+ specific "uvar" system call, | |
1704 * however the method outlined in crt0.c seems to be more portable. | |
1705 * | |
1706 * Probably what will have to happen when a USG unexec is available, | |
1707 * at least on UniPlus, is temacs will have to be made unshared so | |
1708 * that text and data are contiguous. Then once loadup is complete, | |
1709 * unexec will produce a shared executable where the data can be | |
13943
f3c41057bf41
(WRITABLE): Renamed from WRITEABLE.
Karl Heuer <kwzh@gnu.org>
parents:
13416
diff
changeset
|
1710 * at the normal shared text boundary and the startofdata variable |
491 | 1711 * will be patched by unexec to the correct value. |
1712 * | |
1713 */ | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
1714 |
46653
8ba889cb6430
(start_of_data): Don't define the function if a macro
Ken Raeburn <raeburn@raeburn.org>
parents:
46591
diff
changeset
|
1715 #ifndef start_of_data |
491 | 1716 char * |
1717 start_of_data () | |
1718 { | |
1719 #ifdef DATA_START | |
1720 return ((char *) DATA_START); | |
1721 #else | |
2121
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1722 #ifdef ORDINARY_LINK |
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1723 /* |
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1724 * This is a hack. Since we're not linking crt0.c or pre_crt0.c, |
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1725 * data_start isn't defined. We take the address of environ, which |
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1726 * is known to live at or near the start of the system crt0.c, and |
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1727 * we don't sweat the handful of bytes that might lose. |
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1728 */ |
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1729 extern char **environ; |
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1730 |
25578
4c9cf2c63703
[macintosh] (stat, fstat, mkdir, rmdir, utime, access)
Richard M. Stallman <rms@gnu.org>
parents:
25453
diff
changeset
|
1731 return ((char *) &environ); |
2121
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1732 #else |
491 | 1733 extern int data_start; |
1734 return ((char *) &data_start); | |
2121
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1735 #endif /* ORDINARY_LINK */ |
ebc56bb13048
* sysdep.c (read_input_waiting): Set e.frame_or_window, not
Jim Blandy <jimb@redhat.com>
parents:
1927
diff
changeset
|
1736 #endif /* DATA_START */ |
491 | 1737 } |
46653
8ba889cb6430
(start_of_data): Don't define the function if a macro
Ken Raeburn <raeburn@raeburn.org>
parents:
46591
diff
changeset
|
1738 #endif /* start_of_data */ |
491 | 1739 #endif /* NEED_STARTS (not CANNOT_DUMP or not SYSTEM_MALLOC) */ |
1740 | |
7908
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1741 /* init_system_name sets up the string for the Lisp function |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1742 system-name to return. */ |
491 | 1743 |
7908
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1744 extern Lisp_Object Vsystem_name; |
491 | 1745 |
3150
afc59d5d30c6
[HAVE_SOCKETS]: Include socket.h, netdb.h.
Richard M. Stallman <rms@gnu.org>
parents:
3106
diff
changeset
|
1746 #ifdef HAVE_SOCKETS |
afc59d5d30c6
[HAVE_SOCKETS]: Include socket.h, netdb.h.
Richard M. Stallman <rms@gnu.org>
parents:
3106
diff
changeset
|
1747 #include <sys/socket.h> |
afc59d5d30c6
[HAVE_SOCKETS]: Include socket.h, netdb.h.
Richard M. Stallman <rms@gnu.org>
parents:
3106
diff
changeset
|
1748 #include <netdb.h> |
afc59d5d30c6
[HAVE_SOCKETS]: Include socket.h, netdb.h.
Richard M. Stallman <rms@gnu.org>
parents:
3106
diff
changeset
|
1749 #endif /* HAVE_SOCKETS */ |
afc59d5d30c6
[HAVE_SOCKETS]: Include socket.h, netdb.h.
Richard M. Stallman <rms@gnu.org>
parents:
3106
diff
changeset
|
1750 |
33718
79a269bdf047
Move the code for declaring h_errno after #include <netdb.h>.
Kenichi Handa <handa@m17n.org>
parents:
33617
diff
changeset
|
1751 #ifdef TRY_AGAIN |
79a269bdf047
Move the code for declaring h_errno after #include <netdb.h>.
Kenichi Handa <handa@m17n.org>
parents:
33617
diff
changeset
|
1752 #ifndef HAVE_H_ERRNO |
79a269bdf047
Move the code for declaring h_errno after #include <netdb.h>.
Kenichi Handa <handa@m17n.org>
parents:
33617
diff
changeset
|
1753 extern int h_errno; |
79a269bdf047
Move the code for declaring h_errno after #include <netdb.h>.
Kenichi Handa <handa@m17n.org>
parents:
33617
diff
changeset
|
1754 #endif |
79a269bdf047
Move the code for declaring h_errno after #include <netdb.h>.
Kenichi Handa <handa@m17n.org>
parents:
33617
diff
changeset
|
1755 #endif /* TRY_AGAIN */ |
79a269bdf047
Move the code for declaring h_errno after #include <netdb.h>.
Kenichi Handa <handa@m17n.org>
parents:
33617
diff
changeset
|
1756 |
7908
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1757 void |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1758 init_system_name () |
491 | 1759 { |
5734
3c8ae6c720d8
(get_system_name): Remove restriction on hostname size.
Karl Heuer <kwzh@gnu.org>
parents:
5682
diff
changeset
|
1760 #ifndef HAVE_GETHOSTNAME |
7908
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1761 struct utsname uts; |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1762 uname (&uts); |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1763 Vsystem_name = build_string (uts.nodename); |
5734
3c8ae6c720d8
(get_system_name): Remove restriction on hostname size.
Karl Heuer <kwzh@gnu.org>
parents:
5682
diff
changeset
|
1764 #else /* HAVE_GETHOSTNAME */ |
11800
a2f009e1b85b
(init_system_name): Clean up signedness mismatch.
Karl Heuer <kwzh@gnu.org>
parents:
11722
diff
changeset
|
1765 unsigned int hostname_size = 256; |
7908
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1766 char *hostname = (char *) alloca (hostname_size); |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1767 |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1768 /* Try to get the host name; if the buffer is too short, try |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1769 again. Apparently, the only indication gethostname gives of |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1770 whether the buffer was large enough is the presence or absence |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1771 of a '\0' in the string. Eech. */ |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1772 for (;;) |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1773 { |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1774 gethostname (hostname, hostname_size - 1); |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1775 hostname[hostname_size - 1] = '\0'; |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1776 |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1777 /* Was the buffer large enough for the '\0'? */ |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1778 if (strlen (hostname) < hostname_size - 1) |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1779 break; |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1780 |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1781 hostname_size <<= 1; |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1782 hostname = (char *) alloca (hostname_size); |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1783 } |
5734
3c8ae6c720d8
(get_system_name): Remove restriction on hostname size.
Karl Heuer <kwzh@gnu.org>
parents:
5682
diff
changeset
|
1784 #ifdef HAVE_SOCKETS |
7908
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1785 /* Turn the hostname into the official, fully-qualified hostname. |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1786 Don't do this if we're going to dump; this can confuse system |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1787 libraries on some machines and make the dumped emacs core dump. */ |
5734
3c8ae6c720d8
(get_system_name): Remove restriction on hostname size.
Karl Heuer <kwzh@gnu.org>
parents:
5682
diff
changeset
|
1788 #ifndef CANNOT_DUMP |
7908
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1789 if (initialized) |
5734
3c8ae6c720d8
(get_system_name): Remove restriction on hostname size.
Karl Heuer <kwzh@gnu.org>
parents:
5682
diff
changeset
|
1790 #endif /* not CANNOT_DUMP */ |
20202
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1791 if (! index (hostname, '.')) |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1792 { |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1793 int count; |
86212
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1794 #ifdef HAVE_GETADDRINFO |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1795 struct addrinfo *res; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1796 struct addrinfo hints; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1797 int ret; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1798 |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1799 memset (&hints, 0, sizeof(hints)); |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1800 hints.ai_socktype = SOCK_STREAM; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1801 hints.ai_flags = AI_CANONNAME; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1802 |
20202
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1803 for (count = 0;; count++) |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1804 { |
86212
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1805 if ((ret = getaddrinfo (hostname, NULL, &hints, &res)) == 0 |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1806 || ret != EAI_AGAIN) |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1807 break; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1808 |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1809 if (count >= 5) |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1810 break; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1811 Fsleep_for (make_number (1), Qnil); |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1812 } |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1813 |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1814 if (ret == 0) |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1815 { |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1816 struct addrinfo *it = res; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1817 while (it) |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1818 { |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1819 char *fqdn = it->ai_canonname; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1820 if (fqdn && index (fqdn, '.') |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1821 && strcmp (fqdn, "localhost.localdomain") != 0) |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1822 break; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1823 it = it->ai_next; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1824 } |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1825 if (it) |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1826 { |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1827 hostname = alloca (strlen (it->ai_canonname) + 1); |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1828 strcpy (hostname, it->ai_canonname); |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1829 } |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1830 freeaddrinfo (res); |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1831 } |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1832 #else /* !HAVE_GETADDRINFO */ |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1833 struct hostent *hp; |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1834 for (count = 0;; count++) |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1835 { |
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1836 |
8330
60adc323cfe7
[!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents:
8285
diff
changeset
|
1837 #ifdef TRY_AGAIN |
20202
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1838 h_errno = 0; |
8330
60adc323cfe7
[!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents:
8285
diff
changeset
|
1839 #endif |
20202
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1840 hp = gethostbyname (hostname); |
8285
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
1841 #ifdef TRY_AGAIN |
20202
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1842 if (! (hp == 0 && h_errno == TRY_AGAIN)) |
8285
6609af160f16
(init_system_name): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents:
8104
diff
changeset
|
1843 #endif |
86212
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1844 |
20202
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1845 break; |
86212
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1846 |
20202
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1847 if (count >= 5) |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1848 break; |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1849 Fsleep_for (make_number (1), Qnil); |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1850 } |
86212
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1851 |
20202
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1852 if (hp) |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1853 { |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1854 char *fqdn = (char *) hp->h_name; |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1855 |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1856 if (!index (fqdn, '.')) |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1857 { |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1858 /* We still don't have a fully qualified domain name. |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1859 Try to find one in the list of alternate names */ |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1860 char **alias = hp->h_aliases; |
77349
ddd98fc21199
(init_system_name): Don't accept localhost.localdomain.
Chong Yidong <cyd@stupidchicken.com>
parents:
75348
diff
changeset
|
1861 while (*alias |
ddd98fc21199
(init_system_name): Don't accept localhost.localdomain.
Chong Yidong <cyd@stupidchicken.com>
parents:
75348
diff
changeset
|
1862 && (!index (*alias, '.') |
ddd98fc21199
(init_system_name): Don't accept localhost.localdomain.
Chong Yidong <cyd@stupidchicken.com>
parents:
75348
diff
changeset
|
1863 || !strcmp (*alias, "localhost.localdomain"))) |
20202
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1864 alias++; |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1865 if (*alias) |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1866 fqdn = *alias; |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1867 } |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1868 hostname = fqdn; |
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1869 } |
86212
777f1d31b403
(init_system_name): Use getaddrinfo if available.
Jan Djärv <jan.h.d@swipnet.se>
parents:
84956
diff
changeset
|
1870 #endif /* !HAVE_GETADDRINFO */ |
20202
de9483a63b12
(init_system_name): If gethostname gives a proper
Karl Heuer <kwzh@gnu.org>
parents:
19699
diff
changeset
|
1871 } |
3150
afc59d5d30c6
[HAVE_SOCKETS]: Include socket.h, netdb.h.
Richard M. Stallman <rms@gnu.org>
parents:
3106
diff
changeset
|
1872 #endif /* HAVE_SOCKETS */ |
7908
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1873 Vsystem_name = build_string (hostname); |
5734
3c8ae6c720d8
(get_system_name): Remove restriction on hostname size.
Karl Heuer <kwzh@gnu.org>
parents:
5682
diff
changeset
|
1874 #endif /* HAVE_GETHOSTNAME */ |
7908
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1875 { |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1876 unsigned char *p; |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46298
diff
changeset
|
1877 for (p = SDATA (Vsystem_name); *p; p++) |
7908
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1878 if (*p == ' ' || *p == '\t') |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1879 *p = '-'; |
2d605a73a1fd
(init_system_name): New function, replaces get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7889
diff
changeset
|
1880 } |
491 | 1881 } |
1882 | |
12988
4ccd1ffa8b33
(sys_subshell) [MSDOS]: Handle SUSPEND env var.
Richard M. Stallman <rms@gnu.org>
parents:
12547
diff
changeset
|
1883 #ifndef MSDOS |
91702
b7a5a89054dc
* configure.in (LIBX11_MACHINE, HAVE_XFREE386): Remove code
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87799
diff
changeset
|
1884 #if !defined (HAVE_SELECT) |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1885 |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1886 #include "sysselect.h" |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1887 #undef select |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1888 |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1889 #if defined (HAVE_X_WINDOWS) && !defined (HAVE_SELECT) |
491 | 1890 /* Cause explanatory error message at compile time, |
1891 since the select emulation is not good enough for X. */ | |
1892 int *x = &x_windows_lose_if_no_select_system_call; | |
1893 #endif | |
1894 | |
1895 /* Emulate as much as select as is possible under 4.1 and needed by Gnu Emacs | |
1896 * Only checks read descriptors. | |
1897 */ | |
1898 /* How long to wait between checking fds in select */ | |
1899 #define SELECT_PAUSE 1 | |
1900 int select_alarmed; | |
1901 | |
1902 /* For longjmp'ing back to read_input_waiting. */ | |
1903 | |
1904 jmp_buf read_alarm_throw; | |
1905 | |
1906 /* Nonzero if the alarm signal should throw back to read_input_waiting. | |
1907 The read_socket_hook function sets this to 1 while it is waiting. */ | |
1908 | |
1909 int read_alarm_should_throw; | |
1910 | |
1911 SIGTYPE | |
1912 select_alarm () | |
1913 { | |
1914 select_alarmed = 1; | |
1915 signal (SIGALRM, SIG_IGN); | |
58986
59945307b86b
* syssignal.h: Declare main_thread.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58621
diff
changeset
|
1916 SIGNAL_THREAD_CHECK (SIGALRM); |
491 | 1917 if (read_alarm_should_throw) |
1918 longjmp (read_alarm_throw, 1); | |
1919 } | |
1920 | |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
1921 #ifndef WINDOWSNT |
491 | 1922 /* Only rfds are checked. */ |
1923 int | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1924 sys_select (nfds, rfds, wfds, efds, timeout) |
491 | 1925 int nfds; |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1926 SELECT_TYPE *rfds, *wfds, *efds; |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1927 EMACS_TIME *timeout; |
491 | 1928 { |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1929 /* XXX This needs to be updated for multi-tty support. Is there |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1930 anybody who needs to emulate select these days? */ |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1931 int ravail = 0; |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1932 SELECT_TYPE orfds; |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1933 int timeoutval; |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1934 int *local_timeout; |
491 | 1935 extern int proc_buffered_char[]; |
1936 #ifndef subprocesses | |
1937 int process_tick = 0, update_tick = 0; | |
1938 #else | |
1939 extern int process_tick, update_tick; | |
1940 #endif | |
1941 unsigned char buf; | |
1942 | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1943 #if defined (HAVE_SELECT) && defined (HAVE_X_WINDOWS) |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1944 /* If we're using X, then the native select will work; we only need the |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1945 emulation for non-X usage. */ |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
1946 if (!NILP (Vinitial_window_system)) |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1947 return select (nfds, rfds, wfds, efds, timeout); |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1948 #endif |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1949 timeoutval = timeout ? EMACS_SECS (*timeout) : 100000; |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1950 local_timeout = &timeoutval; |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1951 FD_ZERO (&orfds); |
491 | 1952 if (rfds) |
1953 { | |
1954 orfds = *rfds; | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1955 FD_ZERO (rfds); |
491 | 1956 } |
1957 if (wfds) | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1958 FD_ZERO (wfds); |
491 | 1959 if (efds) |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1960 FD_ZERO (efds); |
491 | 1961 |
1962 /* If we are looking only for the terminal, with no timeout, | |
1963 just read it and wait -- that's more efficient. */ | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1964 if (*local_timeout == 100000 && process_tick == update_tick |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1965 && FD_ISSET (0, &orfds)) |
491 | 1966 { |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1967 int fd; |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1968 for (fd = 1; fd < nfds; ++fd) |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1969 if (FD_ISSET (fd, &orfds)) |
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1970 goto hardway; |
491 | 1971 if (! detect_input_pending ()) |
1972 read_input_waiting (); | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1973 FD_SET (0, rfds); |
491 | 1974 return 1; |
1975 } | |
1976 | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1977 hardway: |
491 | 1978 /* Once a second, till the timer expires, check all the flagged read |
1979 * descriptors to see if any input is available. If there is some then | |
1980 * set the corresponding bit in the return copy of rfds. | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
1981 */ |
491 | 1982 while (1) |
1983 { | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1984 register int to_check, fd; |
491 | 1985 |
1986 if (rfds) | |
1987 { | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1988 for (to_check = nfds, fd = 0; --to_check >= 0; fd++) |
491 | 1989 { |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1990 if (FD_ISSET (fd, &orfds)) |
491 | 1991 { |
1992 int avail = 0, status = 0; | |
1993 | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
1994 if (fd == 0) |
491 | 1995 avail = detect_input_pending (); /* Special keyboard handler */ |
1996 else | |
1997 { | |
1998 #ifdef FIONREAD | |
1999 status = ioctl (fd, FIONREAD, &avail); | |
2000 #else /* no FIONREAD */ | |
2001 /* Hoping it will return -1 if nothing available | |
2002 or 0 if all 0 chars requested are read. */ | |
2003 if (proc_buffered_char[fd] >= 0) | |
2004 avail = 1; | |
2005 else | |
2006 { | |
2007 avail = read (fd, &buf, 1); | |
2008 if (avail > 0) | |
2009 proc_buffered_char[fd] = buf; | |
2010 } | |
2011 #endif /* no FIONREAD */ | |
2012 } | |
2013 if (status >= 0 && avail > 0) | |
2014 { | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
2015 FD_SET (fd, rfds); |
491 | 2016 ravail++; |
2017 } | |
2018 } | |
2019 } | |
2020 } | |
2021 if (*local_timeout == 0 || ravail != 0 || process_tick != update_tick) | |
2022 break; | |
27432
b904070c3d8b
(sys_select): Turn atimers off and on instead of
Gerd Moellmann <gerd@gnu.org>
parents:
26526
diff
changeset
|
2023 |
b904070c3d8b
(sys_select): Turn atimers off and on instead of
Gerd Moellmann <gerd@gnu.org>
parents:
26526
diff
changeset
|
2024 turn_on_atimers (0); |
b904070c3d8b
(sys_select): Turn atimers off and on instead of
Gerd Moellmann <gerd@gnu.org>
parents:
26526
diff
changeset
|
2025 signal (SIGALRM, select_alarm); |
491 | 2026 select_alarmed = 0; |
2027 alarm (SELECT_PAUSE); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
2028 |
491 | 2029 /* Wait for a SIGALRM (or maybe a SIGTINT) */ |
2030 while (select_alarmed == 0 && *local_timeout != 0 | |
2031 && process_tick == update_tick) | |
2032 { | |
2033 /* If we are interested in terminal input, | |
2034 wait by reading the terminal. | |
2035 That makes instant wakeup for terminal input at least. */ | |
10528
e020d8d5dc2c
(sys_select): Renamed from select. Use SELECT_TYPE instead of int. Defer to
Karl Heuer <kwzh@gnu.org>
parents:
10486
diff
changeset
|
2036 if (FD_ISSET (0, &orfds)) |
491 | 2037 { |
2038 read_input_waiting (); | |
2039 if (detect_input_pending ()) | |
2040 select_alarmed = 1; | |
2041 } | |
2042 else | |
2043 pause (); | |
2044 } | |
2045 (*local_timeout) -= SELECT_PAUSE; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
2046 |
27432
b904070c3d8b
(sys_select): Turn atimers off and on instead of
Gerd Moellmann <gerd@gnu.org>
parents:
26526
diff
changeset
|
2047 /* Reset the old alarm if there was one. */ |
b904070c3d8b
(sys_select): Turn atimers off and on instead of
Gerd Moellmann <gerd@gnu.org>
parents:
26526
diff
changeset
|
2048 turn_on_atimers (1); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
2049 |
491 | 2050 if (*local_timeout == 0) /* Stop on timer being cleared */ |
2051 break; | |
2052 } | |
2053 return ravail; | |
2054 } | |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
2055 #endif /* not WINDOWSNT */ |
491 | 2056 |
2057 /* Read keyboard input into the standard buffer, | |
2058 waiting for at least one character. */ | |
2059 | |
21514 | 2060 void |
491 | 2061 read_input_waiting () |
2062 { | |
83014
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
2063 /* XXX This needs to be updated for multi-tty support. Is there |
f5cadabb36dd
Support for opening X frames from a tty session.
Karoly Lorentey <lorentey@elte.hu>
parents:
83012
diff
changeset
|
2064 anybody who needs to emulate select these days? */ |
1014
6e25f9b75841
* sysdep.c (select): There's no need to cast the return value of
Jim Blandy <jimb@redhat.com>
parents:
766
diff
changeset
|
2065 int nread, i; |
6e25f9b75841
* sysdep.c (select): There's no need to cast the return value of
Jim Blandy <jimb@redhat.com>
parents:
766
diff
changeset
|
2066 extern int quit_char; |
491 | 2067 |
2068 if (read_socket_hook) | |
2069 { | |
54166
787d9a46cf1a
(BUFFER_SIZE_FACTOR): Remove.
Kim F. Storm <storm@cua.dk>
parents:
53901
diff
changeset
|
2070 struct input_event hold_quit; |
787d9a46cf1a
(BUFFER_SIZE_FACTOR): Remove.
Kim F. Storm <storm@cua.dk>
parents:
53901
diff
changeset
|
2071 |
787d9a46cf1a
(BUFFER_SIZE_FACTOR): Remove.
Kim F. Storm <storm@cua.dk>
parents:
53901
diff
changeset
|
2072 EVENT_INIT (hold_quit); |
787d9a46cf1a
(BUFFER_SIZE_FACTOR): Remove.
Kim F. Storm <storm@cua.dk>
parents:
53901
diff
changeset
|
2073 hold_quit.kind = NO_EVENT; |
787d9a46cf1a
(BUFFER_SIZE_FACTOR): Remove.
Kim F. Storm <storm@cua.dk>
parents:
53901
diff
changeset
|
2074 |
491 | 2075 read_alarm_should_throw = 0; |
2076 if (! setjmp (read_alarm_throw)) | |
54166
787d9a46cf1a
(BUFFER_SIZE_FACTOR): Remove.
Kim F. Storm <storm@cua.dk>
parents:
53901
diff
changeset
|
2077 nread = (*read_socket_hook) (0, 1, &hold_quit); |
491 | 2078 else |
2079 nread = -1; | |
5136
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2080 |
54166
787d9a46cf1a
(BUFFER_SIZE_FACTOR): Remove.
Kim F. Storm <storm@cua.dk>
parents:
53901
diff
changeset
|
2081 if (hold_quit.kind != NO_EVENT) |
787d9a46cf1a
(BUFFER_SIZE_FACTOR): Remove.
Kim F. Storm <storm@cua.dk>
parents:
53901
diff
changeset
|
2082 kbd_buffer_store_event (&hold_quit); |
491 | 2083 } |
2084 else | |
2085 { | |
51572
1ef0c7b51ff9
(kbd_input_ast, read_input_waiting): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51552
diff
changeset
|
2086 struct input_event e; |
5136
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2087 char buf[3]; |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2088 nread = read (fileno (stdin), buf, 1); |
51572
1ef0c7b51ff9
(kbd_input_ast, read_input_waiting): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51552
diff
changeset
|
2089 EVENT_INIT (e); |
5136
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2090 |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2091 /* Scan the chars for C-g and store them in kbd_buffer. */ |
45804 | 2092 e.kind = ASCII_KEYSTROKE_EVENT; |
25674
b0d0bcf1b32e
(reset_sys_modes): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25578
diff
changeset
|
2093 e.frame_or_window = selected_frame; |
5136
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2094 e.modifiers = 0; |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2095 for (i = 0; i < nread; i++) |
4952
0c973730e476
(read_input_waiting): Don't mess with meta bit
Richard M. Stallman <rms@gnu.org>
parents:
4916
diff
changeset
|
2096 { |
5136
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2097 /* Convert chars > 0177 to meta events if desired. |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2098 We do this under the same conditions that read_avail_input does. */ |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2099 if (read_socket_hook == 0) |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2100 { |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2101 /* If the user says she has a meta key, then believe her. */ |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2102 if (meta_key == 1 && (buf[i] & 0x80)) |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2103 e.modifiers = meta_modifier; |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2104 if (meta_key != 2) |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2105 buf[i] &= ~0x80; |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2106 } |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2107 |
9279
2382e2f3884e
(kbd_input_ast, read_input_waiting): Use new accessor macros instead of
Karl Heuer <kwzh@gnu.org>
parents:
9239
diff
changeset
|
2108 XSETINT (e.code, buf[i]); |
5136
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2109 kbd_buffer_store_event (&e); |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2110 /* Don't look at input that follows a C-g too closely. |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2111 This reduces lossage due to autorepeat on C-g. */ |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2112 if (buf[i] == quit_char) |
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2113 break; |
4952
0c973730e476
(read_input_waiting): Don't mess with meta bit
Richard M. Stallman <rms@gnu.org>
parents:
4916
diff
changeset
|
2114 } |
491 | 2115 } |
2116 } | |
2117 | |
91702
b7a5a89054dc
* configure.in (LIBX11_MACHINE, HAVE_XFREE386): Remove code
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87799
diff
changeset
|
2118 #if !defined (HAVE_SELECT) |
82988
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
2119 #define select sys_select |
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
2120 #endif |
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
2121 |
491 | 2122 #endif /* not HAVE_SELECT */ |
12988
4ccd1ffa8b33
(sys_subshell) [MSDOS]: Handle SUSPEND env var.
Richard M. Stallman <rms@gnu.org>
parents:
12547
diff
changeset
|
2123 #endif /* not MSDOS */ |
491 | 2124 |
2125 /* POSIX signals support - DJB */ | |
2126 /* Anyone with POSIX signals should have ANSI C declarations */ | |
2127 | |
2128 #ifdef POSIX_SIGNALS | |
2129 | |
20948 | 2130 sigset_t empty_mask, full_mask; |
491 | 2131 |
2132 signal_handler_t | |
2133 sys_signal (int signal_number, signal_handler_t action) | |
2134 { | |
20948 | 2135 struct sigaction new_action, old_action; |
491 | 2136 sigemptyset (&new_action.sa_mask); |
20498
22dd2d861e36
(sys_signal): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
20456
diff
changeset
|
2137 new_action.sa_handler = action; |
98547
0835efd6ac19
(sys_signal): Always set SA_RESTART when
Andreas Schwab <schwab@suse.de>
parents:
98505
diff
changeset
|
2138 new_action.sa_flags = 0; |
0835efd6ac19
(sys_signal): Always set SA_RESTART when
Andreas Schwab <schwab@suse.de>
parents:
98505
diff
changeset
|
2139 #if defined (SA_RESTART) |
5594
f97415a8cf41
(request_sigio, unrequest_sigio): Add new versions of
Richard M. Stallman <rms@gnu.org>
parents:
5573
diff
changeset
|
2140 /* Emacs mostly works better with restartable system services. If this |
46298
c6d9317e4393
(sys_signal): Test BROKEN_SA_RESTART.
Richard M. Stallman <rms@gnu.org>
parents:
45804
diff
changeset
|
2141 flag exists, we probably want to turn it on here. |
c6d9317e4393
(sys_signal): Test BROKEN_SA_RESTART.
Richard M. Stallman <rms@gnu.org>
parents:
45804
diff
changeset
|
2142 However, on some systems this resets the timeout of `select' |
c6d9317e4393
(sys_signal): Test BROKEN_SA_RESTART.
Richard M. Stallman <rms@gnu.org>
parents:
45804
diff
changeset
|
2143 which means that `select' never finishes if it keeps getting signals. |
c6d9317e4393
(sys_signal): Test BROKEN_SA_RESTART.
Richard M. Stallman <rms@gnu.org>
parents:
45804
diff
changeset
|
2144 BROKEN_SA_RESTART is defined on those systems. */ |
58518
1a5509ec45da
(sys_signal): Don't use SA_RESTART if SYNC_INPUT is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56714
diff
changeset
|
2145 /* It's not clear why the comment above says "mostly works better". --Stef |
1a5509ec45da
(sys_signal): Don't use SA_RESTART if SYNC_INPUT is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56714
diff
changeset
|
2146 When SYNC_INPUT is set, we don't want SA_RESTART because we need to poll |
1a5509ec45da
(sys_signal): Don't use SA_RESTART if SYNC_INPUT is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56714
diff
changeset
|
2147 for pending input so we need long-running syscalls to be interrupted |
1a5509ec45da
(sys_signal): Don't use SA_RESTART if SYNC_INPUT is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56714
diff
changeset
|
2148 after a signal that sets the interrupt_input_pending flag. */ |
98548
2c49cf36c498
Add comment for last change.
Andreas Schwab <schwab@suse.de>
parents:
98547
diff
changeset
|
2149 /* Non-interactive keyboard input goes through stdio, where we always |
2c49cf36c498
Add comment for last change.
Andreas Schwab <schwab@suse.de>
parents:
98547
diff
changeset
|
2150 want restartable system calls. */ |
98547
0835efd6ac19
(sys_signal): Always set SA_RESTART when
Andreas Schwab <schwab@suse.de>
parents:
98505
diff
changeset
|
2151 # if defined (BROKEN_SA_RESTART) || defined(SYNC_INPUT) |
0835efd6ac19
(sys_signal): Always set SA_RESTART when
Andreas Schwab <schwab@suse.de>
parents:
98505
diff
changeset
|
2152 if (noninteractive) |
0835efd6ac19
(sys_signal): Always set SA_RESTART when
Andreas Schwab <schwab@suse.de>
parents:
98505
diff
changeset
|
2153 # endif |
0835efd6ac19
(sys_signal): Always set SA_RESTART when
Andreas Schwab <schwab@suse.de>
parents:
98505
diff
changeset
|
2154 new_action.sa_flags = SA_RESTART; |
5594
f97415a8cf41
(request_sigio, unrequest_sigio): Add new versions of
Richard M. Stallman <rms@gnu.org>
parents:
5573
diff
changeset
|
2155 #endif |
709 | 2156 sigaction (signal_number, &new_action, &old_action); |
20498
22dd2d861e36
(sys_signal): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
20456
diff
changeset
|
2157 return (old_action.sa_handler); |
491 | 2158 } |
2159 | |
638 | 2160 #ifndef __GNUC__ |
2161 /* If we're compiling with GCC, we don't need this function, since it | |
2162 can be written as a macro. */ | |
2163 sigset_t | |
2164 sys_sigmask (int sig) | |
2165 { | |
2166 sigset_t mask; | |
2167 sigemptyset (&mask); | |
2168 sigaddset (&mask, sig); | |
2169 return mask; | |
2170 } | |
2171 #endif | |
2172 | |
491 | 2173 /* I'd like to have these guys return pointers to the mask storage in here, |
2174 but there'd be trouble if the code was saving multiple masks. I'll be | |
2175 safe and pass the structure. It normally won't be more than 2 bytes | |
2176 anyhow. - DJB */ | |
2177 | |
2178 sigset_t | |
2179 sys_sigblock (sigset_t new_mask) | |
2180 { | |
2181 sigset_t old_mask; | |
2182 sigprocmask (SIG_BLOCK, &new_mask, &old_mask); | |
2183 return (old_mask); | |
2184 } | |
2185 | |
2186 sigset_t | |
2187 sys_sigunblock (sigset_t new_mask) | |
2188 { | |
2189 sigset_t old_mask; | |
2190 sigprocmask (SIG_UNBLOCK, &new_mask, &old_mask); | |
2191 return (old_mask); | |
2192 } | |
2193 | |
2194 sigset_t | |
2195 sys_sigsetmask (sigset_t new_mask) | |
2196 { | |
2197 sigset_t old_mask; | |
2198 sigprocmask (SIG_SETMASK, &new_mask, &old_mask); | |
2199 return (old_mask); | |
2200 } | |
2201 | |
2202 #endif /* POSIX_SIGNALS */ | |
2203 | |
51552
d84e9160d869
Remove redundant include of unistd.h, stdlib.h. Use
Dave Love <fx@gnu.org>
parents:
51206
diff
changeset
|
2204 #if !defined HAVE_STRSIGNAL && !HAVE_DECL_SYS_SIGLIST |
26526
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2205 static char *my_sys_siglist[NSIG]; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2206 # ifdef sys_siglist |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2207 # undef sys_siglist |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2208 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2209 # define sys_siglist my_sys_siglist |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2210 #endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2211 |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2212 void |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2213 init_signals () |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2214 { |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2215 #ifdef POSIX_SIGNALS |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2216 sigemptyset (&empty_mask); |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2217 sigfillset (&full_mask); |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2218 #endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2219 |
51552
d84e9160d869
Remove redundant include of unistd.h, stdlib.h. Use
Dave Love <fx@gnu.org>
parents:
51206
diff
changeset
|
2220 #if !defined HAVE_STRSIGNAL && !HAVE_DECL_SYS_SIGLIST |
26526
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2221 if (! initialized) |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2222 { |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2223 # ifdef SIGABRT |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2224 sys_siglist[SIGABRT] = "Aborted"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2225 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2226 # ifdef SIGAIO |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2227 sys_siglist[SIGAIO] = "LAN I/O interrupt"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2228 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2229 # ifdef SIGALRM |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2230 sys_siglist[SIGALRM] = "Alarm clock"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2231 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2232 # ifdef SIGBUS |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2233 sys_siglist[SIGBUS] = "Bus error"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2234 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2235 # ifdef SIGCLD |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2236 sys_siglist[SIGCLD] = "Child status changed"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2237 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2238 # ifdef SIGCHLD |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2239 sys_siglist[SIGCHLD] = "Child status changed"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2240 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2241 # ifdef SIGCONT |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2242 sys_siglist[SIGCONT] = "Continued"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2243 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2244 # ifdef SIGDANGER |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2245 sys_siglist[SIGDANGER] = "Swap space dangerously low"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2246 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2247 # ifdef SIGDGNOTIFY |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2248 sys_siglist[SIGDGNOTIFY] = "Notification message in queue"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2249 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2250 # ifdef SIGEMT |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2251 sys_siglist[SIGEMT] = "Emulation trap"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2252 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2253 # ifdef SIGFPE |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2254 sys_siglist[SIGFPE] = "Arithmetic exception"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2255 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2256 # ifdef SIGFREEZE |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2257 sys_siglist[SIGFREEZE] = "SIGFREEZE"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2258 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2259 # ifdef SIGGRANT |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2260 sys_siglist[SIGGRANT] = "Monitor mode granted"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2261 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2262 # ifdef SIGHUP |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2263 sys_siglist[SIGHUP] = "Hangup"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2264 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2265 # ifdef SIGILL |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2266 sys_siglist[SIGILL] = "Illegal instruction"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2267 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2268 # ifdef SIGINT |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2269 sys_siglist[SIGINT] = "Interrupt"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2270 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2271 # ifdef SIGIO |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2272 sys_siglist[SIGIO] = "I/O possible"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2273 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2274 # ifdef SIGIOINT |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2275 sys_siglist[SIGIOINT] = "I/O intervention required"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2276 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2277 # ifdef SIGIOT |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2278 sys_siglist[SIGIOT] = "IOT trap"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2279 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2280 # ifdef SIGKILL |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2281 sys_siglist[SIGKILL] = "Killed"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2282 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2283 # ifdef SIGLOST |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2284 sys_siglist[SIGLOST] = "Resource lost"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2285 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2286 # ifdef SIGLWP |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2287 sys_siglist[SIGLWP] = "SIGLWP"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2288 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2289 # ifdef SIGMSG |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2290 sys_siglist[SIGMSG] = "Monitor mode data available"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2291 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2292 # ifdef SIGPHONE |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2293 sys_siglist[SIGWIND] = "SIGPHONE"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2294 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2295 # ifdef SIGPIPE |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2296 sys_siglist[SIGPIPE] = "Broken pipe"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2297 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2298 # ifdef SIGPOLL |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2299 sys_siglist[SIGPOLL] = "Pollable event occurred"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2300 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2301 # ifdef SIGPROF |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2302 sys_siglist[SIGPROF] = "Profiling timer expired"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2303 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2304 # ifdef SIGPTY |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2305 sys_siglist[SIGPTY] = "PTY I/O interrupt"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2306 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2307 # ifdef SIGPWR |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2308 sys_siglist[SIGPWR] = "Power-fail restart"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2309 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2310 # ifdef SIGQUIT |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2311 sys_siglist[SIGQUIT] = "Quit"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2312 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2313 # ifdef SIGRETRACT |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2314 sys_siglist[SIGRETRACT] = "Need to relinguish monitor mode"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2315 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2316 # ifdef SIGSAK |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2317 sys_siglist[SIGSAK] = "Secure attention"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2318 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2319 # ifdef SIGSEGV |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2320 sys_siglist[SIGSEGV] = "Segmentation violation"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2321 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2322 # ifdef SIGSOUND |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2323 sys_siglist[SIGSOUND] = "Sound completed"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2324 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2325 # ifdef SIGSTOP |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2326 sys_siglist[SIGSTOP] = "Stopped (signal)"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2327 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2328 # ifdef SIGSTP |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2329 sys_siglist[SIGSTP] = "Stopped (user)"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2330 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2331 # ifdef SIGSYS |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2332 sys_siglist[SIGSYS] = "Bad argument to system call"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2333 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2334 # ifdef SIGTERM |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2335 sys_siglist[SIGTERM] = "Terminated"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2336 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2337 # ifdef SIGTHAW |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2338 sys_siglist[SIGTHAW] = "SIGTHAW"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2339 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2340 # ifdef SIGTRAP |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2341 sys_siglist[SIGTRAP] = "Trace/breakpoint trap"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2342 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2343 # ifdef SIGTSTP |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2344 sys_siglist[SIGTSTP] = "Stopped (user)"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2345 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2346 # ifdef SIGTTIN |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2347 sys_siglist[SIGTTIN] = "Stopped (tty input)"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2348 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2349 # ifdef SIGTTOU |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2350 sys_siglist[SIGTTOU] = "Stopped (tty output)"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2351 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2352 # ifdef SIGURG |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2353 sys_siglist[SIGURG] = "Urgent I/O condition"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2354 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2355 # ifdef SIGUSR1 |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2356 sys_siglist[SIGUSR1] = "User defined signal 1"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2357 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2358 # ifdef SIGUSR2 |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2359 sys_siglist[SIGUSR2] = "User defined signal 2"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2360 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2361 # ifdef SIGVTALRM |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2362 sys_siglist[SIGVTALRM] = "Virtual timer expired"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2363 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2364 # ifdef SIGWAITING |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2365 sys_siglist[SIGWAITING] = "Process's LWPs are blocked"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2366 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2367 # ifdef SIGWINCH |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2368 sys_siglist[SIGWINCH] = "Window size changed"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2369 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2370 # ifdef SIGWIND |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2371 sys_siglist[SIGWIND] = "SIGWIND"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2372 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2373 # ifdef SIGXCPU |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2374 sys_siglist[SIGXCPU] = "CPU time limit exceeded"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2375 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2376 # ifdef SIGXFSZ |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2377 sys_siglist[SIGXFSZ] = "File size limit exceeded"; |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2378 # endif |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2379 } |
51552
d84e9160d869
Remove redundant include of unistd.h, stdlib.h. Use
Dave Love <fx@gnu.org>
parents:
51206
diff
changeset
|
2380 #endif /* !defined HAVE_STRSIGNAL && !defined HAVE_DECL_SYS_SIGLIST */ |
26526
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2381 } |
b7438760079b
* callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents:
26088
diff
changeset
|
2382 |
2332
bc2f7dc78412
* sysdep.c (random, srandom): Don't define these if HAVE_RANDOM is
Jim Blandy <jimb@redhat.com>
parents:
2287
diff
changeset
|
2383 #ifndef HAVE_RANDOM |
10486
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2384 #ifdef random |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2385 #define HAVE_RANDOM |
8368
0c30bec316c6
(random): Use rand differently, and distinguish BSD/USG.
Richard M. Stallman <rms@gnu.org>
parents:
8358
diff
changeset
|
2386 #endif |
8358
f9d8f778f73b
(random, srandom): Obey HAVE_RAND48 flag.
Richard M. Stallman <rms@gnu.org>
parents:
8330
diff
changeset
|
2387 #endif |
10486
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2388 |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2389 /* Figure out how many bits the system's random number generator uses. |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2390 `random' and `lrand48' are assumed to return 31 usable bits. |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2391 BSD `rand' returns a 31 bit value but the low order bits are unusable; |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2392 so we'll shift it and treat it like the 15-bit USG `rand'. */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2393 |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2394 #ifndef RAND_BITS |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2395 # ifdef HAVE_RANDOM |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2396 # define RAND_BITS 31 |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2397 # else /* !HAVE_RANDOM */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2398 # ifdef HAVE_LRAND48 |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2399 # define RAND_BITS 31 |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2400 # define random lrand48 |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2401 # else /* !HAVE_LRAND48 */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2402 # define RAND_BITS 15 |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2403 # if RAND_MAX == 32767 |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2404 # define random rand |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2405 # else /* RAND_MAX != 32767 */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2406 # if RAND_MAX == 2147483647 |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2407 # define random() (rand () >> 16) |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2408 # else /* RAND_MAX != 2147483647 */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2409 # ifdef USG |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2410 # define random rand |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2411 # else |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2412 # define random() (rand () >> 16) |
16240
b448d7632094
Replaced symbol BSD with BSD_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
16117
diff
changeset
|
2413 # endif /* !USG */ |
10486
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2414 # endif /* RAND_MAX != 2147483647 */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2415 # endif /* RAND_MAX != 32767 */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2416 # endif /* !HAVE_LRAND48 */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2417 # endif /* !HAVE_RANDOM */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2418 #endif /* !RAND_BITS */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2419 |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2420 void |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2421 seed_random (arg) |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2422 long arg; |
491 | 2423 { |
10486
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2424 #ifdef HAVE_RANDOM |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2425 srandom ((unsigned int)arg); |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2426 #else |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2427 # ifdef HAVE_LRAND48 |
8702
097fe97274e9
(srandom): Pass arg to srand48; no return value.
Karl Heuer <kwzh@gnu.org>
parents:
8699
diff
changeset
|
2428 srand48 (arg); |
10486
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2429 # else |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2430 srand ((unsigned int)arg); |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2431 # endif |
8358
f9d8f778f73b
(random, srandom): Obey HAVE_RAND48 flag.
Richard M. Stallman <rms@gnu.org>
parents:
8330
diff
changeset
|
2432 #endif |
491 | 2433 } |
2434 | |
10486
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2435 /* |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2436 * Build a full Emacs-sized word out of whatever we've got. |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2437 * This suffices even for a 64-bit architecture with a 15-bit rand. |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2438 */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2439 long |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2440 get_random () |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2441 { |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2442 long val = random (); |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2443 #if VALBITS > RAND_BITS |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2444 val = (val << RAND_BITS) ^ random (); |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2445 #if VALBITS > 2*RAND_BITS |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2446 val = (val << RAND_BITS) ^ random (); |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2447 #if VALBITS > 3*RAND_BITS |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2448 val = (val << RAND_BITS) ^ random (); |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2449 #if VALBITS > 4*RAND_BITS |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2450 val = (val << RAND_BITS) ^ random (); |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2451 #endif /* need at least 5 */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2452 #endif /* need at least 4 */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2453 #endif /* need at least 3 */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2454 #endif /* need at least 2 */ |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2455 return val & ((1L << VALBITS) - 1); |
0028c532b70b
(seed_random): Renamed from srandom.
Karl Heuer <kwzh@gnu.org>
parents:
10356
diff
changeset
|
2456 } |
5518
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2457 |
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2458 #ifndef HAVE_STRERROR |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
2459 #ifndef WINDOWSNT |
5518
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2460 char * |
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2461 strerror (errnum) |
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2462 int errnum; |
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2463 { |
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2464 extern char *sys_errlist[]; |
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2465 extern int sys_nerr; |
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2466 |
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2467 if (errnum >= 0 && errnum < sys_nerr) |
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2468 return sys_errlist[errnum]; |
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2469 return (char *) "Unknown error"; |
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2470 } |
9794
64a874af5a58
[WINDOWSNT]: Add includes for NT.
Richard M. Stallman <rms@gnu.org>
parents:
9688
diff
changeset
|
2471 #endif /* not WINDOWSNT */ |
5518
df05c1e7abe1
[! VMS]: Don't declare sys_errlist here.
Roland McGrath <roland@gnu.org>
parents:
5498
diff
changeset
|
2472 #endif /* ! HAVE_STRERROR */ |
491 | 2473 |
2474 int | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2475 emacs_open (path, oflag, mode) |
46475
148316527c61
(emacs_open, set_file_times): String pointer args now
Ken Raeburn <raeburn@raeburn.org>
parents:
46370
diff
changeset
|
2476 const char *path; |
491 | 2477 int oflag, mode; |
2478 { | |
2479 register int rtnval; | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2480 |
491 | 2481 while ((rtnval = open (path, oflag, mode)) == -1 |
58518
1a5509ec45da
(sys_signal): Don't use SA_RESTART if SYNC_INPUT is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56714
diff
changeset
|
2482 && (errno == EINTR)) |
1a5509ec45da
(sys_signal): Don't use SA_RESTART if SYNC_INPUT is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56714
diff
changeset
|
2483 QUIT; |
491 | 2484 return (rtnval); |
2485 } | |
2486 | |
21514 | 2487 int |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2488 emacs_close (fd) |
491 | 2489 int fd; |
2490 { | |
12547
63cdecbd7af4
(sys_close): Handle Sunos 4.1 bug in close errno value.
Karl Heuer <kwzh@gnu.org>
parents:
12326
diff
changeset
|
2491 int did_retry = 0; |
491 | 2492 register int rtnval; |
2493 | |
2494 while ((rtnval = close (fd)) == -1 | |
12547
63cdecbd7af4
(sys_close): Handle Sunos 4.1 bug in close errno value.
Karl Heuer <kwzh@gnu.org>
parents:
12326
diff
changeset
|
2495 && (errno == EINTR)) |
63cdecbd7af4
(sys_close): Handle Sunos 4.1 bug in close errno value.
Karl Heuer <kwzh@gnu.org>
parents:
12326
diff
changeset
|
2496 did_retry = 1; |
63cdecbd7af4
(sys_close): Handle Sunos 4.1 bug in close errno value.
Karl Heuer <kwzh@gnu.org>
parents:
12326
diff
changeset
|
2497 |
63cdecbd7af4
(sys_close): Handle Sunos 4.1 bug in close errno value.
Karl Heuer <kwzh@gnu.org>
parents:
12326
diff
changeset
|
2498 /* If close is interrupted SunOS 4.1 may or may not have closed the |
63cdecbd7af4
(sys_close): Handle Sunos 4.1 bug in close errno value.
Karl Heuer <kwzh@gnu.org>
parents:
12326
diff
changeset
|
2499 file descriptor. If it did the second close will fail with |
63cdecbd7af4
(sys_close): Handle Sunos 4.1 bug in close errno value.
Karl Heuer <kwzh@gnu.org>
parents:
12326
diff
changeset
|
2500 errno = EBADF. That means we have succeeded. */ |
63cdecbd7af4
(sys_close): Handle Sunos 4.1 bug in close errno value.
Karl Heuer <kwzh@gnu.org>
parents:
12326
diff
changeset
|
2501 if (rtnval == -1 && did_retry && errno == EBADF) |
63cdecbd7af4
(sys_close): Handle Sunos 4.1 bug in close errno value.
Karl Heuer <kwzh@gnu.org>
parents:
12326
diff
changeset
|
2502 return 0; |
63cdecbd7af4
(sys_close): Handle Sunos 4.1 bug in close errno value.
Karl Heuer <kwzh@gnu.org>
parents:
12326
diff
changeset
|
2503 |
491 | 2504 return rtnval; |
2505 } | |
2506 | |
2507 int | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2508 emacs_read (fildes, buf, nbyte) |
491 | 2509 int fildes; |
2510 char *buf; | |
2511 unsigned int nbyte; | |
2512 { | |
2513 register int rtnval; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
2514 |
491 | 2515 while ((rtnval = read (fildes, buf, nbyte)) == -1 |
58518
1a5509ec45da
(sys_signal): Don't use SA_RESTART if SYNC_INPUT is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56714
diff
changeset
|
2516 && (errno == EINTR)) |
1a5509ec45da
(sys_signal): Don't use SA_RESTART if SYNC_INPUT is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56714
diff
changeset
|
2517 QUIT; |
491 | 2518 return (rtnval); |
2519 } | |
2520 | |
2521 int | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2522 emacs_write (fildes, buf, nbyte) |
491 | 2523 int fildes; |
46558
d613ff01b7a8
(emacs_write): Buffer pointer now const.
Ken Raeburn <raeburn@raeburn.org>
parents:
46475
diff
changeset
|
2524 const char *buf; |
491 | 2525 unsigned int nbyte; |
2526 { | |
4772
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2527 register int rtnval, bytes_written; |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2528 |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2529 bytes_written = 0; |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2530 |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2531 while (nbyte > 0) |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2532 { |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2533 rtnval = write (fildes, buf, nbyte); |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2534 |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2535 if (rtnval == -1) |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2536 { |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2537 if (errno == EINTR) |
58621
62f194448b68
(emacs_write): Don't use QUIT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58518
diff
changeset
|
2538 { |
62f194448b68
(emacs_write): Don't use QUIT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58518
diff
changeset
|
2539 #ifdef SYNC_INPUT |
62f194448b68
(emacs_write): Don't use QUIT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58518
diff
changeset
|
2540 /* I originally used `QUIT' but that might causes files to |
62f194448b68
(emacs_write): Don't use QUIT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58518
diff
changeset
|
2541 be truncated if you hit C-g in the middle of it. --Stef */ |
101646
18eabb5ae6df
(emacs_write): Use process_pending_signals.
Chong Yidong <cyd@stupidchicken.com>
parents:
100862
diff
changeset
|
2542 process_pending_signals (); |
58621
62f194448b68
(emacs_write): Don't use QUIT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58518
diff
changeset
|
2543 #endif |
62f194448b68
(emacs_write): Don't use QUIT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58518
diff
changeset
|
2544 continue; |
62f194448b68
(emacs_write): Don't use QUIT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
58518
diff
changeset
|
2545 } |
4772
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2546 else |
5954
02f406110e4b
(sys_write): If any bytes were written, return how many.
Richard M. Stallman <rms@gnu.org>
parents:
5937
diff
changeset
|
2547 return (bytes_written ? bytes_written : -1); |
4772
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2548 } |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2549 |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2550 buf += rtnval; |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2551 nbyte -= rtnval; |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2552 bytes_written += rtnval; |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2553 } |
2c6033bfb871
(sys_write): Keep trying to write out the data until
Brian Fox <bfox@gnu.org>
parents:
4708
diff
changeset
|
2554 return (bytes_written); |
491 | 2555 } |
2556 | |
2557 #ifdef USG | |
2558 /* | |
2559 * All of the following are for USG. | |
2560 * | |
2561 * On USG systems the system calls are INTERRUPTIBLE by signals | |
2562 * that the user program has elected to catch. Thus the system call | |
2563 * must be retried in these cases. To handle this without massive | |
2564 * changes in the source code, we remap the standard system call names | |
2565 * to names for our own functions in sysdep.c that do the system call | |
2566 * with retries. Actually, for portability reasons, it is good | |
2567 * programming practice, as this example shows, to limit all actual | |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3559
diff
changeset
|
2568 * system calls to a single occurrence in the source. Sure, this |
491 | 2569 * adds an extra level of function call overhead but it is almost |
2570 * always negligible. Fred Fish, Unisoft Systems Inc. | |
2571 */ | |
2572 | |
2573 /* | |
2574 * Warning, this function may not duplicate 4.2 action properly | |
2575 * under error conditions. | |
2576 */ | |
2577 | |
2578 #ifndef MAXPATHLEN | |
2579 /* In 4.1, param.h fails to define this. */ | |
2580 #define MAXPATHLEN 1024 | |
2581 #endif | |
2582 | |
2583 #ifndef HAVE_GETWD | |
2584 | |
2585 char * | |
2586 getwd (pathname) | |
2587 char *pathname; | |
2588 { | |
2589 char *npath, *spath; | |
2590 extern char *getcwd (); | |
2591 | |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2332
diff
changeset
|
2592 BLOCK_INPUT; /* getcwd uses malloc */ |
491 | 2593 spath = npath = getcwd ((char *) 0, MAXPATHLEN); |
5136
500f269bf0a8
(getwd): If getcwd returns 0, we return 0.
Richard M. Stallman <rms@gnu.org>
parents:
4958
diff
changeset
|
2594 if (spath == 0) |
37219
78542938ed28
(getwd) [!HAVE_GETWD]: Unblock input before returning.
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
2595 { |
78542938ed28
(getwd) [!HAVE_GETWD]: Unblock input before returning.
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
2596 UNBLOCK_INPUT; |
78542938ed28
(getwd) [!HAVE_GETWD]: Unblock input before returning.
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
2597 return spath; |
78542938ed28
(getwd) [!HAVE_GETWD]: Unblock input before returning.
Gerd Moellmann <gerd@gnu.org>
parents:
35336
diff
changeset
|
2598 } |
491 | 2599 /* On Altos 3068, getcwd can return @hostname/dir, so discard |
2600 up to first slash. Should be harmless on other systems. */ | |
2601 while (*npath && *npath != '/') | |
2602 npath++; | |
2603 strcpy (pathname, npath); | |
2604 free (spath); /* getcwd uses malloc */ | |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2332
diff
changeset
|
2605 UNBLOCK_INPUT; |
491 | 2606 return pathname; |
2607 } | |
2608 | |
2609 #endif /* HAVE_GETWD */ | |
2610 | |
2611 /* | |
2612 * Emulate rename using unlink/link. Note that this is | |
2613 * only partially correct. Also, doesn't enforce restriction | |
2614 * that files be of same type (regular->regular, dir->dir, etc). | |
2615 */ | |
2616 | |
621 | 2617 #ifndef HAVE_RENAME |
2618 | |
491 | 2619 rename (from, to) |
3842
e8bcf96f1418
* sysdep.c (rename): Make arguments const. autoconf #defines
Jim Blandy <jimb@redhat.com>
parents:
3826
diff
changeset
|
2620 const char *from; |
e8bcf96f1418
* sysdep.c (rename): Make arguments const. autoconf #defines
Jim Blandy <jimb@redhat.com>
parents:
3826
diff
changeset
|
2621 const char *to; |
491 | 2622 { |
2623 if (access (from, 0) == 0) | |
2624 { | |
2625 unlink (to); | |
2626 if (link (from, to) == 0) | |
2627 if (unlink (from) == 0) | |
2628 return (0); | |
2629 } | |
2630 return (-1); | |
2631 } | |
2632 | |
621 | 2633 #endif |
2634 | |
491 | 2635 |
97141
840bd675fd85
* s/ms-w32.h (MULTI_KBOARD): Remove.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
97119
diff
changeset
|
2636 #if defined(HPUX) && !defined(HAVE_PERROR) |
491 | 2637 |
2638 /* HPUX curses library references perror, but as far as we know | |
2639 it won't be called. Anyway this definition will do for now. */ | |
2640 | |
2641 perror () | |
2642 { | |
2643 } | |
97141
840bd675fd85
* s/ms-w32.h (MULTI_KBOARD): Remove.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
97119
diff
changeset
|
2644 #endif /* HPUX and not HAVE_PERROR */ |
491 | 2645 |
2646 #ifndef HAVE_DUP2 | |
2647 | |
2648 /* | |
2649 * Emulate BSD dup2. First close newd if it already exists. | |
2650 * Then, attempt to dup oldd. If not successful, call dup2 recursively | |
2651 * until we are, then close the unsuccessful ones. | |
2652 */ | |
2653 | |
2654 dup2 (oldd, newd) | |
2655 int oldd; | |
2656 int newd; | |
2657 { | |
2658 register int fd, ret; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
2659 |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2660 emacs_close (newd); |
491 | 2661 |
2662 #ifdef F_DUPFD | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2663 return fcntl (oldd, F_DUPFD, newd); |
491 | 2664 #else |
2665 fd = dup (old); | |
2666 if (fd == -1) | |
2667 return -1; | |
2668 if (fd == new) | |
2669 return new; | |
2670 ret = dup2 (old,new); | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2671 emacs_close (fd); |
491 | 2672 return ret; |
2673 #endif | |
2674 } | |
2675 | |
2676 #endif /* not HAVE_DUP2 */ | |
2677 | |
2678 /* | |
2679 * Gettimeofday. Simulate as much as possible. Only accurate | |
2680 * to nearest second. Emacs doesn't use tzp so ignore it for now. | |
2681 * Only needed when subprocesses are defined. | |
2682 */ | |
2683 | |
2684 #ifdef subprocesses | |
2685 #ifndef HAVE_GETTIMEOFDAY | |
2686 #ifdef HAVE_TIMEVAL | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
2687 |
491 | 2688 /* ARGSUSED */ |
21514 | 2689 int |
491 | 2690 gettimeofday (tp, tzp) |
2691 struct timeval *tp; | |
2692 struct timezone *tzp; | |
2693 { | |
2694 extern long time (); | |
2695 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
2696 tp->tv_sec = time ((long *)0); |
491 | 2697 tp->tv_usec = 0; |
3239
2e4882a32671
(gettimeofday): Don't store in *tzp if tzp is 0.
Richard M. Stallman <rms@gnu.org>
parents:
3157
diff
changeset
|
2698 if (tzp != 0) |
2e4882a32671
(gettimeofday): Don't store in *tzp if tzp is 0.
Richard M. Stallman <rms@gnu.org>
parents:
3157
diff
changeset
|
2699 tzp->tz_minuteswest = -1; |
21514 | 2700 return 0; |
491 | 2701 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
2702 |
491 | 2703 #endif |
2704 #endif | |
97142 | 2705 #endif /* subprocess && !HAVE_GETTIMEOFDAY && HAVE_TIMEVAL */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48741
diff
changeset
|
2706 |
491 | 2707 /* |
2708 * This function will go away as soon as all the stubs fixed. (fnf) | |
2709 */ | |
2710 | |
21514 | 2711 void |
491 | 2712 croak (badfunc) |
2713 char *badfunc; | |
2714 { | |
2715 printf ("%s not yet implemented\r\n", badfunc); | |
53226
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
53225
diff
changeset
|
2716 reset_all_sys_modes (); |
491 | 2717 exit (1); |
2718 } | |
2719 | |
2720 #endif /* USG */ | |
2721 | |
2722 /* Directory routines for systems that don't have them. */ | |
2723 | |
2724 #ifdef SYSV_SYSTEM_DIR | |
2725 | |
2726 #include <dirent.h> | |
2727 | |
97119
b57392641da7
* systty.h (sensemode): Remove empty #if. Remove reference to
Dan Nicolaescu <dann@ics.uci.edu>
parents:
97043
diff
changeset
|
2728 #if !defined (HAVE_CLOSEDIR) |
5158
035f80625c5e
(closedir): Pass on the value from sys_closedir.
Richard M. Stallman <rms@gnu.org>
parents:
5136
diff
changeset
|
2729 |
491 | 2730 int |
97119
b57392641da7
* systty.h (sensemode): Remove empty #if. Remove reference to
Dan Nicolaescu <dann@ics.uci.edu>
parents:
97043
diff
changeset
|
2731 closedir (DIR *dirp /* stream from opendir */) |
491 | 2732 { |
5158
035f80625c5e
(closedir): Pass on the value from sys_closedir.
Richard M. Stallman <rms@gnu.org>
parents:
5136
diff
changeset
|
2733 int rtnval; |
035f80625c5e
(closedir): Pass on the value from sys_closedir.
Richard M. Stallman <rms@gnu.org>
parents:
5136
diff
changeset
|
2734 |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2735 rtnval = emacs_close (dirp->dd_fd); |
3760
e0be9df19ee1
* sysdep.c (closedir): Don't free directory buffer if it looks
Jim Blandy <jimb@redhat.com>
parents:
3759
diff
changeset
|
2736 |
3797
68807e370e9d
Changes for correct pgrp behavior; approach suggested by Bob
Jim Blandy <jimb@redhat.com>
parents:
3760
diff
changeset
|
2737 /* Some systems (like Solaris) allocate the buffer and the DIR all |
68807e370e9d
Changes for correct pgrp behavior; approach suggested by Bob
Jim Blandy <jimb@redhat.com>
parents:
3760
diff
changeset
|
2738 in one block. Why in the world are we freeing this ourselves |
68807e370e9d
Changes for correct pgrp behavior; approach suggested by Bob
Jim Blandy <jimb@redhat.com>
parents:
3760
diff
changeset
|
2739 anyway? */ |
96833
c06568fd3844
* s/usg5-4.h (LIBS_SYSTEM): Remove, system for which this was
Dan Nicolaescu <dann@ics.uci.edu>
parents:
96727
diff
changeset
|
2740 #if ! defined (SOLARIS2) |
3797
68807e370e9d
Changes for correct pgrp behavior; approach suggested by Bob
Jim Blandy <jimb@redhat.com>
parents:
3760
diff
changeset
|
2741 xfree ((char *) dirp->dd_buf); /* directory block defined in <dirent.h> */ |
68807e370e9d
Changes for correct pgrp behavior; approach suggested by Bob
Jim Blandy <jimb@redhat.com>
parents:
3760
diff
changeset
|
2742 #endif |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2332
diff
changeset
|
2743 xfree ((char *) dirp); |
5158
035f80625c5e
(closedir): Pass on the value from sys_closedir.
Richard M. Stallman <rms@gnu.org>
parents:
5136
diff
changeset
|
2744 |
035f80625c5e
(closedir): Pass on the value from sys_closedir.
Richard M. Stallman <rms@gnu.org>
parents:
5136
diff
changeset
|
2745 return rtnval; |
491 | 2746 } |
97119
b57392641da7
* systty.h (sensemode): Remove empty #if. Remove reference to
Dan Nicolaescu <dann@ics.uci.edu>
parents:
97043
diff
changeset
|
2747 #endif /* not HAVE_CLOSEDIR */ |
491 | 2748 #endif /* SYSV_SYSTEM_DIR */ |
2749 | |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2750 |
8934
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2751 int |
9082
2c6875700c9f
(set_file_times): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
9081
diff
changeset
|
2752 set_file_times (filename, atime, mtime) |
46475
148316527c61
(emacs_open, set_file_times): String pointer args now
Ken Raeburn <raeburn@raeburn.org>
parents:
46370
diff
changeset
|
2753 const char *filename; |
8934
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2754 EMACS_TIME atime, mtime; |
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2755 { |
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2756 #ifdef HAVE_UTIMES |
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2757 struct timeval tv[2]; |
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2758 tv[0] = atime; |
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2759 tv[1] = mtime; |
9081
b85ea5d23089
(set_file_times): Don't test HAVE_UTIME.
Richard M. Stallman <rms@gnu.org>
parents:
9075
diff
changeset
|
2760 return utimes (filename, tv); |
b85ea5d23089
(set_file_times): Don't test HAVE_UTIME.
Richard M. Stallman <rms@gnu.org>
parents:
9075
diff
changeset
|
2761 #else /* not HAVE_UTIMES */ |
8934
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2762 struct utimbuf utb; |
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2763 utb.actime = EMACS_SECS (atime); |
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2764 utb.modtime = EMACS_SECS (mtime); |
9081
b85ea5d23089
(set_file_times): Don't test HAVE_UTIME.
Richard M. Stallman <rms@gnu.org>
parents:
9075
diff
changeset
|
2765 return utime (filename, &utb); |
b85ea5d23089
(set_file_times): Don't test HAVE_UTIME.
Richard M. Stallman <rms@gnu.org>
parents:
9075
diff
changeset
|
2766 #endif /* not HAVE_UTIMES */ |
8934
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2767 } |
e743d2957399
(set_file_times): Move this out of the USG conditional.
Karl Heuer <kwzh@gnu.org>
parents:
8881
diff
changeset
|
2768 |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2769 /* mkdir and rmdir functions, for systems which don't have them. */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2770 |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2771 #ifndef HAVE_MKDIR |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2772 /* |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2773 * Written by Robert Rother, Mariah Corporation, August 1985. |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2774 * |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2775 * If you want it, it's yours. All I ask in return is that if you |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2776 * figure out how to do this in a Bourne Shell script you send me |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2777 * a copy. |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2778 * sdcsvax!rmr or rmr@uscd |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2779 * |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2780 * Severely hacked over by John Gilmore to make a 4.2BSD compatible |
74145 | 2781 * subroutine. 11Mar86; hoptoad!gnu |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2782 * |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2783 * Modified by rmtodd@uokmax 6-28-87 -- when making an already existing dir, |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2784 * subroutine didn't return EEXIST. It does now. |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2785 */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2786 |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2787 /* |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2788 * Make a directory. |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2789 */ |
5682
9204cb4fdad9
(mkdir): Use MKDIR_PROTOTYPE if defined.
Richard M. Stallman <rms@gnu.org>
parents:
5594
diff
changeset
|
2790 #ifdef MKDIR_PROTOTYPE |
9204cb4fdad9
(mkdir): Use MKDIR_PROTOTYPE if defined.
Richard M. Stallman <rms@gnu.org>
parents:
5594
diff
changeset
|
2791 MKDIR_PROTOTYPE |
9204cb4fdad9
(mkdir): Use MKDIR_PROTOTYPE if defined.
Richard M. Stallman <rms@gnu.org>
parents:
5594
diff
changeset
|
2792 #else |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2793 int |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2794 mkdir (dpath, dmode) |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2795 char *dpath; |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2796 int dmode; |
5682
9204cb4fdad9
(mkdir): Use MKDIR_PROTOTYPE if defined.
Richard M. Stallman <rms@gnu.org>
parents:
5594
diff
changeset
|
2797 #endif |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2798 { |
4643
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2799 int cpid, status, fd; |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2800 struct stat statbuf; |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2801 |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2802 if (stat (dpath, &statbuf) == 0) |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2803 { |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2804 errno = EEXIST; /* Stat worked, so it already exists */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2805 return -1; |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2806 } |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2807 |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2808 /* If stat fails for a reason other than non-existence, return error */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2809 if (errno != ENOENT) |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2810 return -1; |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2811 |
4643
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2812 synch_process_alive = 1; |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2813 switch (cpid = fork ()) |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2814 { |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2815 |
4643
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2816 case -1: /* Error in fork */ |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2817 return (-1); /* Errno is set already */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2818 |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2819 case 0: /* Child process */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2820 /* |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2821 * Cheap hack to set mode of new directory. Since this |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2822 * child process is going away anyway, we zap its umask. |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2823 * FIXME, this won't suffice to set SUID, SGID, etc. on this |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2824 * directory. Does anybody care? |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2825 */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2826 status = umask (0); /* Get current umask */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2827 status = umask (status | (0777 & ~dmode)); /* Set for mkdir */ |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2828 fd = emacs_open ("/dev/null", O_RDWR, 0); |
4643
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2829 if (fd >= 0) |
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2830 { |
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2831 dup2 (fd, 0); |
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2832 dup2 (fd, 1); |
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2833 dup2 (fd, 2); |
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2834 } |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2835 execl ("/bin/mkdir", "mkdir", dpath, (char *) 0); |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2836 _exit (-1); /* Can't exec /bin/mkdir */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2837 |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2838 default: /* Parent process */ |
4643
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2839 wait_for_termination (cpid); |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2840 } |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2841 |
53715
811d720ddd2b
(mkdir, rmdir): Also check synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2842 if (synch_process_death != 0 || synch_process_retcode != 0 |
811d720ddd2b
(mkdir, rmdir): Also check synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2843 || synch_process_termsig != 0) |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2844 { |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2845 errno = EIO; /* We don't know why, but */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2846 return -1; /* /bin/mkdir failed */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2847 } |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2848 |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2849 return 0; |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2850 } |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2851 #endif /* not HAVE_MKDIR */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2852 |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2853 #ifndef HAVE_RMDIR |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2854 int |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2855 rmdir (dpath) |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2856 char *dpath; |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2857 { |
4643
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2858 int cpid, status, fd; |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2859 struct stat statbuf; |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2860 |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2861 if (stat (dpath, &statbuf) != 0) |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2862 { |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2863 /* Stat just set errno. We don't have to */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2864 return -1; |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2865 } |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2866 |
4643
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2867 synch_process_alive = 1; |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2868 switch (cpid = fork ()) |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2869 { |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2870 |
4643
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2871 case -1: /* Error in fork */ |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2872 return (-1); /* Errno is set already */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2873 |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2874 case 0: /* Child process */ |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2875 fd = emacs_open ("/dev/null", O_RDWR, 0); |
4643
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2876 if (fd >= 0) |
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2877 { |
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2878 dup2 (fd, 0); |
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2879 dup2 (fd, 1); |
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2880 dup2 (fd, 2); |
004c38daf0ae
(mkdir, rmdir): Use wait_for_termination to wait.
Richard M. Stallman <rms@gnu.org>
parents:
4640
diff
changeset
|
2881 } |
12326
b99947e6b447
(rmdir): Fix up Aug 19 1993 change that wasn't done right.
Richard M. Stallman <rms@gnu.org>
parents:
12231
diff
changeset
|
2882 execl ("/bin/rmdir", "rmdir", dpath, (char *) 0); |
b99947e6b447
(rmdir): Fix up Aug 19 1993 change that wasn't done right.
Richard M. Stallman <rms@gnu.org>
parents:
12231
diff
changeset
|
2883 _exit (-1); /* Can't exec /bin/rmdir */ |
b99947e6b447
(rmdir): Fix up Aug 19 1993 change that wasn't done right.
Richard M. Stallman <rms@gnu.org>
parents:
12231
diff
changeset
|
2884 |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2885 default: /* Parent process */ |
12326
b99947e6b447
(rmdir): Fix up Aug 19 1993 change that wasn't done right.
Richard M. Stallman <rms@gnu.org>
parents:
12231
diff
changeset
|
2886 wait_for_termination (cpid); |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2887 } |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2888 |
53715
811d720ddd2b
(mkdir, rmdir): Also check synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2889 if (synch_process_death != 0 || synch_process_retcode != 0 |
811d720ddd2b
(mkdir, rmdir): Also check synch_process_termsig.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2890 || synch_process_termsig != 0) |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2891 { |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2892 errno = EIO; /* We don't know why, but */ |
12326
b99947e6b447
(rmdir): Fix up Aug 19 1993 change that wasn't done right.
Richard M. Stallman <rms@gnu.org>
parents:
12231
diff
changeset
|
2893 return -1; /* /bin/rmdir failed */ |
4438
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2894 } |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2895 |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2896 return 0; |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2897 } |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2898 #endif /* !HAVE_RMDIR */ |
aaab60c46bff
* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for
Jim Blandy <jimb@redhat.com>
parents:
4430
diff
changeset
|
2899 |
491 | 2900 |
11258
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2901 #ifndef BSTRING |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2902 |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2903 #ifndef bzero |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2904 |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2905 void |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2906 bzero (b, length) |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2907 register char *b; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2908 register int length; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2909 { |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2910 while (length-- > 0) |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2911 *b++ = 0; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2912 } |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2913 |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2914 #endif /* no bzero */ |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2915 #endif /* BSTRING */ |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2916 |
11722
d7089b2620fb
(bcmp, bcopy): Fix backward BSTRING conditionals.
Richard M. Stallman <rms@gnu.org>
parents:
11624
diff
changeset
|
2917 #if (!defined (BSTRING) && !defined (bcopy)) || defined (NEED_BCOPY) |
11258
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2918 #undef bcopy |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2919 |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2920 /* Saying `void' requires a declaration, above, where bcopy is used |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2921 and that declaration causes pain for systems where bcopy is a macro. */ |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2922 bcopy (b1, b2, length) |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2923 register char *b1; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2924 register char *b2; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2925 register int length; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2926 { |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2927 while (length-- > 0) |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2928 *b2++ = *b1++; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2929 } |
21514 | 2930 #endif /* (!defined (BSTRING) && !defined (bcopy)) || defined (NEED_BCOPY) */ |
11258
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2931 |
11722
d7089b2620fb
(bcmp, bcopy): Fix backward BSTRING conditionals.
Richard M. Stallman <rms@gnu.org>
parents:
11624
diff
changeset
|
2932 #ifndef BSTRING |
11258
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2933 #ifndef bcmp |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2934 int |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2935 bcmp (b1, b2, length) /* This could be a macro! */ |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2936 register char *b1; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2937 register char *b2; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2938 register int length; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2939 { |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2940 while (length-- > 0) |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2941 if (*b1++ != *b2++) |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2942 return 1; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2943 |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2944 return 0; |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2945 } |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2946 #endif /* no bcmp */ |
eff46f465625
(bcopy): If NEED_BCOPY, do compile this.
Richard M. Stallman <rms@gnu.org>
parents:
10946
diff
changeset
|
2947 #endif /* not BSTRING */ |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2948 |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2949 #ifndef HAVE_STRSIGNAL |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2950 char * |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2951 strsignal (code) |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2952 int code; |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2953 { |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2954 char *signame = 0; |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2955 |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2956 if (0 <= code && code < NSIG) |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2957 { |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2958 /* Cast to suppress warning if the table has const char *. */ |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2959 signame = (char *) sys_siglist[code]; |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2960 } |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2961 |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2962 return signame; |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2963 } |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25674
diff
changeset
|
2964 #endif /* HAVE_STRSIGNAL */ |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2965 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2966 #ifdef HAVE_TERMIOS |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2967 /* For make-serial-process */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2968 int serial_open (char *port) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2969 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2970 int fd = -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2971 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2972 fd = emacs_open ((char*) port, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2973 O_RDWR |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2974 #ifdef O_NONBLOCK |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2975 | O_NONBLOCK |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2976 #else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2977 | O_NDELAY |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2978 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2979 #ifdef O_NOCTTY |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2980 | O_NOCTTY |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2981 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2982 , 0); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2983 if (fd < 0) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2984 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2985 error ("Could not open %s: %s", |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2986 port, emacs_strerror (errno)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2987 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2988 #ifdef TIOCEXCL |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2989 ioctl (fd, TIOCEXCL, (char *) 0); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2990 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2991 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2992 return fd; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2993 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2994 #endif /* TERMIOS */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2995 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
2996 #ifdef HAVE_TERMIOS |
96099
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
2997 |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
2998 #if !defined (HAVE_CFMAKERAW) |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
2999 /* Workaround for targets which are missing cfmakeraw. */ |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3000 /* Pasted from man page. */ |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3001 static void cfmakeraw (struct termios *termios_p) |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3002 { |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3003 termios_p->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3004 termios_p->c_oflag &= ~OPOST; |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3005 termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3006 termios_p->c_cflag &= ~(CSIZE|PARENB); |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3007 termios_p->c_cflag |= CS8; |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3008 } |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3009 #endif /* !defined (HAVE_CFMAKERAW */ |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3010 |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3011 #if !defined (HAVE_CFSETSPEED) |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3012 /* Workaround for targets which are missing cfsetspeed. */ |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3013 static int cfsetspeed (struct termios *termios_p, speed_t vitesse) |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3014 { |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3015 return (cfsetispeed (termios_p, vitesse) |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3016 + cfsetospeed (termios_p, vitesse)); |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3017 } |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3018 #endif |
eb403674cfbf
(cfsetspeed): New fun extracted from the code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96098
diff
changeset
|
3019 |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3020 /* For serial-process-configure */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3021 void |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3022 serial_configure (struct Lisp_Process *p, |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3023 Lisp_Object contact) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3024 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3025 Lisp_Object childp2 = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3026 Lisp_Object tem = Qnil; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3027 struct termios attr; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3028 int err = -1; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3029 char summary[4] = "???"; /* This usually becomes "8N1". */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3030 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3031 childp2 = Fcopy_sequence (p->childp); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3032 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3033 /* Read port attributes and prepare default configuration. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3034 err = tcgetattr (p->outfd, &attr); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3035 if (err != 0) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3036 error ("tcgetattr() failed: %s", emacs_strerror (errno)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3037 cfmakeraw (&attr); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3038 #if defined (CLOCAL) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3039 attr.c_cflag |= CLOCAL; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3040 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3041 #if defined (CREAD) |
100574
6b3d372af944
(serial_configure): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100572
diff
changeset
|
3042 attr.c_cflag |= CREAD; |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3043 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3044 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3045 /* Configure speed. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3046 if (!NILP (Fplist_member (contact, QCspeed))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3047 tem = Fplist_get (contact, QCspeed); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3048 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3049 tem = Fplist_get (p->childp, QCspeed); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3050 CHECK_NUMBER (tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3051 err = cfsetspeed (&attr, XINT (tem)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3052 if (err != 0) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3053 error ("cfsetspeed(%d) failed: %s", XINT (tem), emacs_strerror (errno)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3054 childp2 = Fplist_put (childp2, QCspeed, tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3055 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3056 /* Configure bytesize. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3057 if (!NILP (Fplist_member (contact, QCbytesize))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3058 tem = Fplist_get (contact, QCbytesize); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3059 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3060 tem = Fplist_get (p->childp, QCbytesize); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3061 if (NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3062 tem = make_number (8); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3063 CHECK_NUMBER (tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3064 if (XINT (tem) != 7 && XINT (tem) != 8) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3065 error (":bytesize must be nil (8), 7, or 8"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3066 summary[0] = XINT(tem) + '0'; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3067 #if defined (CSIZE) && defined (CS7) && defined (CS8) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3068 attr.c_cflag &= ~CSIZE; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3069 attr.c_cflag |= ((XINT (tem) == 7) ? CS7 : CS8); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3070 #else |
96309 | 3071 /* Don't error on bytesize 8, which should be set by cfmakeraw. */ |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3072 if (XINT (tem) != 8) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3073 error ("Bytesize cannot be changed"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3074 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3075 childp2 = Fplist_put (childp2, QCbytesize, tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3076 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3077 /* Configure parity. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3078 if (!NILP (Fplist_member (contact, QCparity))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3079 tem = Fplist_get (contact, QCparity); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3080 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3081 tem = Fplist_get (p->childp, QCparity); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3082 if (!NILP (tem) && !EQ (tem, Qeven) && !EQ (tem, Qodd)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3083 error (":parity must be nil (no parity), `even', or `odd'"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3084 #if defined (PARENB) && defined (PARODD) && defined (IGNPAR) && defined (INPCK) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3085 attr.c_cflag &= ~(PARENB | PARODD); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3086 attr.c_iflag &= ~(IGNPAR | INPCK); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3087 if (NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3088 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3089 summary[1] = 'N'; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3090 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3091 else if (EQ (tem, Qeven)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3092 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3093 summary[1] = 'E'; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3094 attr.c_cflag |= PARENB; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3095 attr.c_iflag |= (IGNPAR | INPCK); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3096 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3097 else if (EQ (tem, Qodd)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3098 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3099 summary[1] = 'O'; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3100 attr.c_cflag |= (PARENB | PARODD); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3101 attr.c_iflag |= (IGNPAR | INPCK); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3102 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3103 #else |
96309 | 3104 /* Don't error on no parity, which should be set by cfmakeraw. */ |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3105 if (!NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3106 error ("Parity cannot be configured"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3107 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3108 childp2 = Fplist_put (childp2, QCparity, tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3109 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3110 /* Configure stopbits. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3111 if (!NILP (Fplist_member (contact, QCstopbits))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3112 tem = Fplist_get (contact, QCstopbits); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3113 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3114 tem = Fplist_get (p->childp, QCstopbits); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3115 if (NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3116 tem = make_number (1); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3117 CHECK_NUMBER (tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3118 if (XINT (tem) != 1 && XINT (tem) != 2) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3119 error (":stopbits must be nil (1 stopbit), 1, or 2"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3120 summary[2] = XINT (tem) + '0'; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3121 #if defined (CSTOPB) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3122 attr.c_cflag &= ~CSTOPB; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3123 if (XINT (tem) == 2) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3124 attr.c_cflag |= CSTOPB; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3125 #else |
96309 | 3126 /* Don't error on 1 stopbit, which should be set by cfmakeraw. */ |
95884
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3127 if (XINT (tem) != 1) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3128 error ("Stopbits cannot be configured"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3129 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3130 childp2 = Fplist_put (childp2, QCstopbits, tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3131 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3132 /* Configure flowcontrol. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3133 if (!NILP (Fplist_member (contact, QCflowcontrol))) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3134 tem = Fplist_get (contact, QCflowcontrol); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3135 else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3136 tem = Fplist_get (p->childp, QCflowcontrol); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3137 if (!NILP (tem) && !EQ (tem, Qhw) && !EQ (tem, Qsw)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3138 error (":flowcontrol must be nil (no flowcontrol), `hw', or `sw'"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3139 #if defined (CRTSCTS) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3140 attr.c_cflag &= ~CRTSCTS; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3141 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3142 #if defined (CNEW_RTSCTS) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3143 attr.c_cflag &= ~CNEW_RTSCTS; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3144 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3145 #if defined (IXON) && defined (IXOFF) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3146 attr.c_iflag &= ~(IXON | IXOFF); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3147 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3148 if (NILP (tem)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3149 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3150 /* Already configured. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3151 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3152 else if (EQ (tem, Qhw)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3153 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3154 #if defined (CRTSCTS) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3155 attr.c_cflag |= CRTSCTS; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3156 #elif defined (CNEW_RTSCTS) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3157 attr.c_cflag |= CNEW_RTSCTS; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3158 #else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3159 error ("Hardware flowcontrol (RTS/CTS) not supported"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3160 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3161 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3162 else if (EQ (tem, Qsw)) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3163 { |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3164 #if defined (IXON) && defined (IXOFF) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3165 attr.c_iflag |= (IXON | IXOFF); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3166 #else |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3167 error ("Software flowcontrol (XON/XOFF) not supported"); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3168 #endif |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3169 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3170 childp2 = Fplist_put (childp2, QCflowcontrol, tem); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3171 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3172 /* Activate configuration. */ |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3173 err = tcsetattr (p->outfd, TCSANOW, &attr); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3174 if (err != 0) |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3175 error ("tcsetattr() failed: %s", emacs_strerror (errno)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3176 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3177 childp2 = Fplist_put (childp2, QCsummary, build_string (summary)); |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3178 p->childp = childp2; |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3179 |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3180 } |
d6a4488883dc
Daniel Engeler <engeler at gmail.com>
Glenn Morris <rgm@gnu.org>
parents:
95063
diff
changeset
|
3181 #endif /* TERMIOS */ |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3182 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3183 /* System depended enumeration of and access to system processes a-la ps(1). */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3184 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3185 #ifdef HAVE_PROCFS |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3186 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3187 /* Process enumeration and access via /proc. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3188 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3189 Lisp_Object |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3190 list_system_processes () |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3191 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3192 Lisp_Object procdir, match, proclist, next; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3193 struct gcpro gcpro1, gcpro2; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3194 register Lisp_Object tail; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3195 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3196 GCPRO2 (procdir, match); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3197 /* For every process on the system, there's a directory in the |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3198 "/proc" pseudo-directory whose name is the numeric ID of that |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3199 process. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3200 procdir = build_string ("/proc"); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3201 match = build_string ("[0-9]+"); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3202 proclist = directory_files_internal (procdir, Qnil, match, Qt, 0, Qnil); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3203 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3204 /* `proclist' gives process IDs as strings. Destructively convert |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3205 each string into a number. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3206 for (tail = proclist; CONSP (tail); tail = next) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3207 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3208 next = XCDR (tail); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3209 XSETCAR (tail, Fstring_to_number (XCAR (tail), Qnil)); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3210 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3211 UNGCPRO; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3212 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3213 /* directory_files_internal returns the files in reverse order; undo |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3214 that. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3215 proclist = Fnreverse (proclist); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3216 return proclist; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3217 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3218 |
100862
63bb1043409e
(list_system_processes, system_process_attributes) [MSDOS]: Don't use the
Eli Zaretskii <eliz@gnu.org>
parents:
100838
diff
changeset
|
3219 /* The WINDOWSNT implementation is on w32.c. |
63bb1043409e
(list_system_processes, system_process_attributes) [MSDOS]: Don't use the
Eli Zaretskii <eliz@gnu.org>
parents:
100838
diff
changeset
|
3220 The MSDOS implementation is on dosfns.c. */ |
63bb1043409e
(list_system_processes, system_process_attributes) [MSDOS]: Don't use the
Eli Zaretskii <eliz@gnu.org>
parents:
100838
diff
changeset
|
3221 #elif !defined (WINDOWSNT) && !defined (MSDOS) |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3222 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3223 Lisp_Object |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3224 list_system_processes () |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3225 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3226 return Qnil; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3227 } |
100595
04f1da2d6ad5
Add commentary about WINDOWSNT implementation of list_system_processes and
Eli Zaretskii <eliz@gnu.org>
parents:
100575
diff
changeset
|
3228 |
04f1da2d6ad5
Add commentary about WINDOWSNT implementation of list_system_processes and
Eli Zaretskii <eliz@gnu.org>
parents:
100575
diff
changeset
|
3229 #endif /* !defined (WINDOWSNT) */ |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3230 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3231 #ifdef GNU_LINUX |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3232 static void |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3233 time_from_jiffies (unsigned long long tval, long hz, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3234 time_t *sec, unsigned *usec) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3235 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3236 unsigned long long ullsec; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3237 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3238 *sec = tval / hz; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3239 ullsec = *sec; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3240 tval -= ullsec * hz; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3241 /* Careful: if HZ > 1 million, then integer division by it yields zero. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3242 if (hz <= 1000000) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3243 *usec = tval * 1000000 / hz; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3244 else |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3245 *usec = tval / (hz / 1000000); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3246 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3247 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3248 static Lisp_Object |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3249 ltime_from_jiffies (unsigned long long tval, long hz) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3250 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3251 time_t sec; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3252 unsigned usec; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3253 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3254 time_from_jiffies (tval, hz, &sec, &usec); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3255 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3256 return list3 (make_number ((sec >> 16) & 0xffff), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3257 make_number (sec & 0xffff), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3258 make_number (usec)); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3259 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3260 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3261 static void |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3262 get_up_time (time_t *sec, unsigned *usec) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3263 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3264 FILE *fup; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3265 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3266 *sec = *usec = 0; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3267 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3268 BLOCK_INPUT; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3269 fup = fopen ("/proc/uptime", "r"); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3270 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3271 if (fup) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3272 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3273 double uptime, idletime; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3274 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3275 /* The numbers in /proc/uptime use C-locale decimal point, but |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3276 we already set ourselves to the C locale (see `fixup_locale' |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3277 in emacs.c). */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3278 if (2 <= fscanf (fup, "%lf %lf", &uptime, &idletime)) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3279 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3280 *sec = uptime; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3281 *usec = (uptime - *sec) * 1000000; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3282 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3283 fclose (fup); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3284 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3285 UNBLOCK_INPUT; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3286 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3287 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3288 #define MAJOR(d) (((unsigned)(d) >> 8) & 0xfff) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3289 #define MINOR(d) (((unsigned)(d) & 0xff) | (((unsigned)(d) & 0xfff00000) >> 12)) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3290 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3291 static Lisp_Object |
100567
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3292 procfs_ttyname (int rdev) |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3293 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3294 FILE *fdev = NULL; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3295 char name[PATH_MAX]; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3296 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3297 BLOCK_INPUT; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3298 fdev = fopen ("/proc/tty/drivers", "r"); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3299 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3300 if (fdev) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3301 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3302 unsigned major; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3303 unsigned long minor_beg, minor_end; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3304 char minor[25]; /* 2 32-bit numbers + dash */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3305 char *endp; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3306 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3307 while (!feof (fdev) && !ferror (fdev)) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3308 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3309 if (3 <= fscanf (fdev, "%*s %s %u %s %*s\n", name, &major, minor) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3310 && major == MAJOR (rdev)) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3311 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3312 minor_beg = strtoul (minor, &endp, 0); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3313 if (*endp == '\0') |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3314 minor_end = minor_beg; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3315 else if (*endp == '-') |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3316 minor_end = strtoul (endp + 1, &endp, 0); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3317 else |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3318 continue; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3319 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3320 if (MINOR (rdev) >= minor_beg && MINOR (rdev) <= minor_end) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3321 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3322 sprintf (name + strlen (name), "%lu", MINOR (rdev)); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3323 break; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3324 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3325 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3326 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3327 fclose (fdev); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3328 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3329 UNBLOCK_INPUT; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3330 return build_string (name); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3331 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3332 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3333 static unsigned long |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3334 procfs_get_total_memory (void) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3335 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3336 FILE *fmem = NULL; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3337 unsigned long retval = 2 * 1024 * 1024; /* default: 2GB */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3338 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3339 BLOCK_INPUT; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3340 fmem = fopen ("/proc/meminfo", "r"); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3341 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3342 if (fmem) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3343 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3344 unsigned long entry_value; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3345 char entry_name[20]; /* the longest I saw is 13+1 */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3346 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3347 while (!feof (fmem) && !ferror (fmem)) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3348 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3349 if (2 <= fscanf (fmem, "%s %lu kB\n", entry_name, &entry_value) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3350 && strcmp (entry_name, "MemTotal:") == 0) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3351 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3352 retval = entry_value; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3353 break; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3354 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3355 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3356 fclose (fmem); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3357 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3358 UNBLOCK_INPUT; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3359 return retval; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3360 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3361 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3362 Lisp_Object |
100567
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3363 system_process_attributes (Lisp_Object pid) |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3364 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3365 char procfn[PATH_MAX], fn[PATH_MAX]; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3366 struct stat st; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3367 struct passwd *pw; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3368 struct group *gr; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3369 long clocks_per_sec; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3370 char *procfn_end; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3371 char procbuf[1025], *p, *q; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3372 int fd; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3373 ssize_t nread; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3374 const char *cmd = NULL; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3375 char *cmdline = NULL; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3376 size_t cmdsize = 0, cmdline_size; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3377 unsigned char c; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3378 int proc_id, ppid, uid, gid, pgrp, sess, tty, tpgid, thcount; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3379 unsigned long long utime, stime, cutime, cstime, start; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3380 long priority, nice, rss; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3381 unsigned long minflt, majflt, cminflt, cmajflt, vsize; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3382 time_t sec; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3383 unsigned usec; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3384 EMACS_TIME tnow, tstart, tboot, telapsed,ttotal; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3385 double pcpu, pmem; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3386 Lisp_Object attrs = Qnil; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3387 Lisp_Object cmd_str, decoded_cmd, tem; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3388 struct gcpro gcpro1, gcpro2; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3389 EMACS_INT uid_eint, gid_eint; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3390 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3391 CHECK_NUMBER_OR_FLOAT (pid); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3392 proc_id = FLOATP (pid) ? XFLOAT_DATA (pid) : XINT (pid); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3393 sprintf (procfn, "/proc/%lu", proc_id); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3394 if (stat (procfn, &st) < 0) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3395 return attrs; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3396 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3397 GCPRO2 (attrs, decoded_cmd); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3398 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3399 /* euid egid */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3400 uid = st.st_uid; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3401 /* Use of EMACS_INT stops GCC whining about limited range of data type. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3402 uid_eint = uid; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3403 attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float (uid_eint)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3404 BLOCK_INPUT; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3405 pw = getpwuid (uid); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3406 UNBLOCK_INPUT; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3407 if (pw) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3408 attrs = Fcons (Fcons (Quser, build_string (pw->pw_name)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3409 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3410 gid = st.st_gid; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3411 gid_eint = gid; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3412 attrs = Fcons (Fcons (Qegid, make_fixnum_or_float (gid_eint)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3413 BLOCK_INPUT; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3414 gr = getgrgid (gid); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3415 UNBLOCK_INPUT; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3416 if (gr) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3417 attrs = Fcons (Fcons (Qgroup, build_string (gr->gr_name)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3418 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3419 strcpy (fn, procfn); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3420 procfn_end = fn + strlen (fn); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3421 strcpy (procfn_end, "/stat"); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3422 fd = emacs_open (fn, O_RDONLY, 0); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3423 if (fd >= 0 && (nread = emacs_read (fd, procbuf, sizeof(procbuf) - 1)) > 0) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3424 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3425 procbuf[nread] = '\0'; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3426 p = procbuf; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3427 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3428 p = strchr (p, '('); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3429 if (p != NULL) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3430 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3431 q = strrchr (p + 1, ')'); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3432 /* comm */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3433 if (q != NULL) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3434 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3435 cmd = p + 1; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3436 cmdsize = q - cmd; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3437 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3438 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3439 else |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3440 q = NULL; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3441 if (cmd == NULL) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3442 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3443 cmd = "???"; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3444 cmdsize = 3; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3445 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3446 /* Command name is encoded in locale-coding-system; decode it. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3447 cmd_str = make_unibyte_string (cmd, cmdsize); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3448 decoded_cmd = code_convert_string_norecord (cmd_str, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3449 Vlocale_coding_system, 0); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3450 attrs = Fcons (Fcons (Qcomm, decoded_cmd), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3451 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3452 if (q) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3453 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3454 EMACS_INT ppid_eint, pgrp_eint, sess_eint, tpgid_eint, thcount_eint; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3455 p = q + 2; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3456 /* state ppid pgrp sess tty tpgid . minflt cminflt majflt cmajflt utime stime cutime cstime priority nice thcount . start vsize rss */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3457 sscanf (p, "%c %d %d %d %d %d %*u %lu %lu %lu %lu %Lu %Lu %Lu %Lu %ld %ld %d %*d %Lu %lu %ld", |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3458 &c, &ppid, &pgrp, &sess, &tty, &tpgid, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3459 &minflt, &cminflt, &majflt, &cmajflt, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3460 &utime, &stime, &cutime, &cstime, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3461 &priority, &nice, &thcount, &start, &vsize, &rss); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3462 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3463 char state_str[2]; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3464 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3465 state_str[0] = c; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3466 state_str[1] = '\0'; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3467 tem = build_string (state_str); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3468 attrs = Fcons (Fcons (Qstate, tem), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3469 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3470 /* Stops GCC whining about limited range of data type. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3471 ppid_eint = ppid; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3472 pgrp_eint = pgrp; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3473 sess_eint = sess; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3474 tpgid_eint = tpgid; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3475 thcount_eint = thcount; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3476 attrs = Fcons (Fcons (Qppid, make_fixnum_or_float (ppid_eint)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3477 attrs = Fcons (Fcons (Qpgrp, make_fixnum_or_float (pgrp_eint)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3478 attrs = Fcons (Fcons (Qsess, make_fixnum_or_float (sess_eint)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3479 attrs = Fcons (Fcons (Qttname, procfs_ttyname (tty)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3480 attrs = Fcons (Fcons (Qtpgid, make_fixnum_or_float (tpgid_eint)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3481 attrs = Fcons (Fcons (Qminflt, make_fixnum_or_float (minflt)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3482 attrs = Fcons (Fcons (Qmajflt, make_fixnum_or_float (majflt)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3483 attrs = Fcons (Fcons (Qcminflt, make_fixnum_or_float (cminflt)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3484 attrs = Fcons (Fcons (Qcmajflt, make_fixnum_or_float (cmajflt)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3485 clocks_per_sec = sysconf (_SC_CLK_TCK); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3486 if (clocks_per_sec < 0) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3487 clocks_per_sec = 100; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3488 attrs = Fcons (Fcons (Qutime, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3489 ltime_from_jiffies (utime, clocks_per_sec)), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3490 attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3491 attrs = Fcons (Fcons (Qstime, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3492 ltime_from_jiffies (stime, clocks_per_sec)), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3493 attrs); |
100830
01439dc6e53b
(system_process_attributes): Compute Qtime and Qctime and add them to the alist.
Eli Zaretskii <eliz@gnu.org>
parents:
100595
diff
changeset
|
3494 attrs = Fcons (Fcons (Qtime, |
01439dc6e53b
(system_process_attributes): Compute Qtime and Qctime and add them to the alist.
Eli Zaretskii <eliz@gnu.org>
parents:
100595
diff
changeset
|
3495 ltime_from_jiffies (stime+utime, clocks_per_sec)), |
01439dc6e53b
(system_process_attributes): Compute Qtime and Qctime and add them to the alist.
Eli Zaretskii <eliz@gnu.org>
parents:
100595
diff
changeset
|
3496 attrs); |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3497 attrs = Fcons (Fcons (Qcutime, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3498 ltime_from_jiffies (cutime, clocks_per_sec)), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3499 attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3500 attrs = Fcons (Fcons (Qcstime, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3501 ltime_from_jiffies (cstime, clocks_per_sec)), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3502 attrs); |
100830
01439dc6e53b
(system_process_attributes): Compute Qtime and Qctime and add them to the alist.
Eli Zaretskii <eliz@gnu.org>
parents:
100595
diff
changeset
|
3503 attrs = Fcons (Fcons (Qctime, |
01439dc6e53b
(system_process_attributes): Compute Qtime and Qctime and add them to the alist.
Eli Zaretskii <eliz@gnu.org>
parents:
100595
diff
changeset
|
3504 ltime_from_jiffies (cstime+cutime, clocks_per_sec)), |
01439dc6e53b
(system_process_attributes): Compute Qtime and Qctime and add them to the alist.
Eli Zaretskii <eliz@gnu.org>
parents:
100595
diff
changeset
|
3505 attrs); |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3506 attrs = Fcons (Fcons (Qpri, make_number (priority)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3507 attrs = Fcons (Fcons (Qnice, make_number (nice)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3508 attrs = Fcons (Fcons (Qthcount, make_fixnum_or_float (thcount_eint)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3509 EMACS_GET_TIME (tnow); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3510 get_up_time (&sec, &usec); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3511 EMACS_SET_SECS (telapsed, sec); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3512 EMACS_SET_USECS (telapsed, usec); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3513 EMACS_SUB_TIME (tboot, tnow, telapsed); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3514 time_from_jiffies (start, clocks_per_sec, &sec, &usec); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3515 EMACS_SET_SECS (tstart, sec); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3516 EMACS_SET_USECS (tstart, usec); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3517 EMACS_ADD_TIME (tstart, tboot, tstart); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3518 attrs = Fcons (Fcons (Qstart, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3519 list3 (make_number |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3520 ((EMACS_SECS (tstart) >> 16) & 0xffff), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3521 make_number |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3522 (EMACS_SECS (tstart) & 0xffff), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3523 make_number |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3524 (EMACS_USECS (tstart)))), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3525 attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3526 attrs = Fcons (Fcons (Qvsize, make_fixnum_or_float (vsize/1024)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3527 attrs = Fcons (Fcons (Qrss, make_fixnum_or_float (4*rss)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3528 EMACS_SUB_TIME (telapsed, tnow, tstart); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3529 attrs = Fcons (Fcons (Qetime, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3530 list3 (make_number |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3531 ((EMACS_SECS (telapsed) >> 16) & 0xffff), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3532 make_number |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3533 (EMACS_SECS (telapsed) & 0xffff), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3534 make_number |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3535 (EMACS_USECS (telapsed)))), |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3536 attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3537 time_from_jiffies (utime + stime, clocks_per_sec, &sec, &usec); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3538 pcpu = (sec + usec / 1000000.0) / (EMACS_SECS (telapsed) + EMACS_USECS (telapsed) / 1000000.0); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3539 if (pcpu > 1.0) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3540 pcpu = 1.0; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3541 attrs = Fcons (Fcons (Qpcpu, make_float (100 * pcpu)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3542 pmem = 4.0 * 100 * rss / procfs_get_total_memory (); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3543 if (pmem > 100) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3544 pmem = 100; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3545 attrs = Fcons (Fcons (Qpmem, make_float (pmem)), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3546 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3547 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3548 if (fd >= 0) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3549 emacs_close (fd); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3550 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3551 /* args */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3552 strcpy (procfn_end, "/cmdline"); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3553 fd = emacs_open (fn, O_RDONLY, 0); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3554 if (fd >= 0) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3555 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3556 for (cmdline_size = 0; emacs_read (fd, &c, 1) == 1; cmdline_size++) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3557 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3558 if (isspace (c) || c == '\\') |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3559 cmdline_size++; /* for later quoting, see below */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3560 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3561 if (cmdline_size) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3562 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3563 cmdline = xmalloc (cmdline_size + 1); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3564 lseek (fd, 0L, SEEK_SET); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3565 cmdline[0] = '\0'; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3566 if ((nread = read (fd, cmdline, cmdline_size)) >= 0) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3567 cmdline[nread++] = '\0'; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3568 else |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3569 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3570 /* Assigning zero to `nread' makes us skip the following |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3571 two loops, assign zero to cmdline_size, and enter the |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3572 following `if' clause that handles unknown command |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3573 lines. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3574 nread = 0; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3575 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3576 /* We don't want trailing null characters. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3577 for (p = cmdline + nread - 1; p > cmdline && !*p; p--) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3578 nread--; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3579 for (p = cmdline; p < cmdline + nread; p++) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3580 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3581 /* Escape-quote whitespace and backslashes. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3582 if (isspace (*p) || *p == '\\') |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3583 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3584 memmove (p + 1, p, nread - (p - cmdline)); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3585 nread++; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3586 *p++ = '\\'; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3587 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3588 else if (*p == '\0') |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3589 *p = ' '; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3590 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3591 cmdline_size = nread; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3592 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3593 if (!cmdline_size) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3594 { |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3595 if (!cmd) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3596 cmd = "???"; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3597 if (!cmdsize) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3598 cmdsize = strlen (cmd); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3599 cmdline_size = cmdsize + 2; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3600 cmdline = xmalloc (cmdline_size + 1); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3601 strcpy (cmdline, "["); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3602 strcat (strncat (cmdline, cmd, cmdsize), "]"); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3603 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3604 emacs_close (fd); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3605 /* Command line is encoded in locale-coding-system; decode it. */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3606 cmd_str = make_unibyte_string (cmdline, cmdline_size); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3607 decoded_cmd = code_convert_string_norecord (cmd_str, |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3608 Vlocale_coding_system, 0); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3609 xfree (cmdline); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3610 attrs = Fcons (Fcons (Qargs, decoded_cmd), attrs); |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3611 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3612 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3613 UNGCPRO; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3614 return attrs; |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3615 } |
100595
04f1da2d6ad5
Add commentary about WINDOWSNT implementation of list_system_processes and
Eli Zaretskii <eliz@gnu.org>
parents:
100575
diff
changeset
|
3616 |
100567
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3617 #elif defined (SOLARIS2) && defined (HAVE_PROCFS) |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3618 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3619 /* The <procfs.h> header does not like to be included if _LP64 is defined and |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3620 __FILE_OFFSET_BITS == 64. This is an ugly workaround that. */ |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3621 #if !defined (_LP64) && defined (_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64) |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3622 #define PROCFS_FILE_OFFSET_BITS_HACK 1 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3623 #undef _FILE_OFFSET_BITS |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3624 #else |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3625 #define PROCFS_FILE_OFFSET_BITS_HACK 0 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3626 #endif |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3627 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3628 #include <procfs.h> |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3629 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3630 #if PROCFS_FILE_OFFSET_BITS_HACK == 1 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3631 #define _FILE_OFFSET_BITS 64 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3632 #endif /* PROCFS_FILE_OFFSET_BITS_HACK == 1 */ |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3633 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3634 Lisp_Object |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3635 system_process_attributes (Lisp_Object pid) |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3636 { |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3637 char procfn[PATH_MAX], fn[PATH_MAX]; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3638 struct stat st; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3639 struct passwd *pw; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3640 struct group *gr; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3641 char *procfn_end; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3642 struct psinfo pinfo; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3643 int fd; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3644 ssize_t nread; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3645 int proc_id, uid, gid; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3646 Lisp_Object attrs = Qnil; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3647 Lisp_Object decoded_cmd, tem; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3648 struct gcpro gcpro1, gcpro2; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3649 EMACS_INT uid_eint, gid_eint; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3650 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3651 CHECK_NUMBER_OR_FLOAT (pid); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3652 proc_id = FLOATP (pid) ? XFLOAT_DATA (pid) : XINT (pid); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3653 sprintf (procfn, "/proc/%u", proc_id); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3654 if (stat (procfn, &st) < 0) |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3655 return attrs; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3656 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3657 GCPRO2 (attrs, decoded_cmd); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3658 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3659 /* euid egid */ |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3660 uid = st.st_uid; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3661 /* Use of EMACS_INT stops GCC whining about limited range of data type. */ |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3662 uid_eint = uid; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3663 attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float (uid_eint)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3664 BLOCK_INPUT; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3665 pw = getpwuid (uid); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3666 UNBLOCK_INPUT; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3667 if (pw) |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3668 attrs = Fcons (Fcons (Quser, build_string (pw->pw_name)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3669 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3670 gid = st.st_gid; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3671 gid_eint = gid; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3672 attrs = Fcons (Fcons (Qegid, make_fixnum_or_float (gid_eint)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3673 BLOCK_INPUT; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3674 gr = getgrgid (gid); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3675 UNBLOCK_INPUT; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3676 if (gr) |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3677 attrs = Fcons (Fcons (Qgroup, build_string (gr->gr_name)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3678 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3679 strcpy (fn, procfn); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3680 procfn_end = fn + strlen (fn); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3681 strcpy (procfn_end, "/psinfo"); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3682 fd = emacs_open (fn, O_RDONLY, 0); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3683 if (fd >= 0 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3684 && (nread = read (fd, (char*)&pinfo, sizeof(struct psinfo)) > 0)) |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3685 { |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3686 attrs = Fcons (Fcons (Qppid, make_fixnum_or_float (pinfo.pr_ppid)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3687 attrs = Fcons (Fcons (Qpgrp, make_fixnum_or_float (pinfo.pr_pgid)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3688 attrs = Fcons (Fcons (Qsess, make_fixnum_or_float (pinfo.pr_sid)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3689 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3690 { |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3691 char state_str[2]; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3692 state_str[0] = pinfo.pr_lwp.pr_sname; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3693 state_str[1] = '\0'; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3694 tem = build_string (state_str); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3695 attrs = Fcons (Fcons (Qstate, tem), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3696 } |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3697 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3698 /* FIXME: missing Qttyname. psinfo.pr_ttydev is a dev_t, |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3699 need to get a string from it. */ |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3700 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3701 /* FIXME: missing: Qtpgid */ |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3702 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3703 /* FIXME: missing: |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3704 Qminflt |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3705 Qmajflt |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3706 Qcminflt |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3707 Qcmajflt |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3708 |
100838
5deb9f2f65ae
(system_process_attributes): Provide Qtime and Qctime
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100830
diff
changeset
|
3709 Qutime |
5deb9f2f65ae
(system_process_attributes): Provide Qtime and Qctime
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100830
diff
changeset
|
3710 Qcutime |
100567
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3711 Qstime |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3712 Qcstime |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3713 Are they available? */ |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3714 |
100838
5deb9f2f65ae
(system_process_attributes): Provide Qtime and Qctime
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100830
diff
changeset
|
3715 attrs = Fcons (Fcons (Qtime, |
100567
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3716 list3 (make_number (pinfo.pr_time.tv_sec >> 16), |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3717 make_number (pinfo.pr_time.tv_sec & 0xffff), |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3718 make_number (pinfo.pr_time.tv_nsec))), |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3719 attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3720 |
100838
5deb9f2f65ae
(system_process_attributes): Provide Qtime and Qctime
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100830
diff
changeset
|
3721 attrs = Fcons (Fcons (Qctime, |
100567
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3722 list3 (make_number (pinfo.pr_ctime.tv_sec >> 16), |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3723 make_number (pinfo.pr_ctime.tv_sec & 0xffff), |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3724 make_number (pinfo.pr_ctime.tv_nsec))), |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3725 attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3726 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3727 attrs = Fcons (Fcons (Qpri, make_number (pinfo.pr_lwp.pr_pri)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3728 attrs = Fcons (Fcons (Qnice, make_number (pinfo.pr_lwp.pr_nice)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3729 attrs = Fcons (Fcons (Qthcount, make_fixnum_or_float (pinfo.pr_nlwp)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3730 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3731 attrs = Fcons (Fcons (Qstart, |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3732 list3 (make_number (pinfo.pr_start.tv_sec >> 16), |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3733 make_number (pinfo.pr_start.tv_sec & 0xffff), |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3734 make_number (pinfo.pr_start.tv_nsec))), |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3735 attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3736 attrs = Fcons (Fcons (Qvsize, make_fixnum_or_float (pinfo.pr_size)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3737 attrs = Fcons (Fcons (Qrss, make_fixnum_or_float (pinfo.pr_rssize)), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3738 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3739 /* pr_pctcpu and pr_pctmem are encoded as a fixed point 16 bit number in [0 ... 1]. */ |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3740 attrs = Fcons (Fcons (Qpcpu, (pinfo.pr_pctcpu * 100.0) / (double)0x8000), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3741 attrs = Fcons (Fcons (Qpmem, (pinfo.pr_pctmem * 100.0) / (double)0x8000), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3742 |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3743 decoded_cmd |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3744 = code_convert_string_norecord (make_unibyte_string (pinfo.pr_fname, |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3745 strlen (pinfo.pr_fname)), |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3746 Vlocale_coding_system, 0); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3747 attrs = Fcons (Fcons (Qcomm, decoded_cmd), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3748 decoded_cmd |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3749 = code_convert_string_norecord (make_unibyte_string (pinfo.pr_psargs, |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3750 strlen (pinfo.pr_psargs)), |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3751 Vlocale_coding_system, 0); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3752 attrs = Fcons (Fcons (Qargs, decoded_cmd), attrs); |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3753 } |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3754 |
100575
a6c184e576ae
(system_process_attributes): Close fd when done.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100574
diff
changeset
|
3755 if (fd >= 0) |
a6c184e576ae
(system_process_attributes): Close fd when done.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100574
diff
changeset
|
3756 emacs_close (fd); |
a6c184e576ae
(system_process_attributes): Close fd when done.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100574
diff
changeset
|
3757 |
100567
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3758 UNGCPRO; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3759 return attrs; |
387ca5b2d869
* sysdep.c (system_process_attributes): Add implementation for Solaris.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100566
diff
changeset
|
3760 } |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3761 |
100862
63bb1043409e
(list_system_processes, system_process_attributes) [MSDOS]: Don't use the
Eli Zaretskii <eliz@gnu.org>
parents:
100838
diff
changeset
|
3762 /* The WINDOWSNT implementation is on w32.c. |
63bb1043409e
(list_system_processes, system_process_attributes) [MSDOS]: Don't use the
Eli Zaretskii <eliz@gnu.org>
parents:
100838
diff
changeset
|
3763 The MSDOS implementation is on dosfns.c. */ |
63bb1043409e
(list_system_processes, system_process_attributes) [MSDOS]: Don't use the
Eli Zaretskii <eliz@gnu.org>
parents:
100838
diff
changeset
|
3764 #elif !defined (WINDOWSNT) && !defined (MSDOS) |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3765 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3766 Lisp_Object |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3767 system_process_attributes (Lisp_Object pid) |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3768 { |
100572
7d5b97314a0a
* sysdep.c (system_process_attributes): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100567
diff
changeset
|
3769 return Qnil; |
100565
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3770 } |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3771 |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3772 #endif /* !defined (WINDOWSNT) */ |
dcc7f5970d5c
Reorganize implementation of Flist_system_processes and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98548
diff
changeset
|
3773 |
32752
923b8d6d8277
Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents:
32236
diff
changeset
|
3774 |
52401 | 3775 /* arch-tag: edb43589-4e09-4544-b325-978b5b121dcf |
3776 (do not change this comment) */ |