home *** CD-ROM | disk | FTP | other *** search
- /* keyboard macros for MicroGnuEmacs 1x */
-
- #ifndef NO_MACRO
- #include "def.h"
- #include "key.h"
- #define EXTERN
- #define INIT(i) = (i)
- #include "macro.h"
-
- /*ARGSUSED*/
- definemacro(f, n)
- int f, n;
- {
- register LINE *lp1;
- LINE *lp2;
-
- macrocount = 0;
- if(macrodef) {
- ewprintf("already defining macro");
- return macrodef = FALSE;
- }
- /* free lines allocated for string arguments */
- if(maclhead != NULL) {
- for(lp1 = maclhead->l_fp; lp1 != maclhead; lp1 = lp2) {
- lp2 = lp1->l_fp;
- free((char *)lp1);
- }
- free((char *)lp1);
- }
- if((maclhead = lp1 = lalloc(0)) == NULL) return FALSE;
- ewprintf("Defining Keyboard Macro...");
- maclcur = lp1->l_fp = lp1->l_bp = lp1;
- return macrodef = TRUE;
- }
-
- /*ARGSUSED*/
- finishmacro(f, n)
- int f, n;
- {
- macrodef = FALSE;
- ewprintf("End Keyboard Macro Definition");
- return TRUE;
- }
-
- /*ARGSUSED*/
- executemacro(f, n)
- int f, n;
- {
- int i, j;
- PF funct;
- int universal_argument();
- int flag, num;
-
- if(macrodef ||
- (macrocount >= MAXMACRO && macro[MAXMACRO].m_funct != finishmacro))
- return FALSE;
- if(macrocount == 0) return TRUE;
- inmacro = TRUE;
- for(i = n; i > 0; i--) {
- maclcur = maclhead->l_fp;
- flag = 0;
- num = 1;
- for(j = 0; j < macrocount-1; j++) {
- funct = macro[j].m_funct;
- if(funct == universal_argument) {
- flag = FFARG;
- num = macro[++j].m_count;
- continue;
- }
- if((*funct)(flag, num) != TRUE) {
- inmacro = FALSE;
- return FALSE;
- }
- lastflag = thisflag;
- thisflag = 0;
- flag = 0;
- num = 1;
- }
- }
- inmacro = FALSE;
- return TRUE;
- }
- #endif
-