diff options
Diffstat (limited to 'lib/libcurses/tinfo/lib_baudrate.c')
-rw-r--r-- | lib/libcurses/tinfo/lib_baudrate.c | 82 |
1 files changed, 71 insertions, 11 deletions
diff --git a/lib/libcurses/tinfo/lib_baudrate.c b/lib/libcurses/tinfo/lib_baudrate.c index 39342dcb9ab..a171993945a 100644 --- a/lib/libcurses/tinfo/lib_baudrate.c +++ b/lib/libcurses/tinfo/lib_baudrate.c @@ -1,7 +1,7 @@ -/* $OpenBSD: lib_baudrate.c,v 1.4 2001/01/22 18:01:52 millert Exp $ */ +/* $OpenBSD: lib_baudrate.c,v 1.5 2010/01/12 23:22:06 nicm Exp $ */ /**************************************************************************** - * Copyright (c) 1998,2000 Free Software Foundation, Inc. * + * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -31,6 +31,7 @@ /**************************************************************************** * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 * * and: Eric S. Raymond <esr@snark.thyrsus.com> * + * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* @@ -41,8 +42,47 @@ #include <curses.priv.h> #include <term.h> /* cur_term, pad_char */ #include <termcap.h> /* ospeed */ +#if defined(__FreeBSD__) +#include <sys/param.h> +#endif + +/* + * These systems use similar header files, which define B1200 as 1200, etc., + * but can be overridden by defining USE_OLD_TTY so B1200 is 9, which makes all + * of the indices up to B115200 fit nicely in a 'short', allowing us to retain + * ospeed's type for compatibility. + */ +#if (defined(__FreeBSD__) && (__FreeBSD_version < 700000)) || defined(__NetBSD__) || defined(__OpenBSD__) +#undef B0 +#undef B50 +#undef B75 +#undef B110 +#undef B134 +#undef B150 +#undef B200 +#undef B300 +#undef B600 +#undef B1200 +#undef B1800 +#undef B2400 +#undef B4800 +#undef B9600 +#undef B19200 +#undef EXTA +#undef B38400 +#undef EXTB +#undef B57600 +#undef B115200 +#undef B230400 +#undef B460800 +#undef B921600 +#define USE_OLD_TTY +#include <sys/ttydev.h> +#else +#undef USE_OLD_TTY +#endif /* USE_OLD_TTY */ -MODULE_ID("$From: lib_baudrate.c,v 1.19 2000/12/10 02:55:07 tom Exp $") +MODULE_ID("$Id: lib_baudrate.c,v 1.5 2010/01/12 23:22:06 nicm Exp $") /* * int @@ -99,21 +139,28 @@ static struct speed const speeds[] = #ifdef B460800 {B460800, 460800}, #endif +#ifdef B921600 + {B921600, 921600}, +#endif }; NCURSES_EXPORT(int) _nc_baudrate(int OSpeed) { +#if !USE_REENTRANT static int last_OSpeed; static int last_baudrate; +#endif - int result; + int result = ERR; unsigned i; +#if !USE_REENTRANT if (OSpeed == last_OSpeed) { result = last_baudrate; - } else { - result = ERR; + } +#endif + if (result == ERR) { if (OSpeed >= 0) { for (i = 0; i < SIZEOF(speeds); i++) { if (speeds[i].s == OSpeed) { @@ -122,7 +169,12 @@ _nc_baudrate(int OSpeed) } } } - last_baudrate = result; +#if !USE_REENTRANT + if (OSpeed == last_OSpeed) { + last_OSpeed = OSpeed; + last_baudrate = result; + } +#endif } return (result); } @@ -157,24 +209,32 @@ baudrate(void) * that take into account costs that depend on baudrate. */ #ifdef TRACE - if (SP && !isatty(fileno(SP->_ofp)) + if (!isatty(fileno(SP ? SP->_ofp : stdout)) && getenv("BAUDRATE") != 0) { int ret; if ((ret = _nc_getenv_num("BAUDRATE")) <= 0) ret = 9600; ospeed = _nc_ospeed(ret); returnCode(ret); - } else + } #endif + if (cur_term != 0) { +#ifdef USE_OLD_TTY + result = cfgetospeed(&cur_term->Nttyb); + ospeed = _nc_ospeed(result); +#else /* !USE_OLD_TTY */ #ifdef TERMIOS ospeed = cfgetospeed(&cur_term->Nttyb); #else ospeed = cur_term->Nttyb.sg_ospeed; #endif - result = _nc_baudrate(ospeed); - if (cur_term != 0) + result = _nc_baudrate(ospeed); +#endif cur_term->_baudrate = result; + } else { + result = ERR; + } returnCode(result); } |