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

📄 delete.c

📁 aee是一种易使用的文本编辑器。你可以不用说明书来使用它。它提供终端接口和本地的X-windows接口。它的特性包括即弹的菜单
💻 C
📖 第 1 页 / 共 2 页
字号:
/* |	delete.c | |	$Header: /home/hugh/sources/aee/RCS/delete.c,v 1.9 1996/05/07 03:10:31 hugh Exp $ *//* |	Copyright (c) 1986 - 1988, 1991 - 1996 Hugh Mahon. */#include "aee.h"void del_char(save_flag)	/* delete character at current cursor position	*/int save_flag;{	int dselect;	dselect = mark_text;	if ((mark_text) && (curr_buff->position == curr_buff->curr_line->line_length))		mark_text = FALSE;	in = 8;	if (right(TRUE))	{		if ((delete(TRUE)) && (save_flag))			last_deleted(CHAR_DELETED, 1, &d_char);	}	mark_text = dselect;}void undel_char()			/* undelete last deleted character	*/{	int temp_flag;	temp_flag = overstrike;	overstrike = FALSE;	if (d_char == '\n')	/* insert line if last del_char deleted eol */		insert_line(TRUE);	else	{		in = d_char;		insert(in);	}	overstrike = temp_flag;}char *del_string(length)		/* delete string of specified length at current cursor position	*/int length;{	int tposit;	int i, d, count;	char *d_word2, *d_word3;	char *temp_point;	change = TRUE;	d = curr_buff->curr_line->vert_len;	temp_point = xalloc(1 + length);	d_word3 = curr_buff->pointer;	d_word2 = temp_point;	tposit = curr_buff->position;	count = 0;	while ((tposit < curr_buff->curr_line->line_length) && (count < length))	{		count++;		tposit++;		*d_word2 = *d_word3;		d_word2++;		d_word3++;	}	*d_word2 = (char) NULL;	d_word2 = curr_buff->pointer;	if ((mark_text) && (pst_pos != cpste_line->line_length))	{		for (i = 1; (i <= count) ; i++)			slct_dlt();	}	while (tposit < curr_buff->curr_line->line_length)	{		tposit++;		*d_word2 = *d_word3;		d_word2++;		d_word3++;	}	curr_buff->curr_line->line_length -= length;	curr_buff->curr_line->vert_len = (scanline(curr_buff->curr_line, curr_buff->curr_line->line_length) / COLS) + 1;	curr_buff->curr_line->changed = TRUE;	curr_buff->changed = TRUE;	if ((curr_buff->curr_line->vert_len < d) && (curr_buff->scr_vert < curr_buff->last_line))	{		i = d -= curr_buff->curr_line->vert_len;		i = curr_buff->last_line - i;		wmove(curr_buff->win, curr_buff->scr_vert+1, 0);		while (d > 0)		{			d--;			wdeleteln(curr_buff->win);		}		d = curr_buff->scr_vert;		tmp_line = curr_buff->curr_line;		d += curr_buff->curr_line->vert_len - (curr_buff->scr_pos / COLS);		while ((d <= i) && (tmp_line->next_line != NULL))		{			tmp_line = tmp_line->next_line;			d += tmp_line->vert_len;		}		if (tmp_line != NULL)		{			d -= tmp_line->vert_len;			wmove(curr_buff->win, d, 0);			wclrtobot(curr_buff->win);			for (; (d <= curr_buff->last_line) && (tmp_line != NULL); d += tmp_line->vert_len, tmp_line=tmp_line->next_line)				draw_line(d, 0, tmp_line->line, 1, tmp_line);			wmove(curr_buff->win, curr_buff->scr_vert, curr_buff->scr_horz);		}	}	*d_word2 = (char) NULL;	draw_line(curr_buff->scr_vert, curr_buff->scr_pos, curr_buff->pointer, curr_buff->position, curr_buff->curr_line);	return(temp_point);}void undel_string(string, length)	/* insert string at current position	*/char *string;int length;{	int temp;	int tposit;	char *d_word2;	char *d_word3;	char *d_word4;	char *d_word5;	int u;	int temp_flag;	int temp_mark;	/* if mark_text must be set FALSE, store original value here	*/	int temp_d_char;	formatted = FALSE;	temp_flag = overstrike;	overstrike = FALSE;	if ((observ_margins) && (curr_buff->scr_pos < left_margin))	{		temp_d_char = d_char;		insert(' ');		delete(TRUE);		d_char = temp_d_char;	}	u = curr_buff->curr_line->vert_len;	if ((curr_buff->curr_line->max_length - (curr_buff->curr_line->line_length + length)) < 5)		curr_buff->pointer = resiz_line(length, curr_buff->curr_line, curr_buff->position);	d_word5 = d_word4 = xalloc(curr_buff->curr_line->line_length + length);	d_word3 = string;	temp = 1;	while (temp <= length)	{		temp++;		*d_word5 = *d_word3;		d_word5++;		d_word3++;	}	d_word2 = curr_buff->pointer;	tposit = curr_buff->position;	while (tposit < curr_buff->curr_line->line_length)	{		temp++;		tposit++;		*d_word5 = *d_word2;		d_word5++;		d_word2++;	}	curr_buff->curr_line->line_length += length;	curr_buff->curr_line->changed = TRUE;	curr_buff->changed = TRUE;	d_word2 = curr_buff->pointer;	*d_word5 = (char) NULL;	d_word3 = d_word4;	tposit = 1;	while (tposit < temp)	{		tposit++;		*d_word2 = *d_word3;		d_word3++;		d_word2++;	}	*d_word2 = (char) NULL;	if ((mark_text) && (pst_pos == 1) && ((cpste_line->line_length > 1) || (cpste_line->next_line != NULL)))	{		temp_mark = mark_text;		mark_text = FALSE;		for (temp = 1; temp <= length; temp++)			right(FALSE);		mark_text = temp_mark;		for (temp = length; temp >= 1; temp--)			left(TRUE);	}	free(d_word4);	curr_buff->curr_line->vert_len = (scanline(curr_buff->curr_line, curr_buff->curr_line->line_length) / COLS) + 1;	if ((curr_buff->curr_line->vert_len > u) && (curr_buff->scr_vert < curr_buff->last_line))	{		u = curr_buff->curr_line->vert_len - u;		wmove(curr_buff->win, curr_buff->scr_vert+1, 0);		while (u > 0)		{			u--;			winsertln(curr_buff->win);		}	}	draw_line(curr_buff->scr_vert, curr_buff->scr_pos, curr_buff->pointer, curr_buff->position, curr_buff->curr_line);	overstrike = temp_flag;}void del_word(save_flag)		/* delete word in front of cursor	*/int save_flag;{	int tposit;	int difference;	char *d_word3;	char tmp_char;	if (free_d_word)	{		free_d_word = FALSE;		free(d_word);	}	change = TRUE;	curr_buff->curr_line->changed = TRUE;	curr_buff->changed = TRUE;	tmp_char = d_char;	tposit = curr_buff->position;	d_word3 = curr_buff->pointer;	while ((tposit < curr_buff->curr_line->line_length) && ((*d_word3 != ' ') && (*d_word3 != '\t')))	{		tposit++;		d_word3++;	}	while ((tposit < curr_buff->curr_line->line_length) && ((*d_word3 == ' ') || (*d_word3 == '\t')))	{		tposit++;		d_word3++;	}	d_wrd_len = difference = tposit - curr_buff->position;	d_word = del_string(difference);	d_char = tmp_char;	if (save_flag)		last_deleted(WORD_DELETED, d_wrd_len, d_word);	formatted = FALSE;}void undel_word()		/* undelete last deleted word		*/{	undel_string(d_word, d_wrd_len);}void Clear_line(save_flag)		/* delete from cursor to end of line	*/int save_flag;{	int difference;	if (free_d_line && (d_line != NULL))	{		free_d_line = FALSE;		free(d_line);	}	difference = dlt_line->line_length = 1 + curr_buff->curr_line->line_length - curr_buff->position;	d_line = del_string(difference);	if ((dlt_line->line_length > 1) && (save_flag))		last_deleted(LINE_DELETED, dlt_line->line_length, d_line);	*curr_buff->pointer = (char) NULL;	curr_buff->curr_line->line_length = curr_buff->position;	formatted = FALSE;}void del_line(save_flag)	/* delete line forward of cursor to end of line */int save_flag;{	int dselect;	Clear_line(save_flag);	dselect = mark_text;	mark_text = FALSE;	if ((dselect) && (pst_pos != cpste_line->line_length))	{		if (cpste_line->next_line != NULL)		{			cpste_line = fpste_line = cpste_line->next_line;			free(cpste_line->prev_line->line);			free(cpste_line->prev_line);			cpste_line->prev_line = NULL;			pst_pnt = pst_line = cpste_line->line;			pst_pos = 1;		}		else		{			pst_pos = cpste_line->line_length = 1;			pst_pnt = pst_line = cpste_line->line;			*pst_pnt = (char) NULL;		}	}	if (curr_buff->curr_line->next_line != NULL)	{		right(TRUE);		delete(TRUE);		if ((dlt_line->line_length <= 1) && (save_flag))			last_deleted(LINE_DELETED, dlt_line->line_length, d_line);	}	mark_text = dselect;}void undel_line()			/* undelete last deleted line		*/{	char *ud1;	char *ud2;	int tposit;	int u;	int temp_flag;	int temp_left;	/* storage for left_margin	*/	int temp_mark;	/* if mark_text must be set FALSE, store original value here	*/	temp_left = left_margin;	left_margin = 0;	temp_flag = indent;	indent = FALSE;	insert_line(TRUE);	left(TRUE);	u = curr_buff->scr_pos / COLS;	curr_buff->pointer = resiz_line(dlt_line->line_length, curr_buff->curr_line, curr_buff->position);	curr_buff->curr_line->line_length += dlt_line->line_length - 1;	ud1 = curr_buff->pointer;	ud2 = d_line;	tposit = 1;	while (tposit < dlt_line->line_length)	{

⌨️ 快捷键说明

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