Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
  2. #ifndef __dj_include_libc_ttyprvt_h__
  3. #define __dj_include_libc_ttyprvt_h__
  4.  
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8.  
  9. #ifndef __dj_ENFORCE_ANSI_FREESTANDING
  10.  
  11. #ifndef __STRICT_ANSI__
  12.  
  13. #ifndef _POSIX_SOURCE
  14.  
  15. #include <termios.h>
  16. #include <unistd.h>
  17.  
  18. #define _TTY_CTRL(x) ((x) & 0x1f)
  19. #define _TTY_QUEUE_SIZE 2048
  20. #define _TTY_EDITLINE_SIZE ((_TTY_QUEUE_SIZE) / 2)
  21. #define _TTY_EDITLINE_CTRL 0
  22. #define _TTY_EDITLINE_SINGLE 1
  23. #define _TTY_EDITLINE_INVALID -1
  24.  
  25. struct tty_queue
  26. {
  27.   int size;
  28.   unsigned char *top;
  29.   unsigned char *bottom;
  30.   int count;
  31.   unsigned char *rpos;
  32.   unsigned char *wpos;
  33. };
  34.  
  35. struct tty
  36. {
  37.   struct termios __libc_termios;
  38.   struct tty_queue __libc_tty_queue;
  39.   int __libc_tty_status;
  40. };
  41.  
  42. struct tty_editline
  43. {
  44.   int col;
  45.   char flag[_TTY_EDITLINE_SIZE];
  46.   unsigned char buf[_TTY_EDITLINE_SIZE];
  47. };
  48.  
  49. #if !defined (_POSIX_VDISABLE) || (_POSIX_VDISABLE == 0)
  50. #error _POSIX_VDISABLE is undefine or zero.
  51. #endif
  52.  
  53. #define TTYDEFAULT \
  54. { \
  55.   { \
  56.     /* c_cc[] */                                                        \
  57.     {                                                                   \
  58.       (cc_t) 0,               /* pad */                                 \
  59.       (cc_t) _TTY_CTRL ('d'), /* VEOF */                                \
  60.       (cc_t) _POSIX_VDISABLE, /* VEOL */                                \
  61.       (cc_t) _TTY_CTRL ('h'), /* VERASE */                              \
  62.       (cc_t) _TTY_CTRL ('c'), /* VINTR */                               \
  63.       (cc_t) _TTY_CTRL ('u'), /* VKILL */                               \
  64.       (cc_t) 1,               /* VMIN */                                \
  65.       (cc_t) _TTY_CTRL ('\\'),/* VQUIT */                               \
  66.       (cc_t) _TTY_CTRL ('q'), /* VSTART */                              \
  67.       (cc_t) _TTY_CTRL ('s'), /* VSTOP */                               \
  68.       (cc_t) _TTY_CTRL ('z'), /* VSUSP */                               \
  69.       (cc_t) 0,               /* VTIME */                               \
  70.     },                                                                  \
  71.     (tcflag_t) (CS8|CREAD|CLOCAL), /* c_cflag */                        \
  72.     (tcflag_t) (BRKINT|ICRNL|IMAXBEL), /* c_iflag */                    \
  73.     (tcflag_t) (ISIG|ICANON|ECHO|IEXTEN|ECHOE|ECHOKE|ECHOCTL), /* c_lflag */ \
  74.     (tcflag_t) (OPOST|ONLCR|ONOEOT), /* c_oflag */                      \
  75.     (speed_t) (B9600), /* c_ispeed */                                   \
  76.     (speed_t) (B9600), /* c_ospeed */                                   \
  77.   },                                                                    \
  78.   /* struct tty_queue __libc_tty_queue */                               \
  79.   {                                                                     \
  80.     _TTY_QUEUE_SIZE,                                                    \
  81.     __libc_tty_queue_buffer,                                            \
  82.     __libc_tty_queue_buffer + _TTY_QUEUE_SIZE,                          \
  83.     0,                                                                  \
  84.     __libc_tty_queue_buffer,                                            \
  85.     __libc_tty_queue_buffer,                                            \
  86.   },                                                                    \
  87.   /* __libc_tty_status */                                               \
  88.   0,                                                                    \
  89. }
  90.  
  91. #define t_termios __libc_termios
  92. #define t_iflag __libc_termios.c_iflag
  93. #define t_oflag __libc_termios.c_oflag
  94. #define t_cflag __libc_termios.c_cflag
  95. #define t_lflag __libc_termios.c_lflag
  96. #define t_ispeed __libc_termios.c_ispeed
  97. #define t_ospeed __libc_termios.c_ospeed
  98. #define t_cc __libc_termios.c_cc
  99. #define t_status __libc_tty_status
  100.  
  101. #define t_size __libc_tty_queue.size
  102. #define t_top __libc_tty_queue.top
  103. #define t_bottom __libc_tty_queue.bottom
  104. #define t_count __libc_tty_queue.count
  105. #define t_rpos __libc_tty_queue.rpos
  106. #define t_wpos __libc_tty_queue.wpos
  107.  
  108. #define _TS_LNCH 0x01 /* next character is literal */
  109. #define _CC_EQU(v,c) (((c) == (unsigned char) __libc_tty_p->t_cc[(v)])  \
  110.                       && ((c) != (unsigned char) _POSIX_VDISABLE))
  111. #define _CC_NEQU(v,c) (((c) != (unsigned char)__libc_tty_p->t_cc[(v)])  \
  112.                        && ((c) != (unsigned char) _POSIX_VDISABLE))
  113.  
  114. /* internal buffers */
  115. extern unsigned char __libc_tty_queue_buffer[];
  116. extern struct tty __libc_tty_internal;
  117. extern struct tty *__libc_tty_p;
  118. extern struct tty_editline __libc_tty_editline;
  119.  
  120. /* termios hooks */
  121. extern ssize_t (*__libc_read_termios_hook)(int handle, void *buffer, size_t count,
  122.                                            ssize_t *rv);
  123. extern ssize_t (*__libc_write_termios_hook)(int handle, const void *buffer, size_t count,
  124.                                             ssize_t *rv);
  125. extern int __libc_termios_hook_common_count;
  126.  
  127. /* functions */
  128. void __libc_termios_init (void);
  129.  
  130. #endif /* !_POSIX_SOURCE */
  131. #endif /* !__STRICT_ANSI__ */
  132. #endif /* !__dj_ENFORCE_ANSI_FREESTANDING */
  133.  
  134. #ifdef __cplusplus
  135. }
  136. #endif
  137.  
  138. #endif /* !__dj_include_libc_ttyprvt_h__ */
  139.