]> sourceware.org Git - newlib-cygwin.git/commitdiff
* fhandler.h (class dev_console): Flag for expanded control sequence.
authorCorinna Vinschen <corinna@vinschen.de>
Fri, 11 Jan 2013 11:04:50 +0000 (11:04 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Fri, 11 Jan 2013 11:04:50 +0000 (11:04 +0000)
* fhandler_console.cc (char_command): Supporting cursor style modes.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_console.cc

index 863fb560fbaa91f720e24d0da07f2dfbce555735..7f40ffe6d769b26f060c2f33a4f4231d8476bb28 100644 (file)
@@ -1,3 +1,8 @@
+2013-01-11  Thomas Wolff  <towo@towo.net>
+
+       * fhandler.h (class dev_console): Flag for expanded control sequence.
+       * fhandler_console.cc (char_command): Supporting cursor style modes.
+
 2013-01-10  Corinna Vinschen  <corinna@vinschen.de>
 
        * path.h (path_conv::fs_type): New method.
index e2db959e58d648221539f4c5f7a4d1b465c79fa5..3225f8f20577886c4080bf35d3b67d2940c4e04e 100644 (file)
@@ -1,7 +1,7 @@
 /* fhandler.h
 
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
+   2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
 
 This file is part of Cygwin.
 
@@ -1246,6 +1246,7 @@ class dev_console
   unsigned rarg;
   bool saw_question_mark;
   bool saw_greater_than_sign;
+  bool saw_space;
   bool vt100_graphics_mode_G0;
   bool vt100_graphics_mode_G1;
   bool iso_2022_G1;
index faedd8ab4b45ff4ef209882f0c1a0181ddfa44fa..3e1a424f456863a5fbfce94c3f946dc490e1445e 100644 (file)
@@ -1,7 +1,7 @@
 /* fhandler_console.cc
 
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
+   2006, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
 
 This file is part of Cygwin.
 
@@ -1510,6 +1510,31 @@ fhandler_console::char_command (char c)
           }
        dev_state.set_color (get_output_handle ());
       break;
+    case 'q': /* Set cursor style (DECSCUSR) */
+      if (dev_state.saw_space)
+       {
+           CONSOLE_CURSOR_INFO console_cursor_info;
+           GetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
+           switch (dev_state.args_[0])
+             {
+               case 0: /* blinking block */
+               case 1: /* blinking block (default) */
+               case 2: /* steady block */
+                 console_cursor_info.dwSize = 100;
+                 SetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
+                 break;
+               case 3: /* blinking underline */
+               case 4: /* steady underline */
+                 console_cursor_info.dwSize = 10;      /* or Windows default 25? */
+                 SetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
+                 break;
+               default: /* use value as percentage */
+                 console_cursor_info.dwSize = dev_state.args_[0];
+                 SetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
+                 break;
+             }
+       }
+      break;
     case 'h':
     case 'l':
       if (!dev_state.saw_question_mark)
@@ -1525,6 +1550,17 @@ fhandler_console::char_command (char c)
        }
       switch (dev_state.args_[0])
        {
+       case 25: /* Show/Hide Cursor (DECTCEM) */
+         {
+           CONSOLE_CURSOR_INFO console_cursor_info;
+           GetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
+           if (c == 'h')
+             console_cursor_info.bVisible = TRUE;
+           else
+             console_cursor_info.bVisible = FALSE;
+           SetConsoleCursorInfo (get_output_handle (), & console_cursor_info);
+           break;
+         }
        case 47:   /* Save/Restore screen */
          if (c == 'h') /* save */
            {
@@ -1752,7 +1788,7 @@ fhandler_console::char_command (char c)
          __small_sprintf (buf, "\033[%d;%dR", y + 1, x + 1);
          puts_readahead (buf);
          break;
-    default:
+      default:
          goto bad_escape;
        }
       break;
@@ -2026,6 +2062,7 @@ fhandler_console::write (const void *vsrc, size_t len)
              dev_state.state_ = gotsquare;
              dev_state.saw_question_mark = false;
              dev_state.saw_greater_than_sign = false;
+             dev_state.saw_space = false;
              for (dev_state.nargs_ = 0; dev_state.nargs_ < MAXARGS; dev_state.nargs_++)
                dev_state.args_[dev_state.nargs_] = 0;
              dev_state.nargs_ = 0;
@@ -2092,6 +2129,12 @@ fhandler_console::write (const void *vsrc, size_t len)
              if (dev_state.nargs_ >= MAXARGS)
                dev_state.nargs_--;
            }
+         else if (*src == ' ')
+           {
+             src++;
+             dev_state.saw_space = true;
+             dev_state.state_ = gotcommand;
+           }
          else
            {
              dev_state.state_ = gotcommand;
This page took 0.038939 seconds and 5 git commands to generate.