#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <curses.h>
#include <ncinput.h>
#include "mfjterm.h"
#include "misc.h"


void set_bps(void)
{
       static int speeds[] = {
               B50,50, B75,75, B110,110, B134,134, B150,150, B200,200,
               B300,300, B600,600, B1200,1200, B1800,1800, B2400,2400,
               B4800,4800, B9600,9600, B19200,19200, B38400,38400
       };

       char bps_s[11], tmp[80];
       int bbps = 0, i, valid_bps;

       for (i = 0; i != 30; i+=2) {
               if (bps == speeds[i]) {
                       bbps = speeds[i+1];
                       break;
               }
       }

       attrset(A_REVERSE);

       valid_bps = 0;

       do {
               move(19, 1);
               sprintf(bps_s, "%d", bbps);
               addstr("Enter new baudrate: ");
               edgets(stdscr, bps_s, 10, FALSE);
               move(19, 0);
               addstr("                                        ");

               if (! strlen(bps_s))
                       goto bps_abort;

               bbps = atoi(bps_s);

               for (i = 0; i != 30; i+=2) {
                       if (bbps == speeds[i + 1]) {
                               bps = speeds[i];
                               break;
                       }
               }

               if (i == 30) {
                       curs_set(0);
                       move(19, 1);
                       sprintf(tmp, "\"%d\" is not a valid baudrate", bbps);
                       addstr(tmp);
                       refresh();
                       sleep(1);
                       move(19, 1);
                       addstr("                                       ");
                       refresh();
                       curs_set(1);
               } else
                       valid_bps++;

       } while (! valid_bps);

       tcgetattr(tnc, &tnc_settings);
       cfsetispeed(&tnc_settings, bps);
       cfsetospeed(&tnc_settings, bps);
       tcsetattr(tnc, TCSAFLUSH, &tnc_settings);

bps_abort:
       move(tnc_y, tnc_x);
       refresh();
}