home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume16 / pcomm2 / part05 / macro.c < prev    next >
C/C++ Source or Header  |  1988-09-14  |  5KB  |  191 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 "config.h"
  10. #include "misc.h"
  11. #include "param.h"
  12.  
  13. int
  14. macro()
  15. {
  16.     extern int fd;
  17.     WINDOW *ma_win, *newwin();
  18.     int ans, ret_code;
  19.     char *mac, *strdup(), *mac_prompt();
  20.     void free_ptr();
  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.     ret_code = 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.                     free_ptr(param->mac_1);
  49.                     param->mac_1 = strdup(mac);
  50.                     clear_line(ma_win, 4, 9, 1);
  51.                     mvwattrstr(ma_win, 4, 9, A_BOLD, mac);
  52.                     ret_code++;
  53.                 }
  54.                 break;
  55.             case '@':    /* shifted 2 */
  56.                 if ((mac = mac_prompt(ans, param->mac_2)) != NULL) {
  57.                     free_ptr(param->mac_2);
  58.                     param->mac_2 = strdup(mac);
  59.                     clear_line(ma_win, 5, 9, 1);
  60.                     mvwattrstr(ma_win, 5, 9, A_BOLD, mac);
  61.                     ret_code++;
  62.                 }
  63.                 break;
  64.             case '#':    /* shifted 3 */
  65.                 if ((mac = mac_prompt(ans, param->mac_3)) != NULL) {
  66.                     free_ptr(param->mac_3);
  67.                     param->mac_3 = strdup(mac);
  68.                     clear_line(ma_win, 6, 9, 1);
  69.                     mvwattrstr(ma_win, 6, 9, A_BOLD, mac);
  70.                     ret_code++;
  71.                 }
  72.                 break;
  73.             case '$':    /* shifted 4 */
  74.                 if ((mac = mac_prompt(ans, param->mac_4)) != NULL) {
  75.                     free_ptr(param->mac_4);
  76.                     param->mac_4 = strdup(mac);
  77.                     clear_line(ma_win, 7, 9, 1);
  78.                     mvwattrstr(ma_win, 7, 9, A_BOLD, mac);
  79.                     ret_code++;
  80.                 }
  81.                 break;
  82.             case '%':    /* shifted 5 */
  83.                 if ((mac = mac_prompt(ans, param->mac_5)) != NULL) {
  84.                     free_ptr(param->mac_5);
  85.                     param->mac_5 = strdup(mac);
  86.                     clear_line(ma_win, 8, 9, 1);
  87.                     mvwattrstr(ma_win, 8, 9, A_BOLD, mac);
  88.                     ret_code++;
  89.                 }
  90.                 break;
  91.             case '^':    /* shifted 6 */
  92.                 if ((mac = mac_prompt(ans, param->mac_6)) != NULL) {
  93.                     free_ptr(param->mac_6);
  94.                     param->mac_6 = strdup(mac);
  95.                     clear_line(ma_win, 9, 9, 1);
  96.                     mvwattrstr(ma_win, 9, 9, A_BOLD, mac);
  97.                     ret_code++;
  98.                 }
  99.                 break;
  100.             case '&':    /* shifted 7 */
  101.                 if ((mac = mac_prompt(ans, param->mac_7)) != NULL) {
  102.                     free_ptr(param->mac_7);
  103.                     param->mac_7 = strdup(mac);
  104.                     clear_line(ma_win, 10, 9, 1);
  105.                     mvwattrstr(ma_win, 10, 9, A_BOLD, mac);
  106.                     ret_code++;
  107.                 }
  108.                 break;
  109.             case '*':    /* shifted 8 */
  110.                 if ((mac = mac_prompt(ans, param->mac_8)) != NULL) {
  111.                     free_ptr(param->mac_8);
  112.                     param->mac_8 = strdup(mac);
  113.                     clear_line(ma_win, 11, 9, 1);
  114.                     mvwattrstr(ma_win, 11, 9, A_BOLD, mac);
  115.                     ret_code++;
  116.                 }
  117.                 break;
  118.             case '(':    /* shifted 9 */
  119.                 if ((mac = mac_prompt(ans, param->mac_9)) != NULL) {
  120.                     free_ptr(param->mac_9);
  121.                     param->mac_9 = strdup(mac);
  122.                     clear_line(ma_win, 12, 9, 1);
  123.                     mvwattrstr(ma_win, 12, 9, A_BOLD, mac);
  124.                     ret_code++;
  125.                 }
  126.                 break;
  127.             case ')':    /* shifted 0 */
  128.                 if ((mac = mac_prompt(ans, param->mac_0)) != NULL) {
  129.                     free_ptr(param->mac_0);
  130.                     param->mac_0 = strdup(mac);
  131.                     clear_line(ma_win, 13, 9, 1);
  132.                     mvwattrstr(ma_win, 13, 9, A_BOLD, mac);
  133.                     ret_code++;
  134.                 }
  135.                 break;
  136.             default:
  137.                 beep();
  138.                 break;
  139.         }
  140.         touchwin(ma_win);
  141.         wmove(ma_win, 15, 26);
  142.         wrefresh(ma_win);
  143.     }
  144.                     /* if something changed */
  145.     if (ret_code) {
  146.                     /* save to disk? */
  147.         if (yes_prompt(ma_win, 15, 30, A_BOLD, "Save to disk")) {
  148.             if (up_param()) {
  149.                 touchwin(ma_win);
  150.                 wrefresh(ma_win);
  151.             }
  152.         }
  153.     }
  154.     if (fd == -1) {
  155.         werase(ma_win);
  156.         wrefresh(ma_win);
  157.     }
  158.     delwin(ma_win);
  159.     return(ret_code);
  160. }
  161.  
  162. /*
  163.  * Sounds like Mac Donalds doesn't it?  Actually, it opens a new window
  164.  * and prompts for the new macro.  Returns a pointer to the new string.
  165.  */
  166.  
  167. static char *
  168. mac_prompt(key, string)
  169. char key, *string;
  170. {
  171.     extern char *null_ptr;
  172.     WINDOW *mp_win, *newwin();
  173.     char *new, *get_str();
  174.  
  175.     mp_win = newwin(6, 65, 8, 0);
  176.     mvwprintw(mp_win, 2, 3, "%4.4s-%c  %-50.50s", param->ascii_hot, key, string);
  177.     mvwaddstr(mp_win, 3, 5, "New : ");
  178.     box(mp_win, VERT, HORZ);
  179.     wrefresh(mp_win);
  180.  
  181.     new = get_str(mp_win, 50, "", "");
  182.                     /* if space, change to NULL pointer */
  183.     if (!strcmp(new, " "))
  184.         new = null_ptr;
  185.  
  186.     werase(mp_win);
  187.     wrefresh(mp_win);
  188.     delwin(mp_win);
  189.     return(new);
  190. }
  191.