home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume14 / pcomm / part03 / d_prompt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-05-17  |  5.8 KB  |  242 lines

  1. /*
  2.  * Prompt for directory entry changes.  Copies the original values in
  3.  * case you change your mind half way thru.  A return code of 1 means
  4.  * the entry was changed.
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <curses.h>
  9. #include "dial_dir.h"
  10. #include "misc.h"
  11.  
  12. int
  13. prompt_lib(win, i)
  14. WINDOW *win;
  15. int i;
  16. {
  17.     int n, baud, dbits, sbits, spot;
  18.     static int valid_baud[6] = {300, 1200, 2400, 4800, 9600, 19200};
  19.     static char *valid_parity[3] = {"Even", "Odd", "None"};
  20.     char *ans, *get_str(), c, temp, *name, *number, *index, parity;
  21.     char duplex, *strdup(), buf[40];
  22.     void free_ptr();
  23.     extern int xmc;
  24.     extern char *null_ptr;
  25.                     /* make copies */
  26.     name = strdup(dir->name[i]);
  27.     number = strdup(dir->number[i]);
  28.     baud = dir->baud[i];
  29.     parity = dir->parity[i];
  30.     dbits = dir->dbits[i];
  31.     sbits = dir->sbits[i];
  32.     duplex = dir->duplex[i];
  33.     index = strdup(dir->index[i]);
  34.                     /* display original values */
  35.     werase(win);
  36.     mvwprintw(win, 2, 5, "%-20.20s %18.18s  %5d-%c-%d-%d  %c  %-14.14s\n",
  37.      dir->name[i], dir->number[i], dir->baud[i], dir->parity[i],
  38.      dir->dbits[i], dir->sbits[i], dir->duplex[i], dir->index[i]);
  39.     box(win, '|', '-');
  40.  
  41.                     /* prompt for name */
  42.     mvwaddstr(win, 4, 4, "Name: ");
  43.     wrefresh(win);
  44.  
  45.     if ((ans = get_str(win, 20, NULL, ";")) == NULL)
  46.         return(0);
  47.     if (*ans != NULL) {
  48.         if (!strcmp(ans, " "))
  49.             name = null_ptr;
  50.         else
  51.             name = strdup(ans);
  52.         mvwaddstr(win, 2, 5, "                    ");
  53.         wrefresh(win);
  54.         mvwattrstr(win, 2, 5, A_BOLD, name);
  55.     }
  56.                     /* prompt for number */
  57.     clear_line(win, 4, 4, 1);
  58.     waddstr(win, "Number: ");
  59.     wrefresh(win);
  60.  
  61.     if ((ans = get_str(win, 18, NULL, ";")) == NULL)
  62.         return(0);
  63.     if (*ans != NULL) {
  64.         if (!strcmp(ans, " "))
  65.             number = null_ptr;
  66.         else
  67.             number = strdup(ans);
  68.         mvwaddstr(win, 2, 26, "                  ");
  69.         wrefresh(win);
  70.         /*
  71.          * Should be right justified, but we don't wanna to have
  72.          * the attribute turned on for blanks.
  73.          */
  74.         spot = 26 + 18 - strlen(number);
  75.         mvwattrstr(win, 2, spot, A_BOLD, number);
  76.     }
  77.                     /* template for next few */
  78.     clear_line(win, 4, 4, 1);
  79.     mvwaddstr(win, 4, 31, "(Any key to change, <CR> to accept)");
  80.  
  81.     /*
  82.      * These next few prompts display a series of choices and allow
  83.      * the user to hit a return to accept the currently showing
  84.      * value.  The first value displayed is always the current value.
  85.      */
  86.                     /* choose from baud menu */
  87.     for (n=0; n<6; n++) {
  88.         if (valid_baud[n] == baud)
  89.             break;
  90.     }
  91.     mvwprintw(win, 4, 4, "Baud: %-5d", valid_baud[n]);
  92.     wmove(win, 4, 10);
  93.     wrefresh(win);
  94.  
  95.     while ((c = wgetch(win)) != '\r') {
  96.         if (c == 27)
  97.             return(0);
  98.         n = (n == 5) ? 0 : n+1;
  99.         mvwprintw(win, 4, 4, "Baud: %-5d", valid_baud[n]);
  100.         wmove(win, 4, 10);
  101.         wrefresh(win);
  102.     }
  103.     if (baud != valid_baud[n]) {
  104.         baud = valid_baud[n];
  105.         sprintf(buf, "%5d", baud);
  106.         if (xmc > 0) {
  107.             sprintf(buf, "%5d-%c-%d-%d", baud, parity, dbits, sbits);
  108.             mvwaddstr(win, 2, 46, "           ");
  109.             wrefresh(win);
  110.         }
  111.         mvwattrstr(win, 2, 46, A_BOLD, buf);
  112.     }
  113.                     /* choose from parity menu */
  114.     for (n=0; n<3; n++) {
  115.         if (*valid_parity[n] == parity)
  116.             break;
  117.     }
  118.     mvwprintw(win, 4, 4, "Parity: %-5.5s", valid_parity[n]);
  119.     wmove(win, 4, 12);
  120.     wrefresh(win);
  121.  
  122.     while ((c = wgetch(win)) != '\r') {
  123.         if (c == 27)
  124.             return(0);
  125.         n = (n == 2) ? 0 : n+1;
  126.         mvwprintw(win, 4, 4, "Parity: %-5.5s", valid_parity[n]);
  127.         wmove(win, 4, 12);
  128.         wrefresh(win);
  129.     }
  130.     if (parity != *valid_parity[n]) {
  131.         parity = *valid_parity[n];
  132.         if (xmc > 0) {
  133.             sprintf(buf, "%5d-%c-%d-%d", baud, parity, dbits, sbits);
  134.             mvwaddstr(win, 2, 46, "           ");
  135.             wrefresh(win);
  136.             mvwattrstr(win, 2, 46, A_BOLD, buf);
  137.         }
  138.         else
  139.             mvwattrch(win, 2, 52, A_BOLD, parity);
  140.     }
  141.                     /* choose from data bits menu */
  142.     n = dbits;
  143.     mvwprintw(win, 4, 4, "Data Bits: %d    ", n);
  144.     wmove(win, 4, 15);
  145.     wrefresh(win);
  146.  
  147.     while ((c = wgetch(win)) != '\r') {
  148.         if (c == 27)
  149.             return(0);
  150.         n = (n == 8) ? 7 : 8;
  151.         mvwprintw(win, 4, 4, "Data Bits: %d    ", n);
  152.         wmove(win, 4, 15);
  153.         wrefresh(win);
  154.     }
  155.     if (dbits != n) {
  156.         dbits = n;
  157.         if (xmc > 0) {
  158.             sprintf(buf, "%5d-%c-%d-%d", baud, parity, dbits, sbits);
  159.             mvwaddstr(win, 2, 46, "           ");
  160.             wrefresh(win);
  161.             mvwattrstr(win, 2, 46, A_BOLD, buf);
  162.         }
  163.         else
  164.             mvwattrnum(win, 2, 54, A_BOLD, dbits);
  165.     }
  166.                     /* choose from stop bits menu */
  167.     n = sbits;
  168.     mvwprintw(win, 4, 4, "Stop Bits: %d    ", n);
  169.     wmove(win, 4, 15);
  170.     wrefresh(win);
  171.  
  172.     while ((c = wgetch(win)) != '\r') {
  173.         if (c == 27)
  174.             return(0);
  175.         n = (n == 2) ? 1 : 2;
  176.         mvwprintw(win, 4, 4, "Stop Bits: %d    ", n);
  177.         wmove(win, 4, 15);
  178.         wrefresh(win);
  179.     }
  180.     if (sbits != n) {
  181.         sbits = n;
  182.         if (xmc > 0) {
  183.             sprintf(buf, "%5d-%c-%d-%d", baud, parity, dbits, sbits);
  184.             mvwaddstr(win, 2, 46, "           ");
  185.             wrefresh(win);
  186.             mvwattrstr(win, 2, 46, A_BOLD, buf);
  187.         }
  188.         else
  189.             mvwattrnum(win, 2, 56, A_BOLD, sbits);
  190.     }
  191.                     /* choose from duplex menu */
  192.     temp = duplex;
  193.     mvwprintw(win, 4, 4, "Duplex: %c    ", temp);
  194.     wmove(win, 4, 12);
  195.     wrefresh(win);
  196.  
  197.     while ((c = wgetch(win)) != '\r') {
  198.         if (c == 27)
  199.             return(0);
  200.         temp = (temp == 'F') ? 'H' : 'F';
  201.         mvwprintw(win, 4, 4, "Duplex: %c    ", temp);
  202.         wmove(win, 4, 12);
  203.         wrefresh(win);
  204.     }
  205.     if (duplex != temp) {
  206.         duplex = temp;
  207.         mvwattrch(win, 2, 59, A_BOLD, duplex);
  208.     }
  209.                     /* prompt for command line index */
  210.     clear_line(win, 4, 4, 1);
  211.     waddstr(win, "Command line index (or tty): ");
  212.     wrefresh(win);
  213.  
  214.     if ((ans = get_str(win, 14, NULL, ";")) == NULL)
  215.         return(0);
  216.     if (*ans != NULL) {
  217.         if (!strcmp(ans, " "))
  218.             index = null_ptr;
  219.         else
  220.             index = strdup(ans);
  221.         mvwattrstr(win, 2, 62, A_BOLD, index);
  222.     }
  223.                     /* store 'em for real */
  224.     free_ptr(dir->name[i]);
  225.     free_ptr(dir->number[i]);
  226.     free_ptr(dir->index[i]);
  227.  
  228.     dir->name[i] = strdup(name);
  229.     dir->number[i] = strdup(number);
  230.     dir->baud[i] = baud;
  231.     dir->parity[i] = parity;
  232.     dir->dbits[i] = dbits;
  233.     dir->sbits[i] = sbits;
  234.     dir->duplex[i] = duplex;
  235.     dir->index[i] = strdup(index);
  236.  
  237.     free_ptr(name);
  238.     free_ptr(number);
  239.     free_ptr(index);
  240.     return(1);
  241. }
  242.