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

📄 eef2.c

📁 操作系统源代码
💻 C
字号:
/* ELLE - Copyright 1982, 1984, 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. *//* * EEF2		Various functions */#include "elle.h"/* Line Handling functions *//* EFUN: "Beginning of Line" */f_begline(){	e_gobol();	ed_setcur();}/* EFUN: "End of Line" */f_endline(){	e_goeol();	ed_setcur();}/* EFUN: "Next Line" *//*	Goes to beginning of next line */f_nxtline(){	return(down_bline(exp));}/* EFUN: "Previous Line" *//*	Goes to beginning of previous line */f_prvline(){	return(down_bline(-exp));}/* EFUN: "Down Real Line" */f_dnrline (){	down_line(exp);}/* EFUN: "Up Real Line" */f_uprline (){	down_line(-exp);}#if FX_OLINE/* EFUN: "Open Line" */f_oline(){	register int i;	chroff savdot;	savdot = cur_dot;	if((i = exp) > 0)		do { ed_crins(); }		while(--i);	e_gosetcur(savdot);}#endif /*FX_OLINE*/#if FX_DELBLINES/* EFUN: "Delete Blank Lines" *//*	Delete blank lines around point. */f_delblines(){	register int c;	chroff dot1, dot2, oldcur;	oldcur = cur_dot;	do { e_gobwsp(); }	while ((c = e_rgetc()) == LF);	if (c != EOF)		e_gonl();	dot1 = e_dot();	if(dot1 > oldcur) return;	do { e_gofwsp(); }	while ((c = e_getc()) == LF);	if(c != EOF)		e_gobol();	dot2 = e_dot();	if(dot2 < oldcur) return;	ed_delete(dot1,dot2);}#endif /*FX_DELBLINES*/#if FX_KLINE/* EFUN: "Kill Line" */f_kline(){	if(exp_p)		e_goline(exp);		/* Move that many lines */					/* (if 0, goes to BOL) */	else				/* No arg, handle specially */	  {	if(e_lblankp())		/* Is rest of line blank? */			;		/* Yes, now at next line! */		else e_goeol();		/* No, go to EOL rather than NL */	  }	ed_kill(cur_dot,e_dot());	e_setcur();	this_cmd = KILLCMD;}#endif /*FX_KLINE*/#if FX_BKLINE/* EFUN: "Backward Kill Line" (not EMACS) *//*	Originally an Iconographics function.*/f_bkline(){	if(exp_p) exp = -exp;		/* If arg, invert it */	else	  {	exp = 0;		/* No arg, furnish 0 */		exp_p = 1;	  }	f_kline();			/* Invoke "Kill Line" */}#endif /*FX_BKLINE*/#if FX_GOLINE/* EFUN: "Goto Line" (not EMACS) (GNU goto-line) */f_goline(){        e_gobob();        down_bline(exp-1);    /* already at line 1 */}#endif /*FX_GOLINE*/down_bline(arg)int arg;{		if(arg)		e_goline(arg);	ed_setcur();}#if FX_DNRLINE || FX_UPRLINEdown_line (x)int x;{	register int i, res;	res = x ? e_goline(x) : 1;	/* Move that many lines */	goal = 0;	if(res == 0)			/* Hit buffer limits (EOF)? */	  {	if(x > 0)		/* Moving downwards? */		  {#if !(IMAGEN)		/* If IMAGEN, do not extend!! */			if(x == 1) ed_crins();	/* Yeah, maybe extend */			else#endif				goal = indtion(cur_dot);			goto done;		  }	  }	if(last_cmd == LINECMD		/* If previous cmd also a line move */	  && pgoal != -1)		/* and we have a previous goal col */		goal = pgoal;		/* then make it the current goal */	else goal = indtion(cur_dot);	/* Else invent goal from current pos */	i = inindex(e_dot(), goal);	/* See # chars needed to reach goal */	if(i == -1)			/* If off edge of line, */		e_goeol();		/* just move to end of this line */	else e_igoff(i);		/* else move to goal. */done:	pgoal = goal;	this_cmd = LINECMD;	ed_setcur();}#endif /*FX_DNRLINE || FX_UPRLINE*//* Region Handling functions *//* EFUN: "Set/Pop Mark" */f_setmark(){	mark_dot = e_dot();	mark_p = 1;	if(ev_markshow)			/* If have one, show indicator */		saytoo(ev_markshow);	/* that mark was set. */}/* EFUN: "Exchange Point and Mark" */f_exchmark(){	chroff tmpdot;	if(chkmark())	  {	tmpdot = mark_dot;		mark_dot = cur_dot;		ed_go(tmpdot);		/* Set cur_dot and go there */	  }}/* EFUN: "Kill Region" */f_kregion(){	if(chkmark())	  {	ed_kill(cur_dot,mark_dot); /* Will adj cur_dot, mark_dot */		e_gocur();		this_cmd = KILLCMD;	  }}/* EFUN: "Copy Region" */f_copreg(){	if(chkmark())	  {	e_gocur();		kill_push(e_copyn(mark_dot - cur_dot));		e_gocur();	  }}/* EFUN: "Uppercase Region" */f_ucreg(){	ef_creg(0);}/* EFUN: "Lowercase Region" */f_lcreg(){	ef_creg(1);}ef_creg(downp)int downp;{	if(chkmark())		ed_case(cur_dot,mark_dot,downp);}#if FX_FILLREG/* EFUN: "Fill Region" */f_fillreg(){	if(chkmark())		ed_fill(mark_dot,cur_dot,0);}#endif /*FX_FILLREG*//* CHKMARK() - minor utility for region-hacking functions. *	Returns TRUE if mark exists. *	Otherwise complains to user and returns 0. */chkmark(){	if(mark_p == 0)		ding("No mark!");	return(mark_p);}/* Paragraph functions */#if FX_FPARA/* EFUN: "Forward Paragraph" */f_fpara(){	int e_gobpa(), e_goepa();	exp_do(e_goepa, e_gobpa);	ed_setcur();}#endif /*FX_FPARA*/#if FX_BPARA/* EFUN: "Backward Paragraph" *//*	Go to beginning of paragraph. *	Skip all whitespace until text seen, then stop at beginning of *	1st line starting with whitespace. */f_bpara(){	int e_gobpa(), e_goepa();	exp_do(e_gobpa, e_goepa);	ed_setcur();}#endif /*FX_BPARA*/#if FX_MRKPARA/* EFUN: "Mark Paragraph" */f_mrkpara(){	f_fpara();		/* Go to end of paragraph */	f_setmark();		/* Put mark there */	f_bpara();		/* Then back to start of paragraph */}#endif /*FX_MRKPARA*/#if FX_FILLPARA/* EFUN: "Fill Paragraph" */f_fillpara(){	chroff savloc, endloc;	savloc = cur_dot;#if ICONOGRAPHICS        e_getc();			/* DON'T go to next para if at end */        e_gobpa();			/* of this one!! */#endif /*ICONOGRAPHICS*/	e_goepa();			/* Go to end of parag */	if(e_rgetc() != LF)		/* If last char EOL, back over it. */		e_getc();	endloc = e_dot();		/* Remember where end is */	e_gobpa();			/* Go to beg of parag */#if ICONOGRAPHICS        kill_push(e_copyn(endloc - e_dot ()));                                        /* put old version on kill ring */#endif /*ICONOGRAPHICS*/	e_fwsp();			/* Move over initial whitespace */	ed_fill(e_dot(), endloc, 0);	/* Fill this region, return to dot */}#endif /*FX_FILLPARA*/

⌨️ 快捷键说明

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