forked from KolibriOS/kolibrios
139 lines
4.0 KiB
C
139 lines
4.0 KiB
C
/* 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 <termios.h>
|
|
#include <unistd.h>
|
|
|
|
#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__ */
|