home *** CD-ROM | disk | FTP | other *** search
- /*
- * The keyboard macro feature. Displays (and prompts for editing) the
- * macros assigned to the shifted number keys. Prompts for saving
- * changes to disk.
- */
-
- #include <stdio.h>
- #include <curses.h>
- #include "config.h"
- #include "misc.h"
- #include "param.h"
-
- int
- macro()
- {
- extern int fd;
- WINDOW *ma_win, *newwin();
- int ans, ret_code;
- char *mac, *strdup(), *mac_prompt();
- void free_ptr();
-
- ma_win = newwin(18, 65, 2, 15);
- mvwattrstr(ma_win, 1, 25, A_BOLD, "Keyboard Macros");
- horizontal(ma_win, 2, 0, 65);
- mvwprintw(ma_win, 4, 0, " %4.4s-! %-50.50s\n", param->ascii_hot, param->mac_1);
- wprintw(ma_win, " %4.4s-@ %-50.50s\n", param->ascii_hot, param->mac_2);
- wprintw(ma_win, " %4.4s-# %-50.50s\n", param->ascii_hot, param->mac_3);
- wprintw(ma_win, " %4.4s-$ %-50.50s\n", param->ascii_hot, param->mac_4);
- wprintw(ma_win, " %4.4s-%% %-50.50s\n", param->ascii_hot, param->mac_5);
- wprintw(ma_win, " %4.4s-^ %-50.50s\n", param->ascii_hot, param->mac_6);
- wprintw(ma_win, " %4.4s-& %-50.50s\n", param->ascii_hot, param->mac_7);
- wprintw(ma_win, " %4.4s-* %-50.50s\n", param->ascii_hot, param->mac_8);
- wprintw(ma_win, " %4.4s-( %-50.50s\n", param->ascii_hot, param->mac_9);
- wprintw(ma_win, " %4.4s-) %-50.50s\n", param->ascii_hot, param->mac_0);
- mvwaddstr(ma_win, 15, 5, "Macro key to revise:");
- box(ma_win, VERT, HORZ);
- /* on the bottom line */
- mvwaddstr(ma_win, 17, 21, " Press <ESC> to continue ");
- wmove(ma_win, 15, 26);
- wrefresh(ma_win);
-
- ret_code = 0;
-
- while ((ans = wgetch(ma_win)) != ESC) {
- switch (ans) {
- case '!': /* shifted 1 */
- if ((mac = mac_prompt(ans, param->mac_1)) != NULL) {
- free_ptr(param->mac_1);
- param->mac_1 = strdup(mac);
- clear_line(ma_win, 4, 9, 1);
- mvwattrstr(ma_win, 4, 9, A_BOLD, mac);
- ret_code++;
- }
- break;
- case '@': /* shifted 2 */
- if ((mac = mac_prompt(ans, param->mac_2)) != NULL) {
- free_ptr(param->mac_2);
- param->mac_2 = strdup(mac);
- clear_line(ma_win, 5, 9, 1);
- mvwattrstr(ma_win, 5, 9, A_BOLD, mac);
- ret_code++;
- }
- break;
- case '#': /* shifted 3 */
- if ((mac = mac_prompt(ans, param->mac_3)) != NULL) {
- free_ptr(param->mac_3);
- param->mac_3 = strdup(mac);
- clear_line(ma_win, 6, 9, 1);
- mvwattrstr(ma_win, 6, 9, A_BOLD, mac);
- ret_code++;
- }
- break;
- case '$': /* shifted 4 */
- if ((mac = mac_prompt(ans, param->mac_4)) != NULL) {
- free_ptr(param->mac_4);
- param->mac_4 = strdup(mac);
- clear_line(ma_win, 7, 9, 1);
- mvwattrstr(ma_win, 7, 9, A_BOLD, mac);
- ret_code++;
- }
- break;
- case '%': /* shifted 5 */
- if ((mac = mac_prompt(ans, param->mac_5)) != NULL) {
- free_ptr(param->mac_5);
- param->mac_5 = strdup(mac);
- clear_line(ma_win, 8, 9, 1);
- mvwattrstr(ma_win, 8, 9, A_BOLD, mac);
- ret_code++;
- }
- break;
- case '^': /* shifted 6 */
- if ((mac = mac_prompt(ans, param->mac_6)) != NULL) {
- free_ptr(param->mac_6);
- param->mac_6 = strdup(mac);
- clear_line(ma_win, 9, 9, 1);
- mvwattrstr(ma_win, 9, 9, A_BOLD, mac);
- ret_code++;
- }
- break;
- case '&': /* shifted 7 */
- if ((mac = mac_prompt(ans, param->mac_7)) != NULL) {
- free_ptr(param->mac_7);
- param->mac_7 = strdup(mac);
- clear_line(ma_win, 10, 9, 1);
- mvwattrstr(ma_win, 10, 9, A_BOLD, mac);
- ret_code++;
- }
- break;
- case '*': /* shifted 8 */
- if ((mac = mac_prompt(ans, param->mac_8)) != NULL) {
- free_ptr(param->mac_8);
- param->mac_8 = strdup(mac);
- clear_line(ma_win, 11, 9, 1);
- mvwattrstr(ma_win, 11, 9, A_BOLD, mac);
- ret_code++;
- }
- break;
- case '(': /* shifted 9 */
- if ((mac = mac_prompt(ans, param->mac_9)) != NULL) {
- free_ptr(param->mac_9);
- param->mac_9 = strdup(mac);
- clear_line(ma_win, 12, 9, 1);
- mvwattrstr(ma_win, 12, 9, A_BOLD, mac);
- ret_code++;
- }
- break;
- case ')': /* shifted 0 */
- if ((mac = mac_prompt(ans, param->mac_0)) != NULL) {
- free_ptr(param->mac_0);
- param->mac_0 = strdup(mac);
- clear_line(ma_win, 13, 9, 1);
- mvwattrstr(ma_win, 13, 9, A_BOLD, mac);
- ret_code++;
- }
- break;
- default:
- beep();
- break;
- }
- touchwin(ma_win);
- wmove(ma_win, 15, 26);
- wrefresh(ma_win);
- }
- /* if something changed */
- if (ret_code) {
- /* save to disk? */
- if (yes_prompt(ma_win, 15, 30, A_BOLD, "Save to disk")) {
- if (up_param()) {
- touchwin(ma_win);
- wrefresh(ma_win);
- }
- }
- }
- if (fd == -1) {
- werase(ma_win);
- wrefresh(ma_win);
- }
- delwin(ma_win);
- return(ret_code);
- }
-
- /*
- * Sounds like Mac Donalds doesn't it? Actually, it opens a new window
- * and prompts for the new macro. Returns a pointer to the new string.
- */
-
- static char *
- mac_prompt(key, string)
- char key, *string;
- {
- extern char *null_ptr;
- WINDOW *mp_win, *newwin();
- char *new, *get_str();
-
- mp_win = newwin(6, 65, 8, 0);
- mvwprintw(mp_win, 2, 3, "%4.4s-%c %-50.50s", param->ascii_hot, key, string);
- mvwaddstr(mp_win, 3, 5, "New : ");
- box(mp_win, VERT, HORZ);
- wrefresh(mp_win);
-
- new = get_str(mp_win, 50, "", "");
- /* if space, change to NULL pointer */
- if (!strcmp(new, " "))
- new = null_ptr;
-
- werase(mp_win);
- wrefresh(mp_win);
- delwin(mp_win);
- return(new);
- }
-