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