Index: cygwin/fhandler.h =================================================================== RCS file: /cvs/src/src/winsup/cygwin/fhandler.h,v retrieving revision 1.294 diff -u -r1.294 fhandler.h --- cygwin/fhandler.h 26 Jun 2006 12:12:11 -0000 1.294 +++ cygwin/fhandler.h 2 Jul 2006 15:29:59 -0000 @@ -821,6 +821,7 @@ unsigned rarg; bool saw_question_mark; bool alternate_charset_active; + bool metabit; char my_title_buf [TITLESIZE + 1]; Index: cygwin/fhandler_console.cc =================================================================== RCS file: /cvs/src/src/winsup/cygwin/fhandler_console.cc,v retrieving revision 1.164 diff -u -r1.164 fhandler_console.cc --- cygwin/fhandler_console.cc 3 Jun 2006 20:32:07 -0000 1.164 +++ cygwin/fhandler_console.cc 2 Jul 2006 15:29:59 -0000 @@ -20,6 +20,7 @@ #include #include #include +#include #include "cygerrno.h" #include "security.h" #include "path.h" @@ -397,6 +398,11 @@ meta = (control_key_state & dev_state->meta_mask) != 0; if (!meta) toadd = tmp + 1; + else if (dev_state->metabit) + { + tmp[1] |= 0x80; + toadd = tmp + 1; + } else { tmp[0] = '\033'; @@ -745,6 +751,20 @@ case TIOCSWINSZ: bg_check (SIGTTOU); return 0; + case KDGKBMETA: + *(int *) buf = (dev_state->metabit) ? K_METABIT : K_ESCPREFIX; + return 0; + case KDSKBMETA: + if ((int) buf == K_METABIT) + dev_state->metabit = TRUE; + else if ((int) buf == K_ESCPREFIX) + dev_state->metabit = FALSE; + else + { + set_errno (EINVAL); + return -1; + } + return 0; case TIOCLINUX: if (* (int *) buf == 6) { Index: cygwin/fhandler_tty.cc =================================================================== RCS file: /cvs/src/src/winsup/cygwin/fhandler_tty.cc,v retrieving revision 1.172 diff -u -r1.172 fhandler_tty.cc --- cygwin/fhandler_tty.cc 12 Jun 2006 14:56:31 -0000 1.172 +++ cygwin/fhandler_tty.cc 2 Jul 2006 15:30:00 -0000 @@ -17,6 +17,7 @@ #include #include #include +#include #include "cygerrno.h" #include "security.h" #include "path.h" @@ -435,9 +436,12 @@ { WaitForSingleObject (tty_master->ioctl_request_event, INFINITE); termios_printf ("ioctl() request"); - tty_master->get_ttyp ()->ioctl_retval = - tty_master->console->ioctl (tty_master->get_ttyp ()->cmd, - (void *) &tty_master->get_ttyp ()->arg); + tty *ttyp = tty_master->get_ttyp (); + ttyp->ioctl_retval = + tty_master->console->ioctl (ttyp->cmd, + (ttyp->cmd == KDSKBMETA) + ? (void *) ttyp->arg.value + : (void *) &ttyp->arg); SetEvent (tty_master->ioctl_done_event); } } @@ -1001,6 +1005,8 @@ case TIOCGWINSZ: case TIOCSWINSZ: case TIOCLINUX: + case KDGKBMETA: + case KDSKBMETA: break; case FIONBIO: set_nonblocking (*(int *) arg); @@ -1057,6 +1063,28 @@ *(unsigned char *) arg = get_ttyp ()->arg.value & 0xFF; } break; + case KDGKBMETA: + if (ioctl_request_event) + { + SetEvent (ioctl_request_event); + if (ioctl_done_event) + WaitForSingleObject (ioctl_done_event, INFINITE); + *(int *) arg = get_ttyp ()->arg.value; + } + else + get_ttyp ()->ioctl_retval = -EINVAL; + break; + case KDSKBMETA: + if (ioctl_request_event) + { + get_ttyp ()->arg.value = (int) arg; + SetEvent (ioctl_request_event); + if (ioctl_done_event) + WaitForSingleObject (ioctl_done_event, INFINITE); + } + else + get_ttyp ()->ioctl_retval = -EINVAL; + break; } release_output_mutex (); --- /dev/null 2006-07-03 00:31:47.828125000 +0900 +++ cygwin/include/cygwin/kd.h 2005-09-21 08:54:34.015625000 +0900 @@ -0,0 +1,20 @@ +/* cygwin/kd.h + + Copyright 2005 Red Hat Inc. + Written by Kazuhiro Fujieda + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +#ifndef _CYGWIN_KD_H_ +#define _CYGWIN_KD_H_ + +#define KDGKBMETA 0x4b62 +#define KDSKBMETA 0x4b63 +#define K_METABIT 0x03 +#define K_ESCPREFIX 0x04 + +#endif