Mercurial > emacs
comparison src/sysdep.c @ 83014:f5cadabb36dd
Support for opening X frames from a tty session.
lisp/cus-face.el (custom-declare-face): Handle multiple concurrent
display methods correctly.
lisp/faces.el (x-create-frame-with-faces): Set the window-system frame
parameter instead of frame-creation-function.
(tty-create-frame-with-faces): Ditto.
lisp/frame.el (frame-creation-function): Removed.
(frame-creation-function-alist): New variable.
(frame-initialize): Use initial-window-system instead of window-system.
Add window-system parameter to initial-frame-alist.
Removed tty initialization, it was moved to frame-creation-function-alist.
(frame-notice-user-settings): Use initial-window-system instead of window-system.
(make-frame-on-display): Make sure term/x-win is loaded. Added
window-system parameter for make-frame.
(make-frame-on-tty): Removed unnecessary autoload declaration. Added
window-system parameter for make-frame.
(make-frame): Use frame-creation-function-alist to determine the
function to use depending on the specified window system.
(select-frame-by-name): Use the window-system function instead of the
variable.
lisp/startup.el (window-system): New variable (previously built-in,
now frame-local).
(normal-top-level, command-line): Use initial-window-system instead
of window-system.
lisp/loadup.el: Load startup.el before faces.el, for the
window-system variable.
lisp/term/x-win.el: Check for the x-create-frame function instead of
window-system to see if X is available. Don't exit Emacs if the
display can not be opened when X is not the initial display method.
Set up frame-creation-function-alist instead of
frame-creation-function. Provide the x-win feature.
src/dispnew.c (Vwindow_system): Renamed to Vinitial_window_system.
(init_display, syms_of_display): Updated to use Vinitial_window_system
instead of Vwindow_system.
src/emacs.c (shut_down_emacs): Updated to use Vinitial_window_system
instead of Vwindow_system.
src/keyboard.c (Fset_input_mode): Call reset_all_sys_modes, not
reset_sys_modes. Ditto for init_all_sys_modes. Process the quit
parameter correctly.
src/sysdep.c (init_sys_modes, reset_sys_modes): Unconditionally set up
the terminal. We don't get called if there is nothing to do anymore.
(sys_select): Use Vinitial_window_system, not Vwindow_system.
src/window.h (Vwindow_system): Renamed to Vinitial_window_system.
src/xfns.c (Fx_create_frame): Don't check_x. We initialize it anyway.
(x_display_info_for_name, Fx_open_connection): Don't look at
Vinitial_window_system.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-54
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Sun, 11 Jan 2004 21:59:40 +0000 |
parents | 4aa172a45af1 |
children | c66ebcc29777 |
comparison
equal
deleted
inserted
replaced
83013:e77d1a63471b | 83014:f5cadabb36dd |
---|---|
1392 | 1392 |
1393 #ifdef BSD_PGRPS | 1393 #ifdef BSD_PGRPS |
1394 #if 0 | 1394 #if 0 |
1395 /* read_socket_hook is not global anymore. I think doing this | 1395 /* read_socket_hook is not global anymore. I think doing this |
1396 unconditionally will not cause any problems. */ | 1396 unconditionally will not cause any problems. */ |
1397 if (! read_socket_hook && EQ (Vwindow_system, Qnil)) | 1397 if (! read_socket_hook && EQ (Vinitial_window_system, Qnil)) |
1398 #endif | 1398 #endif |
1399 narrow_foreground_group (fileno (TTY_INPUT (tty_out))); | 1399 narrow_foreground_group (fileno (TTY_INPUT (tty_out))); |
1400 #endif | 1400 #endif |
1401 | 1401 |
1402 #ifdef HAVE_WINDOW_SYSTEM | 1402 if (! tty_out->old_tty) |
1403 /* Emacs' window system on MSDOG uses the `internal terminal' and therefore | 1403 tty_out->old_tty = (struct emacs_tty *) xmalloc (sizeof (struct emacs_tty)); |
1404 needs the initialization code below. */ | |
1405 if (tty_out->input != stdin || EQ (Vwindow_system, Qnil)) | |
1406 #endif | |
1407 { | |
1408 if (! tty_out->old_tty) | |
1409 tty_out->old_tty = (struct emacs_tty *) xmalloc (sizeof (struct emacs_tty)); | |
1410 | 1404 |
1411 EMACS_GET_TTY (fileno (TTY_INPUT (tty_out)), tty_out->old_tty); | 1405 EMACS_GET_TTY (fileno (TTY_INPUT (tty_out)), tty_out->old_tty); |
1412 | 1406 |
1413 tty = *tty_out->old_tty; | 1407 tty = *tty_out->old_tty; |
1414 | 1408 |
1415 #if defined (HAVE_TERMIO) || defined (HAVE_TERMIOS) | 1409 #if defined (HAVE_TERMIO) || defined (HAVE_TERMIOS) |
1416 XSETINT (Vtty_erase_char, tty.main.c_cc[VERASE]); | 1410 XSETINT (Vtty_erase_char, tty.main.c_cc[VERASE]); |
1417 | 1411 |
1418 #ifdef DGUX | 1412 #ifdef DGUX |
1419 /* This allows meta to be sent on 8th bit. */ | 1413 /* This allows meta to be sent on 8th bit. */ |
1420 tty.main.c_iflag &= ~INPCK; /* don't check input for parity */ | 1414 tty.main.c_iflag &= ~INPCK; /* don't check input for parity */ |
1421 #endif | 1415 #endif |
1422 tty.main.c_iflag |= (IGNBRK); /* Ignore break condition */ | 1416 tty.main.c_iflag |= (IGNBRK); /* Ignore break condition */ |
1423 tty.main.c_iflag &= ~ICRNL; /* Disable map of CR to NL on input */ | 1417 tty.main.c_iflag &= ~ICRNL; /* Disable map of CR to NL on input */ |
1424 #ifdef INLCR /* I'm just being cautious, | 1418 #ifdef INLCR /* I'm just being cautious, |
1425 since I can't check how widespread INLCR is--rms. */ | 1419 since I can't check how widespread INLCR is--rms. */ |
1426 tty.main.c_iflag &= ~INLCR; /* Disable map of NL to CR on input */ | 1420 tty.main.c_iflag &= ~INLCR; /* Disable map of NL to CR on input */ |
1427 #endif | 1421 #endif |
1428 #ifdef ISTRIP | 1422 #ifdef ISTRIP |
1429 tty.main.c_iflag &= ~ISTRIP; /* don't strip 8th bit on input */ | 1423 tty.main.c_iflag &= ~ISTRIP; /* don't strip 8th bit on input */ |
1430 #endif | 1424 #endif |
1431 tty.main.c_lflag &= ~ECHO; /* Disable echo */ | 1425 tty.main.c_lflag &= ~ECHO; /* Disable echo */ |
1432 tty.main.c_lflag &= ~ICANON; /* Disable erase/kill processing */ | 1426 tty.main.c_lflag &= ~ICANON; /* Disable erase/kill processing */ |
1433 #ifdef IEXTEN | 1427 #ifdef IEXTEN |
1434 tty.main.c_lflag &= ~IEXTEN; /* Disable other editing characters. */ | 1428 tty.main.c_lflag &= ~IEXTEN; /* Disable other editing characters. */ |
1435 #endif | 1429 #endif |
1436 tty.main.c_lflag |= ISIG; /* Enable signals */ | 1430 tty.main.c_lflag |= ISIG; /* Enable signals */ |
1437 if (tty_out->flow_control) | 1431 if (tty_out->flow_control) |
1438 { | 1432 { |
1439 tty.main.c_iflag |= IXON; /* Enable start/stop output control */ | 1433 tty.main.c_iflag |= IXON; /* Enable start/stop output control */ |
1440 #ifdef IXANY | 1434 #ifdef IXANY |
1441 tty.main.c_iflag &= ~IXANY; | 1435 tty.main.c_iflag &= ~IXANY; |
1442 #endif /* IXANY */ | 1436 #endif /* IXANY */ |
1443 } | 1437 } |
1444 else | 1438 else |
1445 tty.main.c_iflag &= ~IXON; /* Disable start/stop output control */ | 1439 tty.main.c_iflag &= ~IXON; /* Disable start/stop output control */ |
1446 tty.main.c_oflag &= ~ONLCR; /* Disable map of NL to CR-NL | 1440 tty.main.c_oflag &= ~ONLCR; /* Disable map of NL to CR-NL |
1447 on output */ | 1441 on output */ |
1448 tty.main.c_oflag &= ~TAB3; /* Disable tab expansion */ | 1442 tty.main.c_oflag &= ~TAB3; /* Disable tab expansion */ |
1449 #ifdef CS8 | 1443 #ifdef CS8 |
1450 if (tty_out->meta_key) | 1444 if (tty_out->meta_key) |
1451 { | 1445 { |
1452 tty.main.c_cflag |= CS8; /* allow 8th bit on input */ | 1446 tty.main.c_cflag |= CS8; /* allow 8th bit on input */ |
1453 tty.main.c_cflag &= ~PARENB;/* Don't check parity */ | 1447 tty.main.c_cflag &= ~PARENB;/* Don't check parity */ |
1454 } | 1448 } |
1455 #endif | 1449 #endif |
1456 if (tty_out->input == stdin) | 1450 if (tty_out->input == stdin) |
1457 { | 1451 { |
1458 tty.main.c_cc[VINTR] = quit_char; /* C-g (usually) gives SIGINT */ | 1452 tty.main.c_cc[VINTR] = quit_char; /* C-g (usually) gives SIGINT */ |
1459 /* Set up C-g for both SIGQUIT and SIGINT. | 1453 /* Set up C-g for both SIGQUIT and SIGINT. |
1460 We don't know which we will get, but we handle both alike | 1454 We don't know which we will get, but we handle both alike |
1461 so which one it really gives us does not matter. */ | 1455 so which one it really gives us does not matter. */ |
1462 tty.main.c_cc[VQUIT] = quit_char; | 1456 tty.main.c_cc[VQUIT] = quit_char; |
1463 } | 1457 } |
1464 else | 1458 else |
1465 { | 1459 { |
1466 /* We normally don't get interrupt or quit signals from tty | 1460 /* We normally don't get interrupt or quit signals from tty |
1467 devices other than our controlling terminal; therefore, | 1461 devices other than our controlling terminal; therefore, |
1468 we must handle C-g as normal input. Unfortunately, this | 1462 we must handle C-g as normal input. Unfortunately, this |
1469 means that the interrupt and quit feature must be | 1463 means that the interrupt and quit feature must be |
1470 disabled on secondary ttys, or we would not even see the | 1464 disabled on secondary ttys, or we would not even see the |
1471 keypress. | 1465 keypress. |
1472 | 1466 |
1473 Note that even though emacsclient could have special code | 1467 Note that even though emacsclient could have special code |
1474 to pass SIGINT to Emacs, we should _not_ enable | 1468 to pass SIGINT to Emacs, we should _not_ enable |
1475 interrupt/quit keys for emacsclient frames. This means | 1469 interrupt/quit keys for emacsclient frames. This means |
1476 that we can't break out of loops in C code from a | 1470 that we can't break out of loops in C code from a |
1477 secondary tty frame, but we can always decide what | 1471 secondary tty frame, but we can always decide what |
1478 display the C-g came from, which is more important from a | 1472 display the C-g came from, which is more important from a |
1479 usability point of view. (Consider the case when two | 1473 usability point of view. (Consider the case when two |
1480 people work together using the same Emacs instance.) */ | 1474 people work together using the same Emacs instance.) */ |
1481 tty.main.c_cc[VINTR] = CDISABLE; | 1475 tty.main.c_cc[VINTR] = CDISABLE; |
1482 tty.main.c_cc[VQUIT] = CDISABLE; | 1476 tty.main.c_cc[VQUIT] = CDISABLE; |
1483 } | 1477 } |
1484 tty.main.c_cc[VMIN] = 1; /* Input should wait for at least 1 char */ | 1478 tty.main.c_cc[VMIN] = 1; /* Input should wait for at least 1 char */ |
1485 tty.main.c_cc[VTIME] = 0; /* no matter how long that takes. */ | 1479 tty.main.c_cc[VTIME] = 0; /* no matter how long that takes. */ |
1486 #ifdef VSWTCH | 1480 #ifdef VSWTCH |
1487 tty.main.c_cc[VSWTCH] = CDISABLE; /* Turn off shell layering use | 1481 tty.main.c_cc[VSWTCH] = CDISABLE; /* Turn off shell layering use |
1488 of C-z */ | 1482 of C-z */ |
1489 #endif /* VSWTCH */ | 1483 #endif /* VSWTCH */ |
1490 | 1484 |
1491 #if defined (mips) || defined (HAVE_TCATTR) | 1485 #if defined (mips) || defined (HAVE_TCATTR) |
1492 #ifdef VSUSP | 1486 #ifdef VSUSP |
1493 tty.main.c_cc[VSUSP] = CDISABLE; /* Turn off mips handling of C-z. */ | 1487 tty.main.c_cc[VSUSP] = CDISABLE; /* Turn off mips handling of C-z. */ |
1494 #endif /* VSUSP */ | 1488 #endif /* VSUSP */ |
1495 #ifdef V_DSUSP | 1489 #ifdef V_DSUSP |
1496 tty.main.c_cc[V_DSUSP] = CDISABLE; /* Turn off mips handling of C-y. */ | 1490 tty.main.c_cc[V_DSUSP] = CDISABLE; /* Turn off mips handling of C-y. */ |
1497 #endif /* V_DSUSP */ | 1491 #endif /* V_DSUSP */ |
1498 #ifdef VDSUSP /* Some systems have VDSUSP, some have V_DSUSP. */ | 1492 #ifdef VDSUSP /* Some systems have VDSUSP, some have V_DSUSP. */ |
1499 tty.main.c_cc[VDSUSP] = CDISABLE; | 1493 tty.main.c_cc[VDSUSP] = CDISABLE; |
1500 #endif /* VDSUSP */ | 1494 #endif /* VDSUSP */ |
1501 #ifdef VLNEXT | 1495 #ifdef VLNEXT |
1502 tty.main.c_cc[VLNEXT] = CDISABLE; | 1496 tty.main.c_cc[VLNEXT] = CDISABLE; |
1503 #endif /* VLNEXT */ | 1497 #endif /* VLNEXT */ |
1504 #ifdef VREPRINT | 1498 #ifdef VREPRINT |
1505 tty.main.c_cc[VREPRINT] = CDISABLE; | 1499 tty.main.c_cc[VREPRINT] = CDISABLE; |
1506 #endif /* VREPRINT */ | 1500 #endif /* VREPRINT */ |
1507 #ifdef VWERASE | 1501 #ifdef VWERASE |
1508 tty.main.c_cc[VWERASE] = CDISABLE; | 1502 tty.main.c_cc[VWERASE] = CDISABLE; |
1509 #endif /* VWERASE */ | 1503 #endif /* VWERASE */ |
1510 #ifdef VDISCARD | 1504 #ifdef VDISCARD |
1511 tty.main.c_cc[VDISCARD] = CDISABLE; | 1505 tty.main.c_cc[VDISCARD] = CDISABLE; |
1512 #endif /* VDISCARD */ | 1506 #endif /* VDISCARD */ |
1513 | 1507 |
1514 if (tty_out->flow_control) | 1508 if (tty_out->flow_control) |
1515 { | 1509 { |
1516 #ifdef VSTART | 1510 #ifdef VSTART |
1517 tty.main.c_cc[VSTART] = '\021'; | 1511 tty.main.c_cc[VSTART] = '\021'; |
1518 #endif /* VSTART */ | 1512 #endif /* VSTART */ |
1519 #ifdef VSTOP | 1513 #ifdef VSTOP |
1520 tty.main.c_cc[VSTOP] = '\023'; | 1514 tty.main.c_cc[VSTOP] = '\023'; |
1521 #endif /* VSTOP */ | 1515 #endif /* VSTOP */ |
1522 } | 1516 } |
1523 else | 1517 else |
1524 { | 1518 { |
1525 #ifdef VSTART | 1519 #ifdef VSTART |
1526 tty.main.c_cc[VSTART] = CDISABLE; | 1520 tty.main.c_cc[VSTART] = CDISABLE; |
1527 #endif /* VSTART */ | 1521 #endif /* VSTART */ |
1528 #ifdef VSTOP | 1522 #ifdef VSTOP |
1529 tty.main.c_cc[VSTOP] = CDISABLE; | 1523 tty.main.c_cc[VSTOP] = CDISABLE; |
1530 #endif /* VSTOP */ | 1524 #endif /* VSTOP */ |
1531 } | 1525 } |
1532 #endif /* mips or HAVE_TCATTR */ | 1526 #endif /* mips or HAVE_TCATTR */ |
1533 | 1527 |
1534 #ifdef SET_LINE_DISCIPLINE | 1528 #ifdef SET_LINE_DISCIPLINE |
1535 /* Need to explicitly request TERMIODISC line discipline or | 1529 /* Need to explicitly request TERMIODISC line discipline or |
1536 Ultrix's termios does not work correctly. */ | 1530 Ultrix's termios does not work correctly. */ |
1537 tty.main.c_line = SET_LINE_DISCIPLINE; | 1531 tty.main.c_line = SET_LINE_DISCIPLINE; |
1538 #endif | 1532 #endif |
1539 #ifdef AIX | 1533 #ifdef AIX |
1540 #ifndef IBMR2AIX | 1534 #ifndef IBMR2AIX |
1541 /* AIX enhanced edit loses NULs, so disable it. */ | 1535 /* AIX enhanced edit loses NULs, so disable it. */ |
1542 tty.main.c_line = 0; | 1536 tty.main.c_line = 0; |
1543 tty.main.c_iflag &= ~ASCEDIT; | 1537 tty.main.c_iflag &= ~ASCEDIT; |
1544 #else | 1538 #else |
1545 tty.main.c_cc[VSTRT] = 255; | 1539 tty.main.c_cc[VSTRT] = 255; |
1546 tty.main.c_cc[VSTOP] = 255; | 1540 tty.main.c_cc[VSTOP] = 255; |
1547 tty.main.c_cc[VSUSP] = 255; | 1541 tty.main.c_cc[VSUSP] = 255; |
1548 tty.main.c_cc[VDSUSP] = 255; | 1542 tty.main.c_cc[VDSUSP] = 255; |
1549 #endif /* IBMR2AIX */ | 1543 #endif /* IBMR2AIX */ |
1550 if (tty_out->flow_control) | 1544 if (tty_out->flow_control) |
1551 { | 1545 { |
1552 #ifdef VSTART | 1546 #ifdef VSTART |
1553 tty.main.c_cc[VSTART] = '\021'; | 1547 tty.main.c_cc[VSTART] = '\021'; |
1554 #endif /* VSTART */ | 1548 #endif /* VSTART */ |
1555 #ifdef VSTOP | 1549 #ifdef VSTOP |
1556 tty.main.c_cc[VSTOP] = '\023'; | 1550 tty.main.c_cc[VSTOP] = '\023'; |
1557 #endif /* VSTOP */ | 1551 #endif /* VSTOP */ |
1558 } | 1552 } |
1559 /* Also, PTY overloads NUL and BREAK. | 1553 /* Also, PTY overloads NUL and BREAK. |
1560 don't ignore break, but don't signal either, so it looks like NUL. | 1554 don't ignore break, but don't signal either, so it looks like NUL. |
1561 This really serves a purpose only if running in an XTERM window | 1555 This really serves a purpose only if running in an XTERM window |
1562 or via TELNET or the like, but does no harm elsewhere. */ | 1556 or via TELNET or the like, but does no harm elsewhere. */ |
1563 tty.main.c_iflag &= ~IGNBRK; | 1557 tty.main.c_iflag &= ~IGNBRK; |
1564 tty.main.c_iflag &= ~BRKINT; | 1558 tty.main.c_iflag &= ~BRKINT; |
1565 #endif | 1559 #endif |
1566 #else /* if not HAVE_TERMIO */ | 1560 #else /* if not HAVE_TERMIO */ |
1567 #ifdef VMS | 1561 #ifdef VMS |
1568 tty.main.tt_char |= TT$M_NOECHO; | 1562 tty.main.tt_char |= TT$M_NOECHO; |
1569 if (meta_key) | 1563 if (meta_key) |
1570 tty.main.tt_char |= TT$M_EIGHTBIT; | 1564 tty.main.tt_char |= TT$M_EIGHTBIT; |
1571 if (tty_out->flow_control) | 1565 if (tty_out->flow_control) |
1572 tty.main.tt_char |= TT$M_TTSYNC; | 1566 tty.main.tt_char |= TT$M_TTSYNC; |
1573 else | 1567 else |
1574 tty.main.tt_char &= ~TT$M_TTSYNC; | 1568 tty.main.tt_char &= ~TT$M_TTSYNC; |
1575 tty.main.tt2_char |= TT2$M_PASTHRU | TT2$M_XON; | 1569 tty.main.tt2_char |= TT2$M_PASTHRU | TT2$M_XON; |
1576 #else /* not VMS (BSD, that is) */ | 1570 #else /* not VMS (BSD, that is) */ |
1577 #ifndef DOS_NT | 1571 #ifndef DOS_NT |
1578 XSETINT (Vtty_erase_char, tty.main.sg_erase); | 1572 XSETINT (Vtty_erase_char, tty.main.sg_erase); |
1579 tty.main.sg_flags &= ~(ECHO | CRMOD | XTABS); | 1573 tty.main.sg_flags &= ~(ECHO | CRMOD | XTABS); |
1580 if (meta_key) | 1574 if (meta_key) |
1581 tty.main.sg_flags |= ANYP; | 1575 tty.main.sg_flags |= ANYP; |
1582 tty.main.sg_flags |= interrupt_input ? RAW : CBREAK; | 1576 tty.main.sg_flags |= interrupt_input ? RAW : CBREAK; |
1583 #endif /* not DOS_NT */ | 1577 #endif /* not DOS_NT */ |
1584 #endif /* not VMS (BSD, that is) */ | 1578 #endif /* not VMS (BSD, that is) */ |
1585 #endif /* not HAVE_TERMIO */ | 1579 #endif /* not HAVE_TERMIO */ |
1586 | 1580 |
1587 /* If going to use CBREAK mode, we must request C-g to interrupt | 1581 /* If going to use CBREAK mode, we must request C-g to interrupt |
1588 and turn off start and stop chars, etc. If not going to use | 1582 and turn off start and stop chars, etc. If not going to use |
1589 CBREAK mode, do this anyway so as to turn off local flow | 1583 CBREAK mode, do this anyway so as to turn off local flow |
1590 control for user coming over network on 4.2; in this case, | 1584 control for user coming over network on 4.2; in this case, |
1591 only t_stopc and t_startc really matter. */ | 1585 only t_stopc and t_startc really matter. */ |
1592 #ifndef HAVE_TERMIO | 1586 #ifndef HAVE_TERMIO |
1593 #ifdef HAVE_TCHARS | 1587 #ifdef HAVE_TCHARS |
1594 /* Note: if not using CBREAK mode, it makes no difference how we | 1588 /* Note: if not using CBREAK mode, it makes no difference how we |
1595 set this */ | 1589 set this */ |
1596 tty.tchars = new_tchars; | 1590 tty.tchars = new_tchars; |
1597 tty.tchars.t_intrc = quit_char; | 1591 tty.tchars.t_intrc = quit_char; |
1598 if (tty_out->flow_control) | 1592 if (tty_out->flow_control) |
1599 { | 1593 { |
1600 tty.tchars.t_startc = '\021'; | 1594 tty.tchars.t_startc = '\021'; |
1601 tty.tchars.t_stopc = '\023'; | 1595 tty.tchars.t_stopc = '\023'; |
1602 } | 1596 } |
1603 | 1597 |
1604 tty.lmode = LDECCTQ | LLITOUT | LPASS8 | LNOFLSH | tty_out->old_tty.lmode; | 1598 tty.lmode = LDECCTQ | LLITOUT | LPASS8 | LNOFLSH | tty_out->old_tty.lmode; |
1605 #ifdef ultrix | 1599 #ifdef ultrix |
1606 /* Under Ultrix 4.2a, leaving this out doesn't seem to hurt | 1600 /* Under Ultrix 4.2a, leaving this out doesn't seem to hurt |
1607 anything, and leaving it in breaks the meta key. Go figure. */ | 1601 anything, and leaving it in breaks the meta key. Go figure. */ |
1608 tty.lmode &= ~LLITOUT; | 1602 tty.lmode &= ~LLITOUT; |
1609 #endif | 1603 #endif |
1610 | 1604 |
1611 #ifdef BSD4_1 | 1605 #ifdef BSD4_1 |
1612 lmode = tty.lmode; | 1606 lmode = tty.lmode; |
1613 #endif | 1607 #endif |
1614 | 1608 |
1615 #endif /* HAVE_TCHARS */ | 1609 #endif /* HAVE_TCHARS */ |
1616 #endif /* not HAVE_TERMIO */ | 1610 #endif /* not HAVE_TERMIO */ |
1617 | 1611 |
1618 #ifdef HAVE_LTCHARS | 1612 #ifdef HAVE_LTCHARS |
1619 tty.ltchars = new_ltchars; | 1613 tty.ltchars = new_ltchars; |
1620 #endif /* HAVE_LTCHARS */ | 1614 #endif /* HAVE_LTCHARS */ |
1621 #ifdef MSDOS /* Demacs 1.1.2 91/10/20 Manabu Higashida, MW Aug 1993 */ | 1615 #ifdef MSDOS /* Demacs 1.1.2 91/10/20 Manabu Higashida, MW Aug 1993 */ |
1622 if (!tty_out->term_initted) | 1616 if (!tty_out->term_initted) |
1623 internal_terminal_init (); | 1617 internal_terminal_init (); |
1624 dos_ttraw (); | 1618 dos_ttraw (); |
1625 #endif | 1619 #endif |
1626 | 1620 |
1627 EMACS_SET_TTY (fileno (TTY_INPUT (tty_out)), &tty, 0); | 1621 EMACS_SET_TTY (fileno (TTY_INPUT (tty_out)), &tty, 0); |
1628 | 1622 |
1629 /* This code added to insure that, if flow-control is not to be used, | 1623 /* This code added to insure that, if flow-control is not to be used, |
1630 we have an unlocked terminal at the start. */ | 1624 we have an unlocked terminal at the start. */ |
1631 | 1625 |
1632 #ifdef TCXONC | 1626 #ifdef TCXONC |
1633 if (!tty_out->flow_control) ioctl (fileno (TTY_INPUT (tty_out)), TCXONC, 1); | 1627 if (!tty_out->flow_control) ioctl (fileno (TTY_INPUT (tty_out)), TCXONC, 1); |
1634 #endif | 1628 #endif |
1635 #ifndef APOLLO | 1629 #ifndef APOLLO |
1636 #ifdef TIOCSTART | 1630 #ifdef TIOCSTART |
1637 if (!tty_out->flow_control) ioctl (fileno (TTY_INPUT (tty_out)), TIOCSTART, 0); | 1631 if (!tty_out->flow_control) ioctl (fileno (TTY_INPUT (tty_out)), TIOCSTART, 0); |
1638 #endif | 1632 #endif |
1639 #endif | 1633 #endif |
1640 | 1634 |
1641 #if defined (HAVE_TERMIOS) || defined (HPUX9) | 1635 #if defined (HAVE_TERMIOS) || defined (HPUX9) |
1642 #ifdef TCOON | 1636 #ifdef TCOON |
1643 if (!tty_out->flow_control) tcflow (fileno (TTY_INPUT (tty_out)), TCOON); | 1637 if (!tty_out->flow_control) tcflow (fileno (TTY_INPUT (tty_out)), TCOON); |
1644 #endif | 1638 #endif |
1645 #endif | 1639 #endif |
1646 | 1640 |
1647 #ifdef AIXHFT | 1641 #ifdef AIXHFT |
1648 hft_init (tty_out); | 1642 hft_init (tty_out); |
1649 #ifdef IBMR2AIX | 1643 #ifdef IBMR2AIX |
1650 { | 1644 { |
1651 /* IBM's HFT device usually thinks a ^J should be LF/CR. We need it | 1645 /* IBM's HFT device usually thinks a ^J should be LF/CR. We need it |
1652 to be only LF. This is the way that is done. */ | 1646 to be only LF. This is the way that is done. */ |
1653 struct termio tty; | 1647 struct termio tty; |
1654 | 1648 |
1655 if (ioctl (1, HFTGETID, &tty) != -1) | 1649 if (ioctl (1, HFTGETID, &tty) != -1) |
1656 write (1, "\033[20l", 5); | 1650 write (1, "\033[20l", 5); |
1657 } | 1651 } |
1658 #endif | 1652 #endif |
1659 #endif /* AIXHFT */ | 1653 #endif /* AIXHFT */ |
1660 | 1654 |
1661 #ifdef VMS | 1655 #ifdef VMS |
1662 /* Appears to do nothing when in PASTHRU mode. | 1656 /* Appears to do nothing when in PASTHRU mode. |
1663 SYS$QIOW (0, fileno (TTY_INPUT (tty_out)), IO$_SETMODE|IO$M_OUTBAND, 0, 0, 0, | 1657 SYS$QIOW (0, fileno (TTY_INPUT (tty_out)), IO$_SETMODE|IO$M_OUTBAND, 0, 0, 0, |
1664 interrupt_signal, oob_chars, 0, 0, 0, 0); | 1658 interrupt_signal, oob_chars, 0, 0, 0, 0); |
1665 */ | 1659 */ |
1666 queue_kbd_input (0); | 1660 queue_kbd_input (0); |
1667 #endif /* VMS */ | 1661 #endif /* VMS */ |
1668 } | |
1669 | 1662 |
1670 #ifdef F_SETFL | 1663 #ifdef F_SETFL |
1671 #ifndef F_SETOWN_BUG | 1664 #ifndef F_SETOWN_BUG |
1672 #ifdef F_GETOWN /* F_SETFL does not imply existence of F_GETOWN */ | 1665 #ifdef F_GETOWN /* F_SETFL does not imply existence of F_GETOWN */ |
1673 if (interrupt_input | 1666 if (interrupt_input) |
1674 && (tty_out->input != stdin || EQ (Vwindow_system, Qnil))) | |
1675 { | 1667 { |
1676 old_fcntl_owner[fileno (TTY_INPUT (tty_out))] = | 1668 old_fcntl_owner[fileno (TTY_INPUT (tty_out))] = |
1677 fcntl (fileno (TTY_INPUT (tty_out)), F_GETOWN, 0); | 1669 fcntl (fileno (TTY_INPUT (tty_out)), F_GETOWN, 0); |
1678 fcntl (fileno (TTY_INPUT (tty_out)), F_SETOWN, getpid ()); | 1670 fcntl (fileno (TTY_INPUT (tty_out)), F_SETOWN, getpid ()); |
1679 init_sigio (fileno (TTY_INPUT (tty_out))); | 1671 init_sigio (fileno (TTY_INPUT (tty_out))); |
1697 setvbuf (TTY_OUTPUT (tty_out), (char *) _sobuf, _IOFBF, sizeof _sobuf); | 1689 setvbuf (TTY_OUTPUT (tty_out), (char *) _sobuf, _IOFBF, sizeof _sobuf); |
1698 #else | 1690 #else |
1699 setbuf (TTY_OUTPUT (tty_out), (char *) _sobuf); | 1691 setbuf (TTY_OUTPUT (tty_out), (char *) _sobuf); |
1700 #endif | 1692 #endif |
1701 | 1693 |
1702 #if 0 /* We always need this with multi-tty support. */ | 1694 tty_set_terminal_modes (tty_out->display); |
1703 #ifdef HAVE_WINDOW_SYSTEM | |
1704 /* Emacs' window system on MSDOG uses the `internal terminal' and therefore | |
1705 needs the initialization code below. */ | |
1706 if (EQ (Vwindow_system, Qnil) | |
1707 #ifndef WINDOWSNT | |
1708 /* When running in tty mode on NT/Win95, we have a read_socket | |
1709 hook, but still need the rest of the initialization code below. */ | |
1710 && (! read_socket_hook) | |
1711 #endif | |
1712 ) | |
1713 #endif | |
1714 #endif | |
1715 tty_set_terminal_modes (tty_out->display); | |
1716 | 1695 |
1717 if (!tty_out->term_initted) | 1696 if (!tty_out->term_initted) |
1718 { | 1697 { |
1719 Lisp_Object tail, frame; | 1698 Lisp_Object tail, frame; |
1720 FOR_EACH_FRAME (tail, frame) | 1699 FOR_EACH_FRAME (tail, frame) |
1873 fflush (stdout); | 1852 fflush (stdout); |
1874 return; | 1853 return; |
1875 } | 1854 } |
1876 if (!tty_out->term_initted) | 1855 if (!tty_out->term_initted) |
1877 return; | 1856 return; |
1878 #if 0 /* We always need to do this with multi-tty support. */ | |
1879 #ifdef HAVE_WINDOW_SYSTEM | |
1880 /* Emacs' window system on MSDOG uses the `internal terminal' and therefore | |
1881 needs the clean-up code below. */ | |
1882 if (tty_out->input != stdin | |
1883 || (!EQ (Vwindow_system, Qnil) | |
1884 #ifndef WINDOWSNT | |
1885 /* When running in tty mode on NT/Win95, we have a read_socket | |
1886 hook, but still need the rest of the clean-up code below. */ | |
1887 || read_socket_hook | |
1888 #endif | |
1889 )) | |
1890 return; | |
1891 #endif | |
1892 #endif | |
1893 | 1857 |
1894 cmgoto (tty_out, FrameRows (tty_out) - 1, 0); | 1858 cmgoto (tty_out, FrameRows (tty_out) - 1, 0); |
1895 #if 0 /* XXX This doesn't work anymore, the signature has changed. */ | 1859 #if 0 /* XXX This doesn't work anymore, the signature has changed. */ |
1896 tty_clear_end_of_line (tty_out, FrameCols (tty_out)); | 1860 tty_clear_end_of_line (tty_out, FrameCols (tty_out)); |
1897 #endif | 1861 #endif |
2576 sys_select (nfds, rfds, wfds, efds, timeout) | 2540 sys_select (nfds, rfds, wfds, efds, timeout) |
2577 int nfds; | 2541 int nfds; |
2578 SELECT_TYPE *rfds, *wfds, *efds; | 2542 SELECT_TYPE *rfds, *wfds, *efds; |
2579 EMACS_TIME *timeout; | 2543 EMACS_TIME *timeout; |
2580 { | 2544 { |
2581 int ravail = 0; | 2545 /* XXX This needs to be updated for multi-tty support. Is there |
2546 anybody who needs to emulate select these days? */ | |
2547 int ravail = 0; | |
2582 SELECT_TYPE orfds; | 2548 SELECT_TYPE orfds; |
2583 int timeoutval; | 2549 int timeoutval; |
2584 int *local_timeout; | 2550 int *local_timeout; |
2585 extern int proc_buffered_char[]; | 2551 extern int proc_buffered_char[]; |
2586 #ifndef subprocesses | 2552 #ifndef subprocesses |
2591 unsigned char buf; | 2557 unsigned char buf; |
2592 | 2558 |
2593 #if defined (HAVE_SELECT) && defined (HAVE_X_WINDOWS) | 2559 #if defined (HAVE_SELECT) && defined (HAVE_X_WINDOWS) |
2594 /* If we're using X, then the native select will work; we only need the | 2560 /* If we're using X, then the native select will work; we only need the |
2595 emulation for non-X usage. */ | 2561 emulation for non-X usage. */ |
2596 if (!NILP (Vwindow_system)) | 2562 if (!NILP (Vinitial_window_system)) |
2597 return select (nfds, rfds, wfds, efds, timeout); | 2563 return select (nfds, rfds, wfds, efds, timeout); |
2598 #endif | 2564 #endif |
2599 timeoutval = timeout ? EMACS_SECS (*timeout) : 100000; | 2565 timeoutval = timeout ? EMACS_SECS (*timeout) : 100000; |
2600 local_timeout = &timeoutval; | 2566 local_timeout = &timeoutval; |
2601 FD_ZERO (&orfds); | 2567 FD_ZERO (&orfds); |
2715 #endif | 2681 #endif |
2716 | 2682 |
2717 void | 2683 void |
2718 read_input_waiting () | 2684 read_input_waiting () |
2719 { | 2685 { |
2720 /* XXX This needs to be updated for multi-tty support. Does | 2686 /* XXX This needs to be updated for multi-tty support. Is there |
2721 anybody need to emulate select these days? */ | 2687 anybody who needs to emulate select these days? */ |
2722 int nread, i; | 2688 int nread, i; |
2723 extern int quit_char; | 2689 extern int quit_char; |
2724 | 2690 |
2725 if (read_socket_hook) | 2691 if (read_socket_hook) |
2726 { | 2692 { |