ftp.nice.ch/pub/next/unix/communication/pcomm.NIHS.bs.tar.gz#/pcomm/Source/macro.c

This is macro.c in view mode; [Download] [Up]

/*
 * 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"

void
macro()
{
	extern int fd;
	WINDOW *ma_win, *newwin();
	int ans, changed;
	char *mac, *str_rep();
	static char *mac_prompt();

	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);

	changed = 0;

	while ((ans = wgetch(ma_win)) != ESC) {
		switch (ans) {
			case '!':	/* shifted 1 */
				if ((mac = mac_prompt(ans, param->mac_1)) != NULL) {
					param->mac_1 = str_rep(param->mac_1, mac);
					clear_line(ma_win, 4, 9, TRUE);
					mvwattrstr(ma_win, 4, 9, A_BOLD, mac);
					changed++;
				}
				break;
			case '@':	/* shifted 2 */
				if ((mac = mac_prompt(ans, param->mac_2)) != NULL) {
					param->mac_2 = str_rep(param->mac_2, mac);
					clear_line(ma_win, 5, 9, TRUE);
					mvwattrstr(ma_win, 5, 9, A_BOLD, mac);
					changed++;
				}
				break;
			case '#':	/* shifted 3 */
				if ((mac = mac_prompt(ans, param->mac_3)) != NULL) {
					param->mac_3 = str_rep(param->mac_3, mac);
					clear_line(ma_win, 6, 9, TRUE);
					mvwattrstr(ma_win, 6, 9, A_BOLD, mac);
					changed++;
				}
				break;
			case '$':	/* shifted 4 */
				if ((mac = mac_prompt(ans, param->mac_4)) != NULL) {
					param->mac_4 = str_rep(param->mac_4, mac);
					clear_line(ma_win, 7, 9, TRUE);
					mvwattrstr(ma_win, 7, 9, A_BOLD, mac);
					changed++;
				}
				break;
			case '%':	/* shifted 5 */
				if ((mac = mac_prompt(ans, param->mac_5)) != NULL) {
					param->mac_5 = str_rep(param->mac_5, mac);
					clear_line(ma_win, 8, 9, TRUE);
					mvwattrstr(ma_win, 8, 9, A_BOLD, mac);
					changed++;
				}
				break;
			case '^':	/* shifted 6 */
				if ((mac = mac_prompt(ans, param->mac_6)) != NULL) {
					param->mac_6 = str_rep(param->mac_6, mac);
					clear_line(ma_win, 9, 9, TRUE);
					mvwattrstr(ma_win, 9, 9, A_BOLD, mac);
					changed++;
				}
				break;
			case '&':	/* shifted 7 */
				if ((mac = mac_prompt(ans, param->mac_7)) != NULL) {
					param->mac_7 = str_rep(param->mac_7, mac);
					clear_line(ma_win, 10, 9, TRUE);
					mvwattrstr(ma_win, 10, 9, A_BOLD, mac);
					changed++;
				}
				break;
			case '*':	/* shifted 8 */
				if ((mac = mac_prompt(ans, param->mac_8)) != NULL) {
					param->mac_8 = str_rep(param->mac_8, mac);
					clear_line(ma_win, 11, 9, TRUE);
					mvwattrstr(ma_win, 11, 9, A_BOLD, mac);
					changed++;
				}
				break;
			case '(':	/* shifted 9 */
				if ((mac = mac_prompt(ans, param->mac_9)) != NULL) {
					param->mac_9 = str_rep(param->mac_9, mac);
					clear_line(ma_win, 12, 9, TRUE);
					mvwattrstr(ma_win, 12, 9, A_BOLD, mac);
					changed++;
				}
				break;
			case ')':	/* shifted 0 */
				if ((mac = mac_prompt(ans, param->mac_0)) != NULL) {
					param->mac_0 = str_rep(param->mac_0, mac);
					clear_line(ma_win, 13, 9, TRUE);
					mvwattrstr(ma_win, 13, 9, A_BOLD, mac);
					changed++;
				}
				break;
			default:
				beep();
				break;
		}
		touchwin(ma_win);
		wmove(ma_win, 15, 26);
		wrefresh(ma_win);
	}
					/* if something changed */
	if (changed) {
					/* 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;
}

/*
 * Sounds like McDonalds doesn't it?  Actually, it opens a new window
 * and prompts for the new macro.  Returns a pointer to the new string.
 * Since it uses get_str(), the return value points to a static area.
 */

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);

	if ((new = get_str(mp_win, 50, "", "\n")) != NULL) {
					/* if CR, return NULL */
		if (*new == '\0')
			new = NULL;
					/* if space, change to null_ptr */
		else if (!strcmp(new, " "))
			new = null_ptr;
	}

	werase(mp_win);
	wrefresh(mp_win);
	delwin(mp_win);
	return(new);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.