home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume26 / pcomm-2.0.2 / part02 / ls_menu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-13  |  4.6 KB  |  207 lines

  1. /*
  2.  * Routines for displaying current line settings and prompting for changes.
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <curses.h>
  7. #include "dial_dir.h"
  8. #include "misc.h"
  9. #include "param.h"
  10.  
  11. static void disp_settings();
  12.  
  13. /*
  14.  * Display the current line settings and prompt for changes.  A non-zero
  15.  * return code means settings were changed.
  16.  */
  17.  
  18. int
  19. ls_menu()
  20. {
  21.     extern int fd;
  22.     WINDOW *l_win, *newwin();
  23.     int num, ret_code;
  24.  
  25.     l_win = newwin(21, 47, 0, 16);
  26.  
  27.     mvwattrstr(l_win, 1, 16, A_BOLD, "Line Settings");
  28.     horizontal(l_win, 2, 0, 47);
  29.     mvwaddstr(l_win, 6, 5, "1)     300,E,7,1     8)     300,N,8,1");
  30.     mvwaddstr(l_win, 7, 5, "2)    1200,E,7,1     9)    1200,N,8,1");
  31.     mvwaddstr(l_win, 8, 5, "3)    2400,E,7,1    10)    2400,N,8,1");
  32.     mvwaddstr(l_win, 9, 5, "4)    4800,E,7,1    11)    4800,N,8,1");
  33.     mvwaddstr(l_win, 10, 5, "5)    9600,E,7,1    12)    9600,N,8,1");
  34.     mvwaddstr(l_win, 11, 5, "6)   19200,E,7,1    13)   19200,N,8,1");
  35.     mvwaddstr(l_win, 12, 5, "7)   38400,E,7,1    14)   38400,N,8,1");
  36.     mvwaddstr(l_win, 14, 4, "Parity        Data Bits       Stop Bits");
  37.     mvwaddstr(l_win, 15, 4, "15) Odd       16) 7 bits      18) 1 bit");
  38.     mvwaddstr(l_win, 16, 18, "17) 8 bits      19) 2 bits");
  39.     mvwaddstr(l_win, 18, 4, "20) Save Changes");
  40.     mvwattrstr(l_win, 18, 28, A_BOLD, "YOUR CHOICE:");
  41.     wmove(l_win, 18, 41);
  42.     box(l_win, VERT, HORZ);
  43.  
  44.     mvwaddstr(l_win, 20, 13, " Press <ESC> to return ");
  45.                     /* display current settings */
  46.     disp_settings(l_win);
  47.     wmove(l_win, 18, 41);
  48.     wrefresh(l_win);
  49.                     /* get the options */
  50.     ret_code = 0;
  51.     while ((num = get_num(l_win, 2)) != -1) {
  52.         switch (num) {
  53.             case 1:
  54.                 dir->baud[0] = 300;
  55.                 dir->parity[0] = 'E';
  56.                 dir->data_bits[0] = 7;
  57.                 dir->stop_bits[0] = 1;
  58.                 break;
  59.             case 2:
  60.                 dir->baud[0] = 1200;
  61.                 dir->parity[0] = 'E';
  62.                 dir->data_bits[0] = 7;
  63.                 dir->stop_bits[0] = 1;
  64.                 break;
  65.             case 3:
  66.                 dir->baud[0] = 2400;
  67.                 dir->parity[0] = 'E';
  68.                 dir->data_bits[0] = 7;
  69.                 dir->stop_bits[0] = 1;
  70.                 break;
  71.             case 4:
  72.                 dir->baud[0] = 4800;
  73.                 dir->parity[0] = 'E';
  74.                 dir->data_bits[0] = 7;
  75.                 dir->stop_bits[0] = 1;
  76.                 break;
  77.             case 5:
  78.                 dir->baud[0] = 9600;
  79.                 dir->parity[0] = 'E';
  80.                 dir->data_bits[0] = 7;
  81.                 dir->stop_bits[0] = 1;
  82.                 break;
  83.             case 6:
  84.                 dir->baud[0] = 19200;
  85.                 dir->parity[0] = 'E';
  86.                 dir->data_bits[0] = 7;
  87.                 dir->stop_bits[0] = 1;
  88.                 break;
  89.             case 7:
  90.                 dir->baud[0] = 38400;
  91.                 dir->parity[0] = 'E';
  92.                 dir->data_bits[0] = 7;
  93.                 dir->stop_bits[0] = 1;
  94.                 break;
  95.             case 8:
  96.                 dir->baud[0] = 300;
  97.                 dir->parity[0] = 'N';
  98.                 dir->data_bits[0] = 8;
  99.                 dir->stop_bits[0] = 1;
  100.                 break;
  101.             case 9:
  102.                 dir->baud[0] = 1200;
  103.                 dir->parity[0] = 'N';
  104.                 dir->data_bits[0] = 8;
  105.                 dir->stop_bits[0] = 1;
  106.                 break;
  107.             case 10:
  108.                 dir->baud[0] = 2400;
  109.                 dir->parity[0] = 'N';
  110.                 dir->data_bits[0] = 8;
  111.                 dir->stop_bits[0] = 1;
  112.                 break;
  113.             case 11:
  114.                 dir->baud[0] = 4800;
  115.                 dir->parity[0] = 'N';
  116.                 dir->data_bits[0] = 8;
  117.                 dir->stop_bits[0] = 1;
  118.                 break;
  119.             case 12:
  120.                 dir->baud[0] = 9600;
  121.                 dir->parity[0] = 'N';
  122.                 dir->data_bits[0] = 8;
  123.                 dir->stop_bits[0] = 1;
  124.                 break;
  125.             case 13:
  126.                 dir->baud[0] = 19200;
  127.                 dir->parity[0] = 'N';
  128.                 dir->data_bits[0] = 8;
  129.                 dir->stop_bits[0] = 1;
  130.                 break;
  131.             case 14:
  132.                 dir->baud[0] = 38400;
  133.                 dir->parity[0] = 'N';
  134.                 dir->data_bits[0] = 8;
  135.                 dir->stop_bits[0] = 1;
  136.                 break;
  137.             case 15:
  138.                 dir->parity[0] = 'O';
  139.                 break;
  140.             case 16:
  141.                 dir->data_bits[0] = 7;
  142.                 break;
  143.             case 17:
  144.                 dir->data_bits[0] = 8;
  145.                 break;
  146.             case 18:
  147.                 dir->stop_bits[0] = 1;
  148.                 break;
  149.             case 19:
  150.                 dir->stop_bits[0] = 2;
  151.                 break;
  152.             case 20:
  153.                     /* copy the current settings */
  154.                 param->d_baud = dir->baud[0];
  155.                 param->d_parity = dir->parity[0];
  156.                 param->d_data_bits = dir->data_bits[0];
  157.                 param->d_stop_bits = dir->stop_bits[0];
  158.                 /*
  159.                  * We've changed the values in memory even
  160.                  * if the update fails.
  161.                  */
  162.                 if (up_param()) {
  163.                     touchwin(l_win);
  164.                     wrefresh(l_win);
  165.                 }
  166.                 break;
  167.             default:
  168.                 beep();
  169.         }
  170.         ret_code++;
  171.         disp_settings(l_win);
  172.         mvwaddstr(l_win, 17, 41, "    ");
  173.         wmove(l_win, 18, 41);
  174.         wrefresh(l_win);
  175.     }
  176.     if (fd == -1) {
  177.         werase(l_win);
  178.         wrefresh(l_win);
  179.     }
  180.     delwin(l_win);
  181.     return(ret_code);
  182. }
  183.  
  184. /*
  185.  * Display the current settings.  Formats the entire string at one
  186.  * time, in case you've got a magic cookie terminal.
  187.  */
  188.  
  189. static void
  190. disp_settings(win)
  191. WINDOW *win;
  192. {
  193.     extern int xmc;
  194.     char buf[40];
  195.  
  196.     sprintf(buf, "Current Settings: %5d,%c,%d,%d", dir->baud[0],
  197.      dir->parity[0], dir->data_bits[0], dir->stop_bits[0]);
  198.  
  199.     if (xmc > 0) {
  200.         touchwin(win);
  201.         clear_line(win, 4, 8, TRUE);
  202.         wrefresh(win);
  203.     }
  204.     mvwattrstr(win, 4, 8, A_BOLD, buf);
  205.     return;
  206. }
  207.