home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume16
/
pcomm2
/
part05
/
macro.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-09-14
|
5KB
|
191 lines
/*
* 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);
}