ncurses 6.0 - patch 20150912
[ncurses.git] / ncurses / tinfo / lib_raw.c
index aea5df54813f272cbfab36c468ca19a4f351459e..928692b0cb272ad52433dbb98ad2502dd5866303 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
 
 #include <curses.priv.h>
 
-MODULE_ID("$Id: lib_raw.c,v 1.17 2009/08/01 23:11:02 tom Exp $")
-
-#if SVR4_TERMIO && !defined(_POSIX_SOURCE)
-#define _POSIX_SOURCE
-#endif
+MODULE_ID("$Id: lib_raw.c,v 1.21 2012/01/21 19:21:29 KO.Myung-Hun Exp $")
 
 #if HAVE_SYS_TERMIO_H
 #include <sys/termio.h>                /* needed for ISC */
@@ -66,6 +62,11 @@ MODULE_ID("$Id: lib_raw.c,v 1.17 2009/08/01 23:11:02 tom Exp $")
 #define _nc_setmode(mode)      /* nothing */
 #endif
 
+#if USE_KLIBC_KBD
+#define INCL_KBD
+#include <os2.h>
+#endif
+
 #define COOKED_INPUT   (IXON|BRKINT|PARMRK)
 
 #ifdef TRACE
@@ -82,7 +83,7 @@ NCURSES_SP_NAME(raw) (NCURSES_SP_DCL0)
     int result = ERR;
     TERMINAL *termp;
 
-    T((T_CALLED("raw(%p)"), SP_PARM));
+    T((T_CALLED("raw(%p)"), (void *) SP_PARM));
     if ((termp = TerminalOf(SP_PARM)) != 0) {
        TTY buf;
 
@@ -91,8 +92,8 @@ NCURSES_SP_NAME(raw) (NCURSES_SP_DCL0)
 
        buf = termp->Nttyb;
 #ifdef TERMIOS
-       buf.c_lflag &= ~(ICANON | ISIG | IEXTEN);
-       buf.c_iflag &= ~(COOKED_INPUT);
+       buf.c_lflag &= (unsigned) ~(ICANON | ISIG | IEXTEN);
+       buf.c_iflag &= (unsigned) ~(COOKED_INPUT);
        buf.c_cc[VMIN] = 1;
        buf.c_cc[VTIME] = 0;
 #else
@@ -100,6 +101,17 @@ NCURSES_SP_NAME(raw) (NCURSES_SP_DCL0)
 #endif
        result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
        if (result == OK) {
+#if USE_KLIBC_KBD
+           KBDINFO kbdinfo;
+
+           kbdinfo.cb = sizeof(kbdinfo);
+           KbdGetStatus(&kbdinfo, 0);
+
+           kbdinfo.cb = sizeof(kbdinfo);
+           kbdinfo.fsMask &= ~KEYBOARD_ASCII_MODE;
+           kbdinfo.fsMask |= KEYBOARD_BINARY_MODE;
+           KbdSetStatus(&kbdinfo, 0);
+#endif
            SP_PARM->_raw = TRUE;
            SP_PARM->_cbreak = 1;
            termp->Nttyb = buf;
@@ -123,7 +135,7 @@ NCURSES_SP_NAME(cbreak) (NCURSES_SP_DCL0)
     int result = ERR;
     TERMINAL *termp;
 
-    T((T_CALLED("cbreak(%p)"), SP_PARM));
+    T((T_CALLED("cbreak(%p)"), (void *) SP_PARM));
     if ((termp = TerminalOf(SP_PARM)) != 0) {
        TTY buf;
 
@@ -132,8 +144,8 @@ NCURSES_SP_NAME(cbreak) (NCURSES_SP_DCL0)
 
        buf = termp->Nttyb;
 #ifdef TERMIOS
-       buf.c_lflag &= ~ICANON;
-       buf.c_iflag &= ~ICRNL;
+       buf.c_lflag &= (unsigned) ~ICANON;
+       buf.c_iflag &= (unsigned) ~ICRNL;
        buf.c_lflag |= ISIG;
        buf.c_cc[VMIN] = 1;
        buf.c_cc[VTIME] = 0;
@@ -168,14 +180,14 @@ NCURSES_SP_NAME(qiflush) (NCURSES_SP_DCL0)
     int result = ERR;
     TERMINAL *termp;
 
-    T((T_CALLED("qiflush(%p)"), SP_PARM));
+    T((T_CALLED("qiflush(%p)"), (void *) SP_PARM));
     if ((termp = TerminalOf(SP_PARM)) != 0) {
        TTY buf;
 
        BEFORE("qiflush");
        buf = termp->Nttyb;
 #ifdef TERMIOS
-       buf.c_lflag &= ~(NOFLSH);
+       buf.c_lflag &= (unsigned) ~(NOFLSH);
        result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
 #else
        /* FIXME */
@@ -201,7 +213,7 @@ NCURSES_SP_NAME(noraw) (NCURSES_SP_DCL0)
     int result = ERR;
     TERMINAL *termp;
 
-    T((T_CALLED("noraw(%p)"), SP_PARM));
+    T((T_CALLED("noraw(%p)"), (void *) SP_PARM));
     if ((termp = TerminalOf(SP_PARM)) != 0) {
        TTY buf;
 
@@ -218,6 +230,17 @@ NCURSES_SP_NAME(noraw) (NCURSES_SP_DCL0)
 #endif
        result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);
        if (result == OK) {
+#if USE_KLIBC_KBD
+           KBDINFO kbdinfo;
+
+           kbdinfo.cb = sizeof(kbdinfo);
+           KbdGetStatus(&kbdinfo, 0);
+
+           kbdinfo.cb = sizeof(kbdinfo);
+           kbdinfo.fsMask &= ~KEYBOARD_BINARY_MODE;
+           kbdinfo.fsMask |= KEYBOARD_ASCII_MODE;
+           KbdSetStatus(&kbdinfo, 0);
+#endif
            SP_PARM->_raw = FALSE;
            SP_PARM->_cbreak = 0;
            termp->Nttyb = buf;
@@ -241,7 +264,7 @@ NCURSES_SP_NAME(nocbreak) (NCURSES_SP_DCL0)
     int result = ERR;
     TERMINAL *termp;
 
-    T((T_CALLED("nocbreak(%p)"), SP_PARM));
+    T((T_CALLED("nocbreak(%p)"), (void *) SP_PARM));
     if ((termp = TerminalOf(SP_PARM)) != 0) {
        TTY buf;
 
@@ -279,7 +302,7 @@ NCURSES_SP_NAME(noqiflush) (NCURSES_SP_DCL0)
     int result = ERR;
     TERMINAL *termp;
 
-    T((T_CALLED("noqiflush(%p)"), SP_PARM));
+    T((T_CALLED("noqiflush(%p)"), (void *) SP_PARM));
     if ((termp = TerminalOf(SP_PARM)) != 0) {
        TTY buf;
 
@@ -319,7 +342,7 @@ NCURSES_SP_NAME(intrflush) (NCURSES_SP_DCLx WINDOW *win GCC_UNUSED, bool flag)
     int result = ERR;
     TERMINAL *termp;
 
-    T((T_CALLED("intrflush(%p,%d)"), SP_PARM, flag));
+    T((T_CALLED("intrflush(%p,%d)"), (void *) SP_PARM, flag));
     if (SP_PARM == 0)
        returnCode(ERR);
 
@@ -330,7 +353,7 @@ NCURSES_SP_NAME(intrflush) (NCURSES_SP_DCLx WINDOW *win GCC_UNUSED, bool flag)
        buf = termp->Nttyb;
 #ifdef TERMIOS
        if (flag)
-           buf.c_lflag &= ~(NOFLSH);
+           buf.c_lflag &= (unsigned) ~(NOFLSH);
        else
            buf.c_lflag |= (NOFLSH);
        result = NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf);