X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Flib_baudrate.c;h=72818e2cf04ae9fe6d2c20cb8068b547cb574292;hp=5238924143672edd2407c3ef48f4003673324044;hb=37babca07fea18b480155ef60ef302ca09fca152;hpb=46722468f47c2b77b3987729b4bcf2321cccfd01 diff --git a/ncurses/tinfo/lib_baudrate.c b/ncurses/tinfo/lib_baudrate.c index 52389241..72818e2c 100644 --- a/ncurses/tinfo/lib_baudrate.c +++ b/ncurses/tinfo/lib_baudrate.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998,2000,2002 Free Software Foundation, Inc. * + * Copyright (c) 1998-2008,2009 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 * @@ -29,6 +29,7 @@ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * + * and: Thomas E. Dickey 1996-on * ****************************************************************************/ /* @@ -39,6 +40,9 @@ #include #include /* cur_term, pad_char */ #include /* ospeed */ +#if defined(__FreeBSD__) +#include +#endif /* * These systems use similar header files, which define B1200 as 1200, etc., @@ -46,7 +50,7 @@ * of the indices up to B115200 fit nicely in a 'short', allowing us to retain * ospeed's type for compatibility. */ -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) +#if (defined(__FreeBSD__) && (__FreeBSD_version < 700000)) || defined(__NetBSD__) || defined(__OpenBSD__) #undef B0 #undef B50 #undef B75 @@ -76,7 +80,7 @@ #undef USE_OLD_TTY #endif /* USE_OLD_TTY */ -MODULE_ID("$Id: lib_baudrate.c,v 1.22 2002/01/19 23:07:53 Andrey.A.Chernov Exp $") +MODULE_ID("$Id: lib_baudrate.c,v 1.28 2009/02/14 21:41:22 tom Exp $") /* * int @@ -141,16 +145,20 @@ static struct speed const speeds[] = 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) { @@ -159,7 +167,12 @@ _nc_baudrate(int OSpeed) } } } - last_baudrate = result; +#if !USE_REENTRANT + if (OSpeed == last_OSpeed) { + last_OSpeed = OSpeed; + last_baudrate = result; + } +#endif } return (result); } @@ -182,7 +195,7 @@ _nc_ospeed(int BaudRate) } NCURSES_EXPORT(int) -baudrate(void) +NCURSES_SP_NAME(baudrate) (NCURSES_SP_DCL0) { int result; @@ -194,7 +207,7 @@ baudrate(void) * that take into account costs that depend on baudrate. */ #ifdef TRACE - if (SP && !isatty(fileno(SP->_ofp)) + if (!isatty(fileno(SP_PARM ? SP_PARM->_ofp : stdout)) && getenv("BAUDRATE") != 0) { int ret; if ((ret = _nc_getenv_num("BAUDRATE")) <= 0) @@ -204,19 +217,30 @@ baudrate(void) } #endif + if (cur_term != 0) { #ifdef USE_OLD_TTY - result = cfgetospeed(&cur_term->Nttyb); - ospeed = _nc_ospeed(result); + result = cfgetospeed(&cur_term->Nttyb); + ospeed = _nc_ospeed(result); #else /* !USE_OLD_TTY */ #ifdef TERMIOS - ospeed = cfgetospeed(&cur_term->Nttyb); + ospeed = cfgetospeed(&cur_term->Nttyb); #else - ospeed = cur_term->Nttyb.sg_ospeed; + ospeed = cur_term->Nttyb.sg_ospeed; #endif - result = _nc_baudrate(ospeed); + result = _nc_baudrate(ospeed); #endif - if (cur_term != 0) cur_term->_baudrate = result; + } else { + result = ERR; + } returnCode(result); } + +#if NCURSES_SP_FUNCS +NCURSES_EXPORT(int) +baudrate(void) +{ + return NCURSES_SP_NAME(baudrate) (CURRENT_SCREEN); +} +#endif