summaryrefslogtreecommitdiff
path: root/boot
diff options
context:
space:
mode:
Diffstat (limited to 'boot')
-rw-r--r--boot/boot.c73
1 files changed, 36 insertions, 37 deletions
diff --git a/boot/boot.c b/boot/boot.c
index 70c600f3..522fedff 100644
--- a/boot/boot.c
+++ b/boot/boot.c
@@ -61,8 +61,33 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <signal.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
+#include <termios.h>
+#include <error.h>
#include <hurd.h>
+static struct termios orig_tty_state;
+
+static void
+init_termstate ()
+{
+ struct termios tty_state;
+
+ if (tcgetattr (0, &tty_state) < 0)
+ error (10, errno, "tcgetattr");
+
+ orig_tty_state = tty_state;
+ cfmakeraw (&tty_state);
+
+ if (tcsetattr (0, 0, &tty_state) < 0)
+ error (11, errno, "tcsetattr");
+}
+
+static void
+restore_termstate ()
+{
+ tcsetattr (0, 0, &orig_tty_state);
+}
+
#define host_fstat fstat
typedef struct stat host_stat_t;
#define host_exit exit
@@ -89,6 +114,7 @@ vm_address_t fs_stack_base;
vm_size_t fs_stack_size;
void init_termstate ();
+void restore_termstate ();
char *fsname;
@@ -958,48 +984,19 @@ bootstrap_compat(in, out)
reply->RetCode = MIG_NO_REPLY;
}
-
+#ifdef notanymore
/* Imlementiation of tioctl interface */
+
+#include <termios.h>
+#undef tcgetattr
+#undef tcsetattr
+
/* This is bletcherously kludged to work with emacs in a fragile
way. */
int term_modes[4];
char term_ccs[20];
int term_speeds[2];
-struct sgttyb term_sgb;
-int localbits;
-
-#define ICANON (1 << 8)
-
-void
-init_termstate ()
-{
- struct sgttyb sgb;
- int bits;
- ioctl (0, TIOCGETP, &term_sgb);
- ioctl (0, TIOCLGET, &localbits);
- /* Enter raw made. Rather than try and interpret these bits,
- we just do what emacs does in .../emacs/src/sysdep.c for
- an old style terminal driver. */
- bits = localbits | LDECCTQ | LLITOUT | LPASS8 | LNOFLSH;
- ioctl (0, TIOCLSET, &bits);
- sgb = term_sgb;
- sgb.sg_flags &= ~ECHO;
- sgb.sg_flags |= RAW | ANYP;
- ioctl (0, TIOCSETN, &sgb);
-}
-
-void
-restore_termstate ()
-{
- ioctl (0, TIOCLSET, &localbits);
- ioctl (0, TIOCSETN, &term_sgb);
-}
-
-#ifdef notanymore
-#include <termios.h>
-#undef tcgetattr
-#undef tcsetattr
kern_return_t
S_tioctl_tiocgeta (mach_port_t port,
@@ -1036,6 +1033,8 @@ S_tioctl_tiocgeta (mach_port_t port,
#endif
}
+#define ICANON (1 << 8)
+
kern_return_t
S_tioctl_tiocseta (mach_port_t port,
int modes[],
@@ -1105,9 +1104,9 @@ S_tioctl_tiocsetaf (mach_port_t port,
{
return S_tioctl_tiocseta (port, modes, ccs, speeds);
}
-#endif /* notanymore */
-
+#endif /* notanymore */
+
/* Implementation of device interface */
kern_return_t