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.