/*
* Keyboard macros
* Copyright
* (C) 1992 Joseph H. Allen
*
* This file is part of JOE (Joe's Own Editor)
*/
struct macro {
int k; /* Keycode */
int flg; /* Flags: bit 0: this step wants the negative arg,
bit 1: ignore return value of this step, but use it as return value of macro */
CMD *cmd; /* Command address */
ptrdiff_t n; /* Number of steps */
ptrdiff_t size; /* Malloc size of steps */
MACRO **steps; /* Block */
};
struct recmac {
struct recmac *next;
int n;
MACRO *m;
};
extern struct recmac *recmac; /* Set when macro is recording: for status line */
/* Macro construction functions */
MACRO *mkmacro(int k, int arg, ptrdiff_t n, CMD *cmd);
void addmacro(MACRO *macro, MACRO *m);
MACRO *dupmacro(MACRO *mac);
void rmmacro(MACRO *macro);
MACRO *macstk(MACRO *m, int k);
MACRO *macsta(MACRO *m, int a);
void chmac(void);
/* Text to macro / Macro to text */
MACRO *mparse(MACRO *m, char *buf, ptrdiff_t *sta, int secure);
char *mtext(char *s, MACRO *m);
/* Execute a macro */
extern MACRO *curmacro; /* Current macro being executed */
int exemac(MACRO *m);
int exmacro(MACRO *m, int u);
/* Keyboard macros user interface */
int uplay(W *w, int c);
int ustop(W *w, int c);
int urecord(W *w, int c);
int uquery(W *w, int c);
int umacros(W *w, int c);
int utimer(W *w, int c);
/* Repeat prefix user command */
int uarg(W *w, int k);
int uuarg(W *w, int c);
int uif(W *w, int k);
int uelsif(W *w, int k);
int uelse(W *w, int k);
int uendif(W *w, int k);
char *unescape(char *ptr,int c);
void load_macros(FILE *f);
void save_macros(FILE *f);
extern int current_arg; /* Current macro repeat argument */
extern int current_arg_set; /* Set if repeat arg was given */