]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/lib_baudrate.c
ncurses 5.0
[ncurses.git] / ncurses / tinfo / lib_baudrate.c
similarity index 77%
rename from ncurses/lib_baudrate.c
rename to ncurses/tinfo/lib_baudrate.c
index dca02ff7aba3f38b01e0c7c3c077b770c0272dfe..4077ba384076bf11775bb95c727ebeca6239c524 100644 (file)
@@ -39,8 +39,9 @@
 
 #include <curses.priv.h>
 #include <term.h>      /* cur_term, pad_char */
+#include <termcap.h>   /* 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);
 }