home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 August (Alt) / CHIP 2005-08.1.iso / program / guvenlik / syslinux-3.07.exe / com32 / libutil / ansiraw.c < prev    next >
Encoding:
C/C++ Source or Header  |  2004-12-20  |  2.7 KB  |  95 lines

  1. #ident "$Id: ansiraw.c,v 1.5 2004/12/21 01:37:43 hpa Exp $"
  2. /* ----------------------------------------------------------------------- *
  3.  *   
  4.  *   Copyright 2004 H. Peter Anvin - All Rights Reserved
  5.  *
  6.  *   Permission is hereby granted, free of charge, to any person
  7.  *   obtaining a copy of this software and associated documentation
  8.  *   files (the "Software"), to deal in the Software without
  9.  *   restriction, including without limitation the rights to use,
  10.  *   copy, modify, merge, publish, distribute, sublicense, and/or
  11.  *   sell copies of the Software, and to permit persons to whom
  12.  *   the Software is furnished to do so, subject to the following
  13.  *   conditions:
  14.  *   
  15.  *   The above copyright notice and this permission notice shall
  16.  *   be included in all copies or substantial portions of the Software.
  17.  *   
  18.  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  19.  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  20.  *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  21.  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  22.  *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  23.  *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  24.  *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  25.  *   OTHER DEALINGS IN THE SOFTWARE.
  26.  *
  27.  * ----------------------------------------------------------------------- */
  28.  
  29. /*
  30.  * ansiraw.c
  31.  *
  32.  * Configures the console for ANSI output in raw mode; versions
  33.  * for COM32 and Linux support.
  34.  */
  35.  
  36. #ifdef __COM32__
  37.  
  38. #include <stdio.h>
  39. #include <unistd.h>
  40. #include <console.h>
  41.  
  42. static void __attribute__((destructor)) console_cleanup(void)
  43. {
  44.   /* For the serial console, be nice and clean up */
  45.   fputs("\033[0m\033[20l", stdout);
  46. }
  47.  
  48. void console_ansi_raw(void)
  49. {
  50.   openconsole(&dev_rawcon_r, &dev_ansiserial_w);
  51.   fputs("\033[0m\033[20h", stdout);
  52. }
  53.  
  54. #else 
  55.  
  56. #include <stdio.h>
  57. #include <termios.h>
  58.  
  59. static struct termios original_termios_settings;
  60.  
  61. static void __attribute__((constructor)) console_init(void)
  62. {
  63.   tcgetattr(0, &original_termios_settings);
  64. }
  65.  
  66. static void __attribute__((destructor)) console_cleanup(void)
  67. {
  68.   fputs("\033[0m\033[20l", stdout);
  69.   tcsetattr(0, TCSANOW, &original_termios_settings);
  70. }
  71.   
  72.  
  73. void console_ansi_raw(void)
  74. {
  75.   struct termios tio;
  76.  
  77.   /* Disable stdio buffering */
  78.   setbuf(stdin,  NULL);
  79.   setbuf(stdout, NULL);
  80.   setbuf(stderr, NULL);
  81.  
  82.   /* Set the termios flag so we behave the same as libcom32 */
  83.   tcgetattr(0, &tio);
  84.   tio.c_iflag &= ~ICRNL;
  85.   tio.c_iflag |= IGNCR;
  86.   tio.c_lflag &= ~(ISIG|ICANON|ECHO);
  87.   tio.c_cc[VMIN]  = 0;
  88.   tio.c_cc[VTIME] = 1;        /* Don't 100% busy-wait in Linux */
  89.   tcsetattr(0, TCSAFLUSH, &tio);
  90.   fputs("\033[0m\033[20h", stdout);
  91. }
  92.  
  93. #endif
  94.  
  95.