Mercurial > hg > xemacs-beta
comparison src/sysdep.c @ 814:a634e3b7acc8
[xemacs-hg @ 2002-04-14 12:41:59 by ben]
latest changes
TODO.ben-mule-21-5: Update.
make-docfile.c: Add basic support for handling ISO 2022 doc strings -- we parse
the basic charset designation sequences so we know whether we're
in ASCII and have to pay attention to end quotes and such.
Reformat code according to coding standards.
abbrev.el: Add `global-abbrev-mode', which turns on or off abbrev-mode in all
buffers. Added `defining-abbrev-turns-on-abbrev-mode' -- if
non-nil, defining an abbrev through an interactive function will
automatically turn on abbrev-mode, either globally or locally
depending on the command. This is the "what you'd expect"
behavior.
indent.el: general function for indenting a balanced expression in a
mode-correct way. Works similar to indent-region in that a mode
can specify a specific command to do the whole operation; if not,
figure out the region using forward-sexp and indent each line
using indent-according-to-mode.
keydefs.el: Removed.
Modify M-C-backslash to do indent-region-or-balanced-expression.
Make S-Tab just insert a TAB char, like it's meant to do.
make-docfile.el: Now that we're using the call-process-in-lisp, we need to load
an extra file win32-native.el because we're running a bare temacs.
menubar-items.el: Totally redo the Cmds menu so that most used commands appear
directly on the menu and less used commands appear in submenus.
The old way may have been very pretty, but rather impractical.
process.el: Under Windows, don't ever use old-call-process-internal, even
in batch mode. We can do processes in batch mode.
subr.el: Someone recoded truncate-string-to-width, saying "the FSF version
is too complicated and does lots of hard-to-understand stuff" but
the resulting recoded version was *totally* wrong! it
misunderstood the basic point of this function, which is work in
*columns* not chars. i dumped ours and copied the version from
FSF 21.1. Also added truncate-string-with-continuation-dots,
since this idiom is used often.
config.inc.samp, xemacs.mak: Separate out debug and optimize flags.
Remove all vestiges of USE_MINIMAL_TAGBITS,
USE_INDEXED_LRECORD_IMPLEMENTATION, and GUNG_HO, since those
ifdefs have long been removed.
Make error-checking support actually work.
Some rearrangement of config.inc.samp to make it more logical.
Remove callproc.c and ntproc.c from xemacs.mak, no longer used.
Make pdump the default.
lisp.h: Add support for strong type-checking of Bytecount, Bytebpos,
Charcount, Charbpos, and others, by making them classes,
overloading the operators to provide integer-like operation and
carefully controlling what operations are allowed. Not currently
enabled in C++ builds because there are still a number of compile
errors, and it won't really work till we merge in my "8-bit-Mule"
workspace, in which I make use of the new types Charxpos,
Bytexpos, Memxpos, representing a "position" either in a buffer or
a string. (This is especially important in the extent code.)
abbrev.c, alloc.c, eval.c, buffer.c, buffer.h, editfns.c, fns.c, text.h: Warning fixes, some of them related to new C++ strict type
checking of Bytecount, Charbpos, etc.
dired.c: Caught an actual error due to strong type checking -- char len
being passed when should be byte len.
alloc.c, backtrace.h, bytecode.c, bytecode.h, eval.c, sysdep.c: Further optimize Ffuncall:
-- process arg list at compiled-function creation time, converting
into an array for extra-quick access at funcall time.
-- rewrite funcall_compiled_function to use it, and inline this
function.
-- change the order of check for magic stuff in
SPECBIND_FAST_UNSAFE to be faster.
-- move the check for need to garbage collect into the allocation
code, so only a single flag needs to be checked in funcall.
buffer.c, symbols.c: add debug funs to check on mule optimization info in buffers and
strings.
eval.c, emacs.c, text.c, regex.c, scrollbar-msw.c, search.c: Fix evil crashes due to eistrings not properly reinitialized under
pdump. Redo a bit some of the init routines; convert some
complex_vars_of() into simple vars_of(), because they didn't need
complex processing.
callproc.c, emacs.c, event-stream.c, nt.c, process.c, process.h, sysdep.c, sysdep.h, syssignal.h, syswindows.h, ntproc.c: Delete. Hallelujah, praise the Lord, there is no god
but Allah!!!
fix so that processes can be invoked in bare temacs -- thereby
eliminating any need for callproc.c. (currently only eliminated
under NT.) remove all crufty and unnecessary old process code in
ntproc.c and elsewhere. move non-callproc-specific stuff (mostly
environment) into process.c, so callproc.c can be left out under
NT.
console-tty.c, doc.c, file-coding.c, file-coding.h, lstream.c, lstream.h: fix doc string handling so it works with Japanese, etc docs.
change handling of "character mode" so callers don't have to
manually set it (quite error-prone).
event-msw.c: spacing fixes.
lread.c: eliminate unused crufty vintage-19 "FSF defun hack" code.
lrecord.h: improve pdump description docs.
buffer.c, ntheap.c, unexnt.c, win32.c, emacs.c: Mule-ize some unexec and startup code. It was pseudo-Mule-ized
before by simply always calling the ...A versions of functions,
but that won't cut it -- eventually we want to be able to run
properly even if XEmacs has been installed in a Japanese
directory. (The current problem is the timing of the loading of
the Unicode tables; this will eventually be fixed.) Go through and
fix various other places where the code was not Mule-clean.
Provide a function mswindows_get_module_file_name() to get our own
name without resort to PATH_MAX and such. Add a big comment in
main() about the problem with Unicode table load timing that I
just alluded to.
emacs.c: When error-checking is enabled (interpreted as "user is developing
XEmacs"), don't ask user to "pause to read messages" when a fatal
error has occurred, because it will wedge if we are in an inner
modal loop (typically when a menu is popped up) and make us unable
to get a useful stack trace in the debugger.
text.c: Correct update_entirely_ascii_p_flag to actually work.
lisp.h, symsinit.h: declarations for above changes.
author | ben |
---|---|
date | Sun, 14 Apr 2002 12:43:31 +0000 |
parents | 19dfb459d51a |
children | 39d30f8fadfd |
comparison
equal
deleted
inserted
replaced
813:9541922fb765 | 814:a634e3b7acc8 |
---|---|
196 #endif /* BSD */ | 196 #endif /* BSD */ |
197 | 197 |
198 #endif /* NO_SUBPROCESSES */ | 198 #endif /* NO_SUBPROCESSES */ |
199 | 199 |
200 | 200 |
201 #ifdef WIN32_NATIVE | 201 void |
202 void wait_for_termination (HANDLE pHandle) | 202 wait_for_termination (int pid) |
203 #else | |
204 void wait_for_termination (int pid) | |
205 #endif | |
206 { | 203 { |
207 /* #### With the new improved SIGCHLD handling stuff, there is much | 204 /* #### With the new improved SIGCHLD handling stuff, there is much |
208 less danger of race conditions and some of the comments below | 205 less danger of race conditions and some of the comments below |
209 don't apply. This should be updated. */ | 206 don't apply. This should be updated. */ |
210 | 207 |
311 which are both program bugs. | 308 which are both program bugs. |
312 | 309 |
313 Since implementations may add their own error indicators on top, | 310 Since implementations may add their own error indicators on top, |
314 we ignore it by default. */ | 311 we ignore it by default. */ |
315 #elif defined (WIN32_NATIVE) | 312 #elif defined (WIN32_NATIVE) |
316 int ret = 0, status = 0; | 313 /* not used */ |
317 if (pHandle == NULL) | |
318 { | |
319 warn_when_safe (Qprocess, Qwarning, "Cannot wait for unknown process to terminate"); | |
320 return; | |
321 } | |
322 do | |
323 { | |
324 QUIT; | |
325 ret = WaitForSingleObject(pHandle, 100); | |
326 } | |
327 while (ret == WAIT_TIMEOUT); | |
328 if (ret == WAIT_FAILED) | |
329 { | |
330 warn_when_safe (Qprocess, Qwarning, "waiting for process failed"); | |
331 } | |
332 if (ret == WAIT_ABANDONED) | |
333 { | |
334 warn_when_safe (Qprocess, Qwarning, | |
335 "process to wait for has been abandoned"); | |
336 } | |
337 if (ret == WAIT_OBJECT_0) | |
338 { | |
339 ret = GetExitCodeProcess(pHandle, &status); | |
340 if (ret) | |
341 { | |
342 synch_process_alive = 0; | |
343 synch_process_retcode = status; | |
344 } | |
345 else | |
346 { | |
347 /* GetExitCodeProcess() didn't return a valid exit status, | |
348 nothing to do. APA */ | |
349 warn_when_safe (Qprocess, Qwarning, | |
350 "failure to obtain process exit value"); | |
351 } | |
352 } | |
353 if (pHandle != NULL && !CloseHandle(pHandle)) | |
354 { | |
355 warn_when_safe (Qprocess, Qwarning, | |
356 "failure to close unknown process"); | |
357 } | |
358 #elif defined (EMACS_BLOCK_SIGNAL) && !defined (BROKEN_WAIT_FOR_SIGNAL) && defined (SIGCHLD) | 314 #elif defined (EMACS_BLOCK_SIGNAL) && !defined (BROKEN_WAIT_FOR_SIGNAL) && defined (SIGCHLD) |
359 while (1) | 315 while (1) |
360 { | 316 { |
361 static int wait_debugging = 0; /* Set nonzero to make following | 317 static int wait_debugging = 0; /* Set nonzero to make following |
362 function work under dbx (at least for bsd). */ | 318 function work under dbx (at least for bsd). */ |
923 #ifdef HAVE_TTY | 879 #ifdef HAVE_TTY |
924 assert (DEVICE_TTY_P (d)); | 880 assert (DEVICE_TTY_P (d)); |
925 { | 881 { |
926 struct console *con = XCONSOLE (DEVICE_CONSOLE (d)); | 882 struct console *con = XCONSOLE (DEVICE_CONSOLE (d)); |
927 int input_fd = CONSOLE_TTY_DATA (con)->infd; | 883 int input_fd = CONSOLE_TTY_DATA (con)->infd; |
928 #if defined (WIN32_NATIVE) | 884 #ifdef HAVE_TERMIOS |
929 DEVICE_TTY_DATA (d)->ospeed = 15; | |
930 #elif defined (HAVE_TERMIOS) | |
931 struct termios sg; | 885 struct termios sg; |
932 | 886 |
933 sg.c_cflag = B9600; | 887 sg.c_cflag = B9600; |
934 tcgetattr (input_fd, &sg); | 888 tcgetattr (input_fd, &sg); |
935 DEVICE_TTY_DATA (d)->ospeed = cfgetospeed (&sg); | 889 DEVICE_TTY_DATA (d)->ospeed = cfgetospeed (&sg); |
1396 #elif defined HAVE_TERMIO | 1350 #elif defined HAVE_TERMIO |
1397 /* The SYSV-style interface? */ | 1351 /* The SYSV-style interface? */ |
1398 if (ioctl (fd, TCGETA, &settings->main) < 0) | 1352 if (ioctl (fd, TCGETA, &settings->main) < 0) |
1399 return -1; | 1353 return -1; |
1400 | 1354 |
1401 #elif !defined (WIN32_NATIVE) | 1355 #else |
1402 /* I give up - I hope you have the BSD ioctls. */ | 1356 /* I give up - I hope you have the BSD ioctls. */ |
1403 if (ioctl (fd, TIOCGETP, &settings->main) < 0) | 1357 if (ioctl (fd, TIOCGETP, &settings->main) < 0) |
1404 return -1; | 1358 return -1; |
1405 #endif /* HAVE_TCATTR */ | 1359 #endif /* HAVE_TCATTR */ |
1406 | 1360 |
1470 #elif defined HAVE_TERMIO | 1424 #elif defined HAVE_TERMIO |
1471 /* The SYSV-style interface? */ | 1425 /* The SYSV-style interface? */ |
1472 if (ioctl (fd, flushp ? TCSETAF : TCSETAW, &settings->main) < 0) | 1426 if (ioctl (fd, flushp ? TCSETAF : TCSETAW, &settings->main) < 0) |
1473 return -1; | 1427 return -1; |
1474 | 1428 |
1475 #elif !defined (WIN32_NATIVE) | 1429 #else |
1476 /* I give up - I hope you have the BSD ioctls. */ | 1430 /* I give up - I hope you have the BSD ioctls. */ |
1477 if (ioctl (fd, (flushp) ? TIOCSETP : TIOCSETN, &settings->main) < 0) | 1431 if (ioctl (fd, (flushp) ? TIOCSETP : TIOCSETN, &settings->main) < 0) |
1478 return -1; | 1432 return -1; |
1479 #endif /* HAVE_TCATTR */ | 1433 #endif /* HAVE_TCATTR */ |
1480 | 1434 |
1663 or via TELNET or the like, but does no harm elsewhere. */ | 1617 or via TELNET or the like, but does no harm elsewhere. */ |
1664 tty.main.c_iflag &= ~IGNBRK; | 1618 tty.main.c_iflag &= ~IGNBRK; |
1665 tty.main.c_iflag &= ~BRKINT; | 1619 tty.main.c_iflag &= ~BRKINT; |
1666 #endif /* AIX */ | 1620 #endif /* AIX */ |
1667 #else /* if not HAVE_TERMIO */ | 1621 #else /* if not HAVE_TERMIO */ |
1668 #if !defined (WIN32_NATIVE) | |
1669 con->tty_erase_char = make_char (tty.main.sg_erase); | 1622 con->tty_erase_char = make_char (tty.main.sg_erase); |
1670 tty.main.sg_flags &= ~(ECHO | CRMOD | XTABS); | 1623 tty.main.sg_flags &= ~(ECHO | CRMOD | XTABS); |
1671 if (TTY_FLAGS (con).meta_key) | 1624 if (TTY_FLAGS (con).meta_key) |
1672 tty.main.sg_flags |= ANYP; | 1625 tty.main.sg_flags |= ANYP; |
1673 /* #### should we be using RAW mode here? */ | 1626 /* #### should we be using RAW mode here? */ |
1674 tty.main.sg_flags |= /* interrupt_input ? RAW : */ CBREAK; | 1627 tty.main.sg_flags |= /* interrupt_input ? RAW : */ CBREAK; |
1675 #endif /* not WIN32_NATIVE */ | |
1676 #endif /* not HAVE_TERMIO */ | 1628 #endif /* not HAVE_TERMIO */ |
1677 | 1629 |
1678 /* If going to use CBREAK mode, we must request C-g to interrupt | 1630 /* If going to use CBREAK mode, we must request C-g to interrupt |
1679 and turn off start and stop chars, etc. If not going to use | 1631 and turn off start and stop chars, etc. If not going to use |
1680 CBREAK mode, do this anyway so as to turn off local flow | 1632 CBREAK mode, do this anyway so as to turn off local flow |
2227 #endif /* NEED_STARTS (not CANNOT_DUMP or not SYSTEM_MALLOC) */ | 2179 #endif /* NEED_STARTS (not CANNOT_DUMP or not SYSTEM_MALLOC) */ |
2228 | 2180 |
2229 extern void *minimum_address_seen; /* from xmalloc() */ | 2181 extern void *minimum_address_seen; /* from xmalloc() */ |
2230 extern void *maximum_address_seen; /* from xmalloc() */ | 2182 extern void *maximum_address_seen; /* from xmalloc() */ |
2231 | 2183 |
2232 extern EMACS_INT consing_since_gc; | |
2233 | |
2234 Bytecount | 2184 Bytecount |
2235 total_data_usage (void) | 2185 total_data_usage (void) |
2236 { | 2186 { |
2237 #ifdef NEED_STARTS | 2187 #ifdef NEED_STARTS |
2238 void *data_start = start_of_data (); | 2188 void *data_start = start_of_data (); |
2239 #else | 2189 #else |
2240 void *data_start = minimum_address_seen; | 2190 void *data_start = minimum_address_seen; |
2241 #endif | 2191 #endif |
2242 | 2192 |
2243 #if !defined (WIN32_NATIVE) && !defined (CYGWIN) | 2193 #if !defined (WIN32_NATIVE) && !defined (CYGWIN) |
2244 void *data_end; | 2194 void *data_end = sbrk (0); |
2245 | |
2246 static EMACS_INT last_consing_since_gc; | |
2247 static void *last_sbrk; | |
2248 | |
2249 /* Random hack to avoid calling sbrk constantly (every funcall). #### Is | |
2250 it worth it? */ | |
2251 if (!last_sbrk || !(consing_since_gc >= last_consing_since_gc && | |
2252 (consing_since_gc - last_consing_since_gc) < 1000)) | |
2253 { | |
2254 last_sbrk = sbrk (0); | |
2255 last_consing_since_gc = consing_since_gc; | |
2256 } | |
2257 data_end = last_sbrk; | |
2258 #else | 2195 #else |
2259 void *data_end = maximum_address_seen; | 2196 void *data_end = maximum_address_seen; |
2260 #endif | 2197 #endif |
2261 | 2198 |
2262 /* Sanity checking -- the min determined by malloc() should always be | 2199 /* Sanity checking -- the min determined by malloc() should always be |