diff options
Diffstat (limited to 'ncurses/tinfo/lib_baudrate.c')
-rw-r--r-- | ncurses/tinfo/lib_baudrate.c | 82 |
1 files changed, 69 insertions, 13 deletions
diff --git a/ncurses/tinfo/lib_baudrate.c b/ncurses/tinfo/lib_baudrate.c index 1dee46c..4f72de5 100644 --- a/ncurses/tinfo/lib_baudrate.c +++ b/ncurses/tinfo/lib_baudrate.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc. * + * Copyright 2020 Thomas E. Dickey * + * Copyright 1998-2016,2017 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 * @@ -39,7 +40,7 @@ #include <curses.priv.h> #include <termcap.h> /* ospeed */ -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__OpenBSD__) #include <sys/param.h> #endif @@ -49,7 +50,11 @@ * of the indices up to B115200 fit nicely in a 'short', allowing us to retain * ospeed's type for compatibility. */ -#if NCURSES_OSPEED_COMPAT && ((defined(__FreeBSD__) && (__FreeBSD_version < 700000)) || defined(__NetBSD__) || defined(__OpenBSD__)) +#if NCURSES_OSPEED_COMPAT && \ + ((defined(__FreeBSD__) && (__FreeBSD_version < 700000)) || \ + defined(__NetBSD__) || \ + ((defined(__OpenBSD__) && OpenBSD < 201510)) || \ + defined(__APPLE__)) #undef B0 #undef B50 #undef B75 @@ -79,7 +84,7 @@ #undef USE_OLD_TTY #endif /* USE_OLD_TTY */ -MODULE_ID("$Id: lib_baudrate.c,v 1.35 2014/04/26 18:48:19 juergen Exp $") +MODULE_ID("$Id: lib_baudrate.c,v 1.44 2020/02/02 23:34:34 tom Exp $") /* * int @@ -90,8 +95,8 @@ MODULE_ID("$Id: lib_baudrate.c,v 1.35 2014/04/26 18:48:19 juergen Exp $") */ struct speed { - NCURSES_OSPEED s; /* values for 'ospeed' */ - int sp; /* the actual speed */ + int given_speed; /* values for 'ospeed' */ + int actual_speed; /* the actual speed */ }; #define DATA(number) { B##number, number } @@ -117,6 +122,9 @@ static struct speed const speeds[] = #elif defined(EXTA) {EXTA, 19200}, #endif +#ifdef B28800 + DATA(28800), +#endif #ifdef B38400 DATA(38400), #elif defined(EXTB) @@ -127,18 +135,57 @@ static struct speed const speeds[] = #endif /* ifdef to prevent overflow when OLD_TTY is not available */ #if !(NCURSES_OSPEED_COMPAT && defined(__FreeBSD__) && (__FreeBSD_version > 700000)) +#ifdef B76800 + DATA(76800), +#endif #ifdef B115200 DATA(115200), #endif +#ifdef B153600 + DATA(153600), +#endif #ifdef B230400 DATA(230400), #endif +#ifdef B307200 + DATA(307200), +#endif #ifdef B460800 DATA(460800), #endif +#ifdef B500000 + DATA(500000), +#endif +#ifdef B576000 + DATA(576000), +#endif #ifdef B921600 DATA(921600), #endif +#ifdef B1000000 + DATA(1000000), +#endif +#ifdef B1152000 + DATA(1152000), +#endif +#ifdef B1500000 + DATA(1500000), +#endif +#ifdef B2000000 + DATA(2000000), +#endif +#ifdef B2500000 + DATA(2500000), +#endif +#ifdef B3000000 + DATA(3000000), +#endif +#ifdef B3500000 + DATA(3500000), +#endif +#ifdef B4000000 + DATA(4000000), +#endif #endif }; @@ -151,8 +198,11 @@ _nc_baudrate(int OSpeed) #endif int result = ERR; - unsigned i; + if (OSpeed < 0) + OSpeed = (NCURSES_OSPEED) OSpeed; + if (OSpeed < 0) + OSpeed = (unsigned short) OSpeed; #if !USE_REENTRANT if (OSpeed == last_OSpeed) { result = last_baudrate; @@ -160,9 +210,14 @@ _nc_baudrate(int OSpeed) #endif if (result == ERR) { if (OSpeed >= 0) { + unsigned i; + for (i = 0; i < SIZEOF(speeds); i++) { - if (speeds[i].s == OSpeed) { - result = speeds[i].sp; + if (speeds[i].given_speed > OSpeed) { + break; + } + if (speeds[i].given_speed == OSpeed) { + result = speeds[i].actual_speed; break; } } @@ -181,12 +236,13 @@ NCURSES_EXPORT(int) _nc_ospeed(int BaudRate) { int result = 1; - unsigned i; if (BaudRate >= 0) { + unsigned i; + for (i = 0; i < SIZEOF(speeds); i++) { - if (speeds[i].sp == BaudRate) { - result = speeds[i].s; + if (speeds[i].actual_speed == BaudRate) { + result = speeds[i].given_speed; break; } } @@ -208,7 +264,7 @@ NCURSES_SP_NAME(baudrate) (NCURSES_SP_DCL0) */ #ifdef TRACE if (IsValidTIScreen(SP_PARM) - && !NC_ISATTY(fileno(SP_PARM ? SP_PARM->_ofp : stdout)) + && !NC_ISATTY(fileno((SP_PARM && SP_PARM->_ofp) ? SP_PARM->_ofp : stdout)) && getenv("BAUDRATE") != 0) { int ret; if ((ret = _nc_getenv_num("BAUDRATE")) <= 0) |