⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eekmac.c

📁 操作系统源代码
💻 C
字号:
/* ELLE - Copyright 1982, 1985, 1987 by Ken Harrenstien, SRI International *	This software is quasi-public; it may be used freely with *	like software, but may NOT be sold or made part of licensed *	products without permission of the author. *//*	EEKMAC - Keyboard Macro routines *		Modelled after the "e_macro.c" for ICONOGRAPHICS *		by C. D. Tavares, 9/11/82 */#include "elle.h"#if FX_SKMAC		/* Entire file is under this conditional! */int kdef_mode;		/* Set when collecting (a "minor mode") */static int km_flag = 0;	/* 1 = executing, -1 collecting, 0 neither */static int km_exp;	/* Arg to "Execute Kbd Macro" - # times more to xct */static struct buffer *km_buf;/* EFUN: "Start Kbd Macro" */f_skmac(){	register struct buffer *b;	struct buffer *make_buf();	if(km_flag)	  {	ding("Kbd macro active, ignoring \"Start Kbd Macro\"");		return;	  }	if((b = km_buf) == 0)		b = km_buf = make_buf(" *KBDMAC*");	ex_reset(b);	km_flag = -1;		/* Say starting macro collection */	kdef_mode = 1;	redp(RD_MODE);}/* EFUN: "End Kbd Macro" */f_ekmac(){	if(km_flag > 0 && (--km_exp >= 0))	  {	ex_go((SBBUF *)km_buf, (chroff)0);	  }	else if(km_flag)	  {	km_flag = 0;		kdef_mode = 0;	/* Flush minor mode */		redp(RD_MODE);	  }}/* EFUN: "Execute Kbd Macro" */f_xkmac(){	if(km_flag)		ding("Already in kbd macro!");	else if(km_buf == 0)		ding("No kbd macro defined");	else if((km_exp = exp-1) >= 0)	  {		ex_go((SBBUF *)km_buf, (chroff) 0);		km_flag = 1;		/* Start macro execution */	  }}/* EFUN: "View Kbd Macro" */f_vkmac(){	register struct buffer *b, *savbuf;	chroff prmplen;	if(!(b = km_buf))	  {	ding("No kbd macro defined");		return;	  }	savbuf = cur_buf;	chg_buf(b);	e_gobob();	e_sputz("Current Kbd macro:\n\n");	prmplen = e_dot();	mk_showin(b);		/* Show the macro buffer temporarily */	e_gobob();        chg_buf(savbuf);	sb_deln((SBBUF *)b, prmplen);	/* Flush the prompt */}/* KM_GETC - return next command char from kbd macro being executed.**	This is < 0 if not executing kbd macro.  Also responsible for**	gathering input for kbd macro.*/km_getc(){	register int c;	while (km_flag > 0)		/* Executing macro? */	  {	c = sb_getc(((SBBUF *)km_buf));	/* Yes, get char */		if(c != EOF)			return(c);		/* and return as cmd */		if(--km_exp >= 0)		/* Macro done.  Repeat? */			ex_go((SBBUF *)km_buf, (chroff)0);	/* Yes */		else km_flag = 0;		/* No, stop execution */	  }	c = tgetc();			/* Get char from user (TTY) */	if(km_flag < 0)			/* Save it if collecting macro */	  {	sb_putc(((SBBUF *)km_buf), c);	  }	return(c);}/* KM_INWAIT() - Return TRUE if any keyboard-macro input waiting. */km_inwait(){	register int c;	if(km_flag > 0)		if((c = sb_getc(((SBBUF *)km_buf))) != EOF || (km_exp > 0))		  {	sb_backc(((SBBUF *)km_buf));			return(1);		  }	return(0);}km_abort (){	if(km_flag > 0)		/* Executing? */		km_flag = 0;	/* Stop */	else if(km_flag < 0)	/* Collecting? */		f_ekmac();	/* Close it out */}#endif /*FX_SKMAC*/#if 0	/* Old unused stuff */static char mode_buf [60];add_mode (mode)  char *mode;  {        register char *cur, *c, *m;        if (cur_mode != mode_buf)           {            strcpy (mode_buf, cur_mode);            cur_mode = mode_buf;           }        if (cur_mode [0]) strcat (cur_mode, ", ");        strcat (cur_mode, mode);        make_mode ();  }remove_mode (mode)  char *mode;  {        register char *cur, *c, *m;        if (*cur_mode == 0) return;        if (cur_mode != mode_buf)           {            strcpy (mode_buf, cur_mode);            cur_mode = mode_buf;           }        for (cur = cur_mode ; *cur ; cur++)            if (*cur == *mode)          /* 1st char matches */               {                for (c = cur, m = mode ; *m && (*m == *c) ; m++, c++) ;                if (!(*m))              /* ok, mode matched */                   {                    /* kill leading ", " */                    if (*(cur - 1) == ' ') --cur;                    if (*(cur - 1) == ',') --cur;                    for ( ; *cur = *c ; cur++, c++) ;   /* recopy to end */                    make_mode ();                    return;                   }               }  }#endif /*COMMENT*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -