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

  1. /*
  2.  * The keyboard macro feature.  Displays (and prompts for editing) the
  3.  * macros assigned to the shifted number keys.  Prompts for saving
  4.  * changes to disk.
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <curses.h>
  9. #include "misc.h"
  10. #include "param.h"
  11.  
  12. static char *mac_prompt();
  13.  
  14. void
  15. macro()
  16. {
  17.     extern int fd;
  18.     WINDOW *ma_win, *newwin();
  19.     int ans, changed;
  20.     char *mac, *str_rep();
  21.  
  22.     ma_win = newwin(18, 65, 2, 15);
  23.     mvwattrstr(ma_win, 1, 25, A_BOLD, "Keyboard Macros");
  24.     horizontal(ma_win, 2, 0, 65);
  25.     mvwprintw(ma_win, 4, 0, " %4.4s-!  %-50.50s\n", param->ascii_hot, param->mac_1);
  26.     wprintw(ma_win, " %4.4s-@  %-50.50s\n", param->ascii_hot, param->mac_2);
  27.     wprintw(ma_win, " %4.4s-#  %-50.50s\n", param->ascii_hot, param->mac_3);
  28.     wprintw(ma_win, " %4.4s-$  %-50.50s\n", param->ascii_hot, param->mac_4);
  29.     wprintw(ma_win, " %4.4s-%%  %-50.50s\n", param->ascii_hot, param->mac_5);
  30.     wprintw(ma_win, " %4.4s-^  %-50.50s\n", param->ascii_hot, param->mac_6);
  31.     wprintw(ma_win, " %4.4s-&  %-50.50s\n", param->ascii_hot, param->mac_7);
  32.     wprintw(ma_win, " %4.4s-*  %-50.50s\n", param->ascii_hot, param->mac_8);
  33.     wprintw(ma_win, " %4.4s-(  %-50.50s\n", param->ascii_hot, param->mac_9);
  34.     wprintw(ma_win, " %4.4s-)  %-50.50s\n", param->ascii_hot, param->mac_0);
  35.     mvwaddstr(ma_win, 15, 5, "Macro key to revise:");
  36.     box(ma_win, VERT, HORZ);
  37.                     /* on the bottom line */
  38.     mvwaddstr(ma_win, 17, 21, " Press <ESC> to continue ");
  39.     wmove(ma_win, 15, 26);
  40.     wrefresh(ma_win);
  41.  
  42.     changed = 0;
  43.  
  44.     while ((ans = wgetch(ma_win)) != ESC) {
  45.         switch (ans) {
  46.             case '!':    /* shifted 1 */
  47.                 if ((mac = mac_prompt(ans, param->mac_1)) != NULL) {
  48.                     param->mac_1 = str_rep(param->mac_1, mac);
  49.                     clear_line(ma_win, 4, 9, TRUE);
  50.                     mvwattrstr(ma_win, 4, 9, A_BOLD, mac);
  51.                     changed++;
  52.                 }
  53.                 break;
  54.             case '@':    /* shifted 2 */
  55.                 if ((mac = mac_prompt(ans, param->mac_2)) != NULL) {
  56.                     param->mac_2 = str_rep(param->mac_2, mac);
  57.                     clear_line(ma_win, 5, 9, TRUE);
  58.                     mvwattrstr(ma_win, 5, 9, A_BOLD, mac);
  59.                     changed++;
  60.                 }
  61.                 break;
  62.             case '#':    /* shifted 3 */
  63.                 if ((mac = mac_prompt(ans, param->mac_3)) != NULL) {
  64.                     param->mac_3 = str_rep(param->mac_3, mac);
  65.                     clear_line(ma_win, 6, 9, TRUE);
  66.                     mvwattrstr(ma_win, 6, 9, A_BOLD, mac);
  67.                     changed++;
  68.                 }
  69.                 break;
  70.             case '$':    /* shifted 4 */
  71.                 if ((mac = mac_prompt(ans, param->mac_4)) != NULL) {
  72.                     param->mac_4 = str_rep(param->mac_4, mac);
  73.                     clear_line(ma_win, 7, 9, TRUE);
  74.                     mvwattrstr(ma_win, 7, 9, A_BOLD, mac);
  75.                     changed++;
  76.                 }
  77.                 break;
  78.             case '%':    /* shifted 5 */
  79.                 if ((mac = mac_prompt(ans, param->mac_5)) != NULL) {
  80.                     param->mac_5 = str_rep(param->mac_5, mac);
  81.                     clear_line(ma_win, 8, 9, TRUE);
  82.                     mvwattrstr(ma_win, 8, 9, A_BOLD, mac);
  83.                     changed++;
  84.                 }
  85.                 break;
  86.             case '^':    /* shifted 6 */
  87.                 if ((mac = mac_prompt(ans, param->mac_6)) != NULL) {
  88.                     param->mac_6 = str_rep(param->mac_6, mac);
  89.                     clear_line(ma_win, 9, 9, TRUE);
  90.                     mvwattrstr(ma_win, 9, 9, A_BOLD, mac);
  91.                     changed++;
  92.                 }
  93.                 break;
  94.             case '&':    /* shifted 7 */
  95.                 if ((mac = mac_prompt(ans, param->mac_7)) != NULL) {
  96.                     param->mac_7 = str_rep(param->mac_7, mac);
  97.                     clear_line(ma_win, 10, 9, TRUE);
  98.                     mvwattrstr(ma_win, 10, 9, A_BOLD, mac);
  99.                     changed++;
  100.                 }
  101.                 break;
  102.             case '*':    /* shifted 8 */
  103.                 if ((mac = mac_prompt(ans, param->mac_8)) != NULL) {
  104.                     param->mac_8 = str_rep(param->mac_8, mac);
  105.                     clear_line(ma_win, 11, 9, TRUE);
  106.                     mvwattrstr(ma_win, 11, 9, A_BOLD, mac);
  107.                     changed++;
  108.                 }
  109.                 break;
  110.             case '(':    /* shifted 9 */
  111.                 if ((mac = mac_prompt(ans, param->mac_9)) != NULL) {
  112.                     param->mac_9 = str_rep(param->mac_9, mac);
  113.                     clear_line(ma_win, 12, 9, TRUE);
  114.                     mvwattrstr(ma_win, 12, 9, A_BOLD, mac);
  115.                     changed++;
  116.                 }
  117.                 break;
  118.             case ')':    /* shifted 0 */
  119.                 if ((mac = mac_prompt(ans, param->mac_0)) != NULL) {
  120.                     param->mac_0 = str_rep(param->mac_0, mac);
  121.                     clear_line(ma_win, 13, 9, TRUE);
  122.                     mvwattrstr(ma_win, 13, 9, A_BOLD, mac);
  123.                     changed++;
  124.                 }
  125.                 break;
  126.             default:
  127.                 beep();
  128.                 break;
  129.         }
  130.         touchwin(ma_win);
  131.         wmove(ma_win, 15, 26);
  132.         wrefresh(ma_win);
  133.     }
  134.                     /* if something changed */
  135.     if (changed) {
  136.                     /* save to disk? */
  137.         if (yes_prompt(ma_win, 15, 30, A_BOLD, "Save to disk")) {
  138.             if (up_param()) {
  139.                 touchwin(ma_win);
  140.                 wrefresh(ma_win);
  141.             }
  142.         }
  143.     }
  144.     if (fd == -1) {
  145.         werase(ma_win);
  146.         wrefresh(ma_win);
  147.     }
  148.     delwin(ma_win);
  149.     return;
  150. }
  151.  
  152. /*
  153.  * Sounds like McDonalds doesn't it?  Actually, it opens a new window
  154.  * and prompts for the new macro.  Returns a pointer to the new string.
  155.  * Since it uses get_str(), the return value points to a static area.
  156.  */
  157.  
  158. static char *
  159. mac_prompt(key, string)
  160. char key, *string;
  161. {
  162.     extern char *null_ptr;
  163.     WINDOW *mp_win, *newwin();
  164.     char *new, *get_str();
  165.  
  166.     mp_win = newwin(6, 65, 8, 0);
  167.     mvwprintw(mp_win, 2, 3, "%4.4s-%c  %-50.50s", param->ascii_hot, key, string);
  168.     mvwaddstr(mp_win, 3, 5, "New : ");
  169.     box(mp_win, VERT, HORZ);
  170.     wrefresh(mp_win);
  171.  
  172.     if ((new = get_str(mp_win, 50, "", "\n")) != NULL) {
  173.                     /* if CR, return NULL */
  174.         if (*new == '\0')
  175.             new = NULL;
  176.                     /* if space, change to null_ptr */
  177.         else if (!strcmp(new, " "))
  178.             new = null_ptr;
  179.     }
  180.  
  181.     werase(mp_win);
  182.     wrefresh(mp_win);
  183.     delwin(mp_win);
  184.     return(new);
  185. }
  186.