/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */ #ifndef __dj_include_libc_ttyprvt_h__ #define __dj_include_libc_ttyprvt_h__ #ifdef __cplusplus extern "C" { #endif #ifndef __dj_ENFORCE_ANSI_FREESTANDING #ifndef __STRICT_ANSI__ #ifndef _POSIX_SOURCE #include #include #define _TTY_CTRL(x) ((x) & 0x1f) #define _TTY_QUEUE_SIZE 2048 #define _TTY_EDITLINE_SIZE ((_TTY_QUEUE_SIZE) / 2) #define _TTY_EDITLINE_CTRL 0 #define _TTY_EDITLINE_SINGLE 1 #define _TTY_EDITLINE_INVALID -1 struct tty_queue { int size; unsigned char *top; unsigned char *bottom; int count; unsigned char *rpos; unsigned char *wpos; }; struct tty { struct termios __libc_termios; struct tty_queue __libc_tty_queue; int __libc_tty_status; }; struct tty_editline { int col; char flag[_TTY_EDITLINE_SIZE]; unsigned char buf[_TTY_EDITLINE_SIZE]; }; #if !defined (_POSIX_VDISABLE) || (_POSIX_VDISABLE == 0) #error _POSIX_VDISABLE is undefine or zero. #endif #define TTYDEFAULT \ { \ { \ /* c_cc[] */ \ { \ (cc_t) 0, /* pad */ \ (cc_t) _TTY_CTRL ('d'), /* VEOF */ \ (cc_t) _POSIX_VDISABLE, /* VEOL */ \ (cc_t) _TTY_CTRL ('h'), /* VERASE */ \ (cc_t) _TTY_CTRL ('c'), /* VINTR */ \ (cc_t) _TTY_CTRL ('u'), /* VKILL */ \ (cc_t) 1, /* VMIN */ \ (cc_t) _TTY_CTRL ('\\'),/* VQUIT */ \ (cc_t) _TTY_CTRL ('q'), /* VSTART */ \ (cc_t) _TTY_CTRL ('s'), /* VSTOP */ \ (cc_t) _TTY_CTRL ('z'), /* VSUSP */ \ (cc_t) 0, /* VTIME */ \ }, \ (tcflag_t) (CS8|CREAD|CLOCAL), /* c_cflag */ \ (tcflag_t) (BRKINT|ICRNL|IMAXBEL), /* c_iflag */ \ (tcflag_t) (ISIG|ICANON|ECHO|IEXTEN|ECHOE|ECHOKE|ECHOCTL), /* c_lflag */ \ (tcflag_t) (OPOST|ONLCR|ONOEOT), /* c_oflag */ \ (speed_t) (B9600), /* c_ispeed */ \ (speed_t) (B9600), /* c_ospeed */ \ }, \ /* struct tty_queue __libc_tty_queue */ \ { \ _TTY_QUEUE_SIZE, \ __libc_tty_queue_buffer, \ __libc_tty_queue_buffer + _TTY_QUEUE_SIZE, \ 0, \ __libc_tty_queue_buffer, \ __libc_tty_queue_buffer, \ }, \ /* __libc_tty_status */ \ 0, \ } #define t_termios __libc_termios #define t_iflag __libc_termios.c_iflag #define t_oflag __libc_termios.c_oflag #define t_cflag __libc_termios.c_cflag #define t_lflag __libc_termios.c_lflag #define t_ispeed __libc_termios.c_ispeed #define t_ospeed __libc_termios.c_ospeed #define t_cc __libc_termios.c_cc #define t_status __libc_tty_status #define t_size __libc_tty_queue.size #define t_top __libc_tty_queue.top #define t_bottom __libc_tty_queue.bottom #define t_count __libc_tty_queue.count #define t_rpos __libc_tty_queue.rpos #define t_wpos __libc_tty_queue.wpos #define _TS_LNCH 0x01 /* next character is literal */ #define _CC_EQU(v,c) (((c) == (unsigned char) __libc_tty_p->t_cc[(v)]) \ && ((c) != (unsigned char) _POSIX_VDISABLE)) #define _CC_NEQU(v,c) (((c) != (unsigned char)__libc_tty_p->t_cc[(v)]) \ && ((c) != (unsigned char) _POSIX_VDISABLE)) /* internal buffers */ extern unsigned char __libc_tty_queue_buffer[]; extern struct tty __libc_tty_internal; extern struct tty *__libc_tty_p; extern struct tty_editline __libc_tty_editline; /* termios hooks */ extern ssize_t (*__libc_read_termios_hook)(int handle, void *buffer, size_t count, ssize_t *rv); extern ssize_t (*__libc_write_termios_hook)(int handle, const void *buffer, size_t count, ssize_t *rv); extern int __libc_termios_hook_common_count; /* functions */ void __libc_termios_init (void); #endif /* !_POSIX_SOURCE */ #endif /* !__STRICT_ANSI__ */ #endif /* !__dj_ENFORCE_ANSI_FREESTANDING */ #ifdef __cplusplus } #endif #endif /* !__dj_include_libc_ttyprvt_h__ */