亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? edit.c

?? STEVIE文本文件編緝器的C 語言源程序
?? C
字號:
/* $Header: /nw2/tony/src/stevie/src/RCS/edit.c,v 1.11 89/08/02 19:57:12 tony Exp $
 *
 * The main edit loop as well as some other simple cursor movement routines.
 */

#include "stevie.h"

/*
 * This flag is used to make auto-indent work right on lines where only
 * a <RETURN> or <ESC> is typed. It is set when an auto-indent is done,
 * and reset when any other editting is done on the line. If an <ESC>
 * or <RETURN> is received, and did_ai is TRUE, the line is truncated.
 */
bool_t	did_ai = FALSE;

void
edit()
{
	extern	bool_t	need_redraw;
	int	c;
	register char	*p, *q;

	Prenum = 0;

	/* position the display and the cursor at the top of the file. */
	*Topchar = *Filemem;
	*Curschar = *Filemem;
	Cursrow = Curscol = 0;

	do_mlines();		/* check for mode lines before starting */

	updatescreen();

	for ( ;; ) {

	/* Figure out where the cursor is based on Curschar. */
	cursupdate();

	if (need_redraw && !anyinput()) {
		updatescreen();
		need_redraw = FALSE;
	}

	if (!anyinput())
		windgoto(Cursrow,Curscol);


	c = vgetc();

	if (State == NORMAL) {

		/* We're in the normal (non-insert) mode. */

		/* Pick up any leading digits and compute 'Prenum' */
		if ( (Prenum>0 && isdigit(c)) || (isdigit(c) && c!='0') ){
			Prenum = Prenum*10 + (c-'0');
			continue;
		}
		/* execute the command */
		normal(c);
		Prenum = 0;

	} else {

		/*
		 * Insert or Replace mode.
		 */
		switch (c) {

		case ESC:	/* an escape ends input mode */

			/*
			 * If we just did an auto-indent, truncate the
			 * line, and put the cursor back.
			 */
			if (did_ai) {
				Curschar->linep->s[0] = NUL;
				Curschar->index = 0;
				did_ai = FALSE;
			}

			set_want_col = TRUE;

			/* Don't end up on a '\n' if you can help it. */
			if (gchar(Curschar) == NUL && Curschar->index != 0)
				dec(Curschar);

			/*
			 * The cursor should end up on the last inserted
			 * character. This is an attempt to match the real
			 * 'vi', but it may not be quite right yet.
			 */
			if (Curschar->index != 0 && !endofline(Curschar))
				dec(Curschar);

			State = NORMAL;
			msg("");

			/* construct the Redo buffer */
			p=Redobuff;
			q=Insbuff;
			while ( q < Insptr )
				*p++ = *q++;
			*p++ = ESC;
			*p = NUL;
			updatescreen();
			break;

		case CTRL('D'):
			/*
			 * Control-D is treated as a backspace in insert
			 * mode to make auto-indent easier. This isn't
			 * completely compatible with vi, but it's a lot
			 * easier than doing it exactly right, and the
			 * difference isn't very noticeable.
			 */
		case BS:
			/* can't backup past starting point */
			if (Curschar->linep == Insstart->linep &&
			    Curschar->index <= Insstart->index) {
				beep();
				break;
			}

			/* can't backup to a previous line */
			if (Curschar->linep != Insstart->linep &&
			    Curschar->index <= 0) {
				beep();
				break;
			}

			did_ai = FALSE;
			dec(Curschar);
			if (State == INSERT)
				delchar(TRUE);
			/*
			 * It's a little strange to put backspaces into
			 * the redo buffer, but it makes auto-indent a
			 * lot easier to deal with.
			 */
			*Insptr++ = BS;
			Ninsert++;
			cursupdate();
			updateline();
			break;

		case CR:
		case NL:
			*Insptr++ = NL;
			Ninsert++;
			opencmd(FORWARD, TRUE);		/* open a new line */
			break;

		default:
			did_ai = FALSE;
			insertchar(c);
			break;
		}
	}
	}
}

void
insertchar(c)
int	c;
{
	inschar(c);
	*Insptr++ = c;
	Ninsert++;
	/*
	 * The following kludge avoids overflowing the statically
	 * allocated insert buffer. Just dump the user back into
	 * command mode, and print a message.
	 */
	if (Insptr+10 >= &Insbuff[1024]) {
		stuffin(mkstr(ESC));
		emsg("No buffer space - returning to command mode");
		sleep(2);
	}
	updateline();
}

void
getout()
{
	windgoto(Rows-1,0);
	putchar('\r');
	putchar('\n');
	windexit(0);
}

void
scrolldown(nlines)
int	nlines;
{
	register LPTR	*p;
	register int	done = 0;	/* total # of physical lines done */

	/* Scroll up 'nlines' lines. */
	while (nlines--) {
		if ((p = prevline(Topchar)) == NULL)
			break;
		done += plines(p);
		*Topchar = *p;
		/*
		 * If the cursor is on the bottom line, we need to
		 * make sure it gets moved up the appropriate number
		 * of lines so it stays on the screen.
		 */
		if (Curschar->linep == Botchar->linep->prev) {
			int	i = 0;
			while (i < done) {
				i += plines(Curschar);
				*Curschar = *prevline(Curschar);
			}
		}
	}
	s_ins(0, done);
}

void
scrollup(nlines)
int	nlines;
{
	register LPTR	*p;
	register int	done = 0;	/* total # of physical lines done */
	register int	pl;		/* # of plines for the current line */

	/* Scroll down 'nlines' lines. */
	while (nlines--) {
		pl = plines(Topchar);
		if ((p = nextline(Topchar)) == NULL)
			break;
		done += pl;
		if (Curschar->linep == Topchar->linep)
			*Curschar = *p;
		*Topchar = *p;

	}
	s_del(0, done);
}

/*
 * oneright
 * oneleft
 * onedown
 * oneup
 *
 * Move one char {right,left,down,up}.  Return TRUE when
 * sucessful, FALSE when we hit a boundary (of a line, or the file).
 */

bool_t
oneright()
{
	set_want_col = TRUE;

	switch (inc(Curschar)) {

	case 0:
		return TRUE;

	case 1:
		dec(Curschar);		/* crossed a line, so back up */
		/* fall through */
	case -1:
		return FALSE;
	}
	/*NOTREACHED*/
}

bool_t
oneleft()
{
	set_want_col = TRUE;

	switch (dec(Curschar)) {

	case 0:
		return TRUE;

	case 1:
		inc(Curschar);		/* crossed a line, so back up */
		/* fall through */
	case -1:
		return FALSE;
	}
	/*NOTREACHED*/
}

void
beginline(flag)
bool_t	flag;
{
	while ( oneleft() )
		;
	if (flag) {
		while (isspace(gchar(Curschar)) && oneright())
			;
	}
	set_want_col = TRUE;
}

bool_t
oneup(n)
int	n;
{
	LPTR	p, *np;
	register int	k;

	p = *Curschar;
	for ( k=0; k<n; k++ ) {
		/* Look for the previous line */
		if ( (np=prevline(&p)) == NULL ) {
			/* If we've at least backed up a little .. */
			if ( k > 0 )
				break;	/* to update the cursor, etc. */
			else
				return FALSE;
		}
		p = *np;
	}
	*Curschar = p;
	/* This makes sure Topchar gets updated so the complete line */
	/* is one the screen. */
	cursupdate();
	/* try to advance to the column we want to be at */
	*Curschar = *coladvance(&p, Curswant);
	return TRUE;
}

bool_t
onedown(n)
int	n;
{
	LPTR	p, *np;
	register int	k;

	p = *Curschar;
	for ( k=0; k<n; k++ ) {
		/* Look for the next line */
		if ( (np=nextline(&p)) == NULL ) {
			if ( k > 0 )
				break;
			else
				return FALSE;
		}
		p = *np;
	}
	/* try to advance to the column we want to be at */
	*Curschar = *coladvance(&p, Curswant);
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美卡1卡2卡| 日韩无一区二区| 国产最新精品免费| 麻豆一区二区99久久久久| 亚欧色一区w666天堂| 亚洲综合视频在线| 亚洲va国产天堂va久久en| 亚洲一区二区三区四区的| 一区二区三区久久| 日韩av中文字幕一区二区| 日韩国产一区二| 毛片av一区二区三区| 精品亚洲porn| 91在线免费看| 欧美区一区二区三区| 日韩欧美国产一区在线观看| 精品国产乱码久久久久久闺蜜 | 日韩黄色免费电影| 日韩影院在线观看| 国产成人av电影在线播放| 99国产精品久久久久久久久久久 | 日韩视频在线你懂得| 欧美一二三区在线| 中文字幕一区三区| 午夜精品免费在线观看| 国产在线播放一区三区四| 大桥未久av一区二区三区中文| 色悠久久久久综合欧美99| 欧美顶级少妇做爰| 国产欧美日韩在线观看| 亚洲成人综合网站| 国产99精品在线观看| 欧美日产在线观看| 国产欧美一二三区| 丝袜诱惑制服诱惑色一区在线观看| 久久99精品一区二区三区三区| 99精品偷自拍| 久久亚洲精华国产精华液 | 久久99热这里只有精品| 不卡视频一二三| 日韩亚洲欧美综合| 亚洲高清免费视频| av成人免费在线| 久久女同性恋中文字幕| 午夜日韩在线观看| 在线免费一区三区| 国产精品色在线| 狠狠色综合日日| 这里只有精品99re| 亚洲一区二区三区影院| 成人深夜福利app| 久久精品人人爽人人爽| 免费精品视频在线| 欧美精品国产精品| 一区二区三区日本| 91日韩在线专区| 国产农村妇女精品| 国产成人在线视频网站| 日韩一区二区视频在线观看| 亚洲国产成人av好男人在线观看| 成人精品电影在线观看| 国产欧美日韩另类视频免费观看| 美女网站在线免费欧美精品| 欧美疯狂性受xxxxx喷水图片| 亚洲男人天堂av| 99视频精品在线| 亚洲丝袜另类动漫二区| 色综合久久久久综合体| 国产精品成人免费在线| 不卡视频一二三四| 亚洲欧洲制服丝袜| 91久久精品网| 亚洲国产欧美日韩另类综合 | 亚洲成人免费看| 欧美午夜免费电影| 亚洲制服丝袜一区| 欧美精品丝袜中出| 蜜臂av日日欢夜夜爽一区| 91精品免费在线| 美国三级日本三级久久99| 日韩一级完整毛片| 国产精品资源在线观看| 国产亚洲精品bt天堂精选| 国产福利不卡视频| 最新日韩在线视频| 色哟哟一区二区在线观看| 亚洲精品国产第一综合99久久 | 日韩在线一区二区| 91精品国产91综合久久蜜臀| 美女视频黄频大全不卡视频在线播放| 日韩一级欧美一级| 国产91丝袜在线观看| 中文字幕一区二区三区精华液 | 日韩精品一区二区三区视频在线观看| 日本不卡一区二区| 国产日韩精品一区二区浪潮av | 日韩一级视频免费观看在线| 奇米色一区二区| 国产婷婷色一区二区三区在线| 成人在线综合网| 无吗不卡中文字幕| 精品久久久久久久久久久久久久久| 国产夫妻精品视频| 亚洲最快最全在线视频| 久久综合久久综合久久综合| 成人免费的视频| 天堂av在线一区| 国产精品三级av在线播放| 欧美日韩综合在线| 国产麻豆精品95视频| 一区二区三区免费观看| 久久众筹精品私拍模特| 欧美日韩在线播| 国产成人综合在线观看| 亚洲18色成人| 国产精品无遮挡| 欧美刺激午夜性久久久久久久| 成人av资源下载| 麻豆91在线观看| 一区二区久久久久| 国产欧美日韩卡一| 欧美大胆人体bbbb| 色天使久久综合网天天| 久久 天天综合| 日韩精品欧美精品| 一区二区三区精品视频| 国产午夜精品一区二区| 欧美一区二区三区爱爱| 99久久久无码国产精品| 国产成人夜色高潮福利影视| 丝袜美腿亚洲一区二区图片| 自拍偷拍亚洲欧美日韩| 国产亚洲综合性久久久影院| 欧美图片一区二区三区| 91日韩精品一区| 成人高清视频在线观看| 国产精品91一区二区| 久久草av在线| 狠狠色2019综合网| 青草av.久久免费一区| 亚洲国产一区视频| 一区二区激情视频| 亚洲色图制服诱惑| 亚洲精品成人在线| 亚洲三级久久久| 18欧美乱大交hd1984| 国产精品的网站| 中文字幕亚洲精品在线观看| 国产精品入口麻豆原神| 国产日韩影视精品| 国产日韩一级二级三级| 久久久国产精品午夜一区ai换脸| 精品欧美乱码久久久久久| 日韩欧美成人一区二区| 日韩精品一区二区三区视频在线观看 | 精品福利二区三区| 日韩午夜激情电影| 久久中文娱乐网| 欧美极品aⅴ影院| 国产精品乱码一区二区三区软件| 国产亚洲欧美日韩在线一区| 国产欧美一区二区精品久导航| 国产午夜一区二区三区| 中国色在线观看另类| 亚洲日穴在线视频| 亚洲综合精品自拍| 蜜桃精品视频在线| 高清国产一区二区| 一本色道综合亚洲| 欧美日韩一区二区欧美激情| 欧美日韩国产a| 久久青草国产手机看片福利盒子 | 久久精品国产第一区二区三区| 久久精品国产成人一区二区三区| 国产精品影视天天线| 91亚洲精品乱码久久久久久蜜桃| 91久久线看在观草草青青| 制服丝袜一区二区三区| 国产女同性恋一区二区| 一区二区视频免费在线观看| 日韩精品一级二级| 成人综合婷婷国产精品久久免费| 91黄色在线观看| 欧美mv日韩mv国产网站| 最近中文字幕一区二区三区| 亚洲妇女屁股眼交7| 国产精品系列在线观看| 欧美性受xxxx黑人xyx性爽| 日韩三级伦理片妻子的秘密按摩| 日本一区二区三区免费乱视频| 亚洲一区在线看| 国产成人精品亚洲午夜麻豆| 欧美性淫爽ww久久久久无| 久久夜色精品国产噜噜av| 亚洲综合在线免费观看| 国产在线日韩欧美| 欧美裸体一区二区三区| 欧美国产日韩a欧美在线观看| 午夜精品久久久久久久久久| 成人av在线一区二区|