X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Flib_baudrate.c;fp=ncurses%2Flib_baudrate.c;h=4077ba384076bf11775bb95c727ebeca6239c524;hp=dca02ff7aba3f38b01e0c7c3c077b770c0272dfe;hb=0eb88fc5281804773e2a0c7a488a4452463535ce;hpb=661078ddbde3ce0f3b06e95642fbb9b5fef7dca1 diff --git a/ncurses/lib_baudrate.c b/ncurses/tinfo/lib_baudrate.c similarity index 77% rename from ncurses/lib_baudrate.c rename to ncurses/tinfo/lib_baudrate.c index dca02ff7..4077ba38 100644 --- a/ncurses/lib_baudrate.c +++ b/ncurses/tinfo/lib_baudrate.c @@ -39,8 +39,9 @@ #include #include /* cur_term, pad_char */ +#include /* ospeed */ -MODULE_ID("$Id: lib_baudrate.c,v 1.11 1998/02/11 12:13:58 tom Exp $") +MODULE_ID("$Id: lib_baudrate.c,v 1.15 1999/01/31 03:05:25 tom Exp $") /* * int @@ -98,14 +99,52 @@ static struct speed const speeds[] = { #endif }; +int _nc_baudrate(int OSpeed) +{ + static int last_OSpeed; + static int last_baudrate; + + int result; + unsigned i; + + if (OSpeed == last_OSpeed) { + result = last_baudrate; + } else { + result = ERR; + if (OSpeed >= 0) { + for (i = 0; i < SIZEOF(speeds); i++) { + if (speeds[i].s == (speed_t)OSpeed) { + result = speeds[i].sp; + break; + } + } + } + last_baudrate = result; + } + return (result); +} + + +int _nc_ospeed(int BaudRate) +{ + speed_t result = 1; + unsigned i; + + if (BaudRate >= 0) { + for (i = 0; i < SIZEOF(speeds); i++) { + if (speeds[i].sp == BaudRate) { + result = speeds[i].s; + break; + } + } + } + return (result); +} + int baudrate(void) { -size_t i; -int ret; -#ifdef TRACE -char *debug_rate; -#endif +int result; T((T_CALLED("baudrate()"))); @@ -116,27 +155,24 @@ char *debug_rate; */ #ifdef TRACE if (SP && !isatty(fileno(SP->_ofp)) - && (debug_rate = getenv("BAUDRATE")) != 0) { - if (sscanf(debug_rate, "%d", &ret) != 1) + && getenv("BAUDRATE") != 0) { + int ret; + if ((ret = _nc_getenv_num("BAUDRATE")) <= 0) ret = 9600; + ospeed = _nc_ospeed(ret); returnCode(ret); } else #endif #ifdef TERMIOS - ret = cfgetospeed(&cur_term->Nttyb); + ospeed = cfgetospeed(&cur_term->Nttyb); #else - ret = cur_term->Nttyb.sg_ospeed; + ospeed = cur_term->Nttyb.sg_ospeed; #endif - if(ret < 0 || (speed_t)ret > speeds[SIZEOF(speeds)-1].s) - returnCode(ERR); - cur_term->_baudrate = ERR; - for (i = 0; i < SIZEOF(speeds); i++) - if (speeds[i].s == (speed_t)ret) - { - cur_term->_baudrate = speeds[i].sp; - break; - } - returnCode(cur_term->_baudrate); + result = _nc_baudrate(ospeed); + if (cur_term != 0) + cur_term->_baudrate = result; + + returnCode(result); }