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

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

?? sed.c

?? GNU Sed GNU Sed GNU Sed
?? C
?? 第 1 頁 / 共 3 頁
字號:
			num=size_buffer(b);
			string=(unsigned char *)ck_malloc(num);
			bcopy(get_buffer(b),string,num);
			flush_buffer(b);
			cur_cmd->x.cmd_txt.text_len=num;
			cur_cmd->x.cmd_txt.text=(char *)string;
			break;
		case '{':
			cur_cmd->cmd=ch;
			program_depth++;
#if 0
			while((ch=inchar())!=EOF && ch!='\n')
				if(!isblank(ch))
					bad_prog(LINE_JUNK);
#endif
			cur_cmd->x.sub=compile_program((struct vector *)0);
			/* FOO JF is this the right thing to do? */
			break;
		case '}':
			if(!program_depth)
				bad_prog("Unexpected '}'");
			--(vector->v_length);
			while((ch=inchar())!=EOF && ch!='\n' && ch!=';')
				if(!isblank(ch))
					bad_prog(LINE_JUNK);
			return vector;
		case ':':
			cur_cmd->cmd=ch;
			if(cur_cmd->a1.addr_type!=0)
				bad_prog(": doesn't want any addresses");
			labels=setup_jump(labels,cur_cmd,vector);
			break;
		case 'b':
		case 't':
			cur_cmd->cmd=ch;
			jumps=setup_jump(jumps,cur_cmd,vector);
			break;
		case 'q':
		case '=':
			if(cur_cmd->a2.addr_type)
				bad_prog(ONE_ADDR);
			/* Fall Through */
		case 'd':
		case 'D':
		case 'g':
		case 'G':
		case 'h':
		case 'H':
		case 'l':
		case 'n':
		case 'N':
		case 'p':
		case 'P':
		case 'x':
			cur_cmd->cmd=ch;
			do	ch=inchar();
			while(ch!=EOF && isblank(ch) && ch!='\n' && ch!=';');
			if(ch!='\n' && ch!=';' && ch!=EOF)
				bad_prog(LINE_JUNK);
			break;

		case 'r':
			if(cur_cmd->a2.addr_type!=0)
				bad_prog(ONE_ADDR);
			/* FALL THROUGH */
		case 'w':
			cur_cmd->cmd=ch;
			cur_cmd->x.io_file=compile_filename(ch=='r');
			break;

		case 's':
			cur_cmd->cmd=ch;
			slash=inchar();
			compile_regex(slash);

			cur_cmd->x.cmd_regex.regx=last_regex;

			b=init_buffer();
			while((ch=inchar())!=EOF && ch!=slash) {
				if(ch=='\\') {
					int ci;

					ci=inchar();
					if(ci!=EOF) {
						if(ci!='\n')
							add1_buffer(b,ch);
						add1_buffer(b,ci);
					}
				} else
					add1_buffer(b,ch);
			}
			cur_cmd->x.cmd_regex.replace_length=size_buffer(b);
			cur_cmd->x.cmd_regex.replacement=ck_malloc(cur_cmd->x.cmd_regex.replace_length);
			bcopy(get_buffer(b),cur_cmd->x.cmd_regex.replacement,cur_cmd->x.cmd_regex.replace_length);
			flush_buffer(b);

			cur_cmd->x.cmd_regex.flags=0;
			cur_cmd->x.cmd_regex.numb=0;

			if(ch==EOF)
				break;
			do {
				ch=inchar();
				switch(ch) {
				case 'p':
					if(cur_cmd->x.cmd_regex.flags&S_PRINT_BIT)
						bad_prog("multiple 'p' options to 's' command");
					cur_cmd->x.cmd_regex.flags|=S_PRINT_BIT;
					break;
				case 'g':
					if(cur_cmd->x.cmd_regex.flags&S_NUM_BIT)
						cur_cmd->x.cmd_regex.flags&= ~S_NUM_BIT;
					if(cur_cmd->x.cmd_regex.flags&S_GLOBAL_BIT)
						bad_prog("multiple 'g' options to 's' command");
					cur_cmd->x.cmd_regex.flags|=S_GLOBAL_BIT;
					break;
				case 'w':
					cur_cmd->x.cmd_regex.flags|=S_WRITE_BIT;
					cur_cmd->x.cmd_regex.wio_file=compile_filename(0);
					ch='\n';
					break;
				case '0': case '1': case '2': case '3':
				case '4': case '5': case '6': case '7':
				case '8': case '9':
					if(cur_cmd->x.cmd_regex.flags&S_NUM_BIT)
						bad_prog("multiple number options to 's' command");
					if((cur_cmd->x.cmd_regex.flags&S_GLOBAL_BIT)==0)
						cur_cmd->x.cmd_regex.flags|=S_NUM_BIT;
					num = 0;
					while(isdigit(ch)) {
						num=num*10+ch-'0';
						ch=inchar();
					}
					savchar(ch);
					cur_cmd->x.cmd_regex.numb=num;
					break;
				case '\n':
				case ';':
				case EOF:
					break;
				default:
					bad_prog("Unknown option to 's'");
					break;
				}
			} while(ch!=EOF && ch!='\n' && ch!=';');
			if(ch==EOF)
				break;
			break;

		case 'y':
			cur_cmd->cmd=ch;
			string=(unsigned char *)ck_malloc(256);
			for(num=0;num<256;num++)
				string[num]=num;
			b=init_buffer();
			slash=inchar();
			while((ch=inchar())!=EOF && ch!=slash)
				add1_buffer(b,ch);
			cur_cmd->x.translate=string;
			string=(unsigned char *)get_buffer(b);
			for(num=size_buffer(b);num;--num) {
				ch=inchar();
				if(ch==EOF)
					bad_prog(BAD_EOF);
				if(ch==slash)
					bad_prog("strings for y command are different lengths");
				cur_cmd->x.translate[*string++]=ch;
			}
			flush_buffer(b);
			if(inchar()!=slash || ((ch=inchar())!=EOF && ch!='\n' && ch!=';'))
				bad_prog(LINE_JUNK);
			break;

		default:
			bad_prog("Unknown command");
		}
	}
	return vector;
}

/* Complain about a programming error and exit. */
void
bad_prog(why)
char *why;
{
	if(prog_line)
		fprintf(stderr,"%s: file %s line %d: %s\n",myname,prog_name,prog_line,why);
	else
		fprintf(stderr,"%s: %s\n",myname,why);
	exit(1);
}

/* Read the next character from the program.  Return EOF if there isn't
   anything to read.  Keep prog_line up to date, so error messages can
   be meaningful. */
int
inchar()
{
	int	ch;
	if(prog_file) {
		if(feof(prog_file))
			return EOF;
		else
			ch=getc(prog_file);
	} else {
		if(!prog_cur)
			return EOF;
		else if(prog_cur==prog_end) {
			ch=EOF;
			prog_cur=0;
		} else
			ch= *prog_cur++;
	}
	if(ch=='\n' && prog_line)
		prog_line++;
	return ch;
}

/* unget 'ch' so the next call to inchar will return it.  'ch' must not be
   EOF or anything nasty like that. */
void
savchar(ch)
int ch;
{
	if(ch==EOF)
		return;
	if(ch=='\n' && prog_line>1)
		--prog_line;
	if(prog_file)
		ungetc(ch,prog_file);
	else
		*--prog_cur=ch;
}


/* Try to read an address for a sed command.  If it succeeeds,
   return non-zero and store the resulting address in *'addr'.
   If the input doesn't look like an address read nothing
   and return zero. */
int
compile_address(addr)
struct addr *addr;
{
	int	ch;
	int	num;

	ch=inchar();

	if(isdigit(ch)) {
		num=ch-'0';
		while((ch=inchar())!=EOF && isdigit(ch))
			num=num*10+ch-'0';
		while(ch!=EOF && isblank(ch))
			ch=inchar();
		savchar(ch);
		addr->addr_type=ADDR_NUM;
		addr->addr_number = num;
		return 1;
	} else if(ch=='/') {
		addr->addr_type=ADDR_REGEX;
		compile_regex('/');
		addr->addr_regex=last_regex;
		do ch=inchar();
		while(ch!=EOF && isblank(ch));
		savchar(ch);
		return 1;
	} else if(ch=='$') {
		addr->addr_type=ADDR_LAST;
		do ch=inchar();
		while(ch!=EOF && isblank(ch));
		savchar(ch);
		return 1;
	} else
		savchar(ch);
	return 0;
}

void
compile_regex (slash)
     int slash;
{
	VOID *b;
	int ch;
	int in_char_class = 0;

	b=init_buffer();
	while((ch=inchar())!=EOF && (ch!=slash || in_char_class)) {
		if(ch=='^') {
			if(size_buffer(b)==0) {
				add1_buffer(b,'\\');
				add1_buffer(b,'`');
			} else
				add1_buffer(b,ch);
			continue;
		} else if(ch=='$') {
			ch=inchar();
			savchar(ch);
			if(ch==slash) {
				add1_buffer(b,'\\');
				add1_buffer(b,'\'');
			} else
				add1_buffer(b,'$');
			continue;
		} else if(ch == '[') {
			add1_buffer(b,ch);
			in_char_class = 1;
			continue;
		} else if(ch == ']') {
			add1_buffer(b,ch);
			in_char_class = 0;
			continue;
		} else if(ch!='\\') {
			add1_buffer(b,ch);
			continue;
		}
		ch=inchar();
		switch(ch) {
		case 'n':
			add1_buffer(b,'\n');
			break;
#if 0
		case 'b':
			add1_buffer(b,'\b');
			break;
		case 'f':
			add1_buffer(b,'\f');
			break;
		case 'r':
			add1_buffer(b,'\r');
			break;
		case 't':
			add1_buffer(b,'\t');
			break;
#endif /* 0 */
		case EOF:
			break;
		default:
			add1_buffer(b,'\\');
			add1_buffer(b,ch);
			break;
		}
	}
	if(ch==EOF)
		bad_prog(BAD_EOF);
	if(size_buffer(b)) {
		last_regex=(struct re_pattern_buffer *)ck_malloc(sizeof(struct re_pattern_buffer));
		last_regex->allocated=size_buffer(b)+10;
		last_regex->buffer=ck_malloc(last_regex->allocated);
		last_regex->fastmap=ck_malloc(256);
		last_regex->translate=0;
		re_compile_pattern(get_buffer(b),size_buffer(b),last_regex);
	} else if(!last_regex)
		bad_prog(NO_REGEX);
	flush_buffer(b);
}

/* Store a label (or label reference) created by a ':', 'b', or 't'
   comand so that the jump to/from the lable can be backpatched after
   compilation is complete */
struct sed_label *
setup_jump(list,cmd,vec)
struct sed_label *list;
struct sed_cmd *cmd;
struct vector *vec;
{
	struct sed_label *tmp;
	VOID *b;
	int ch;

	b=init_buffer();
	while((ch=inchar()) != EOF && isblank(ch))
		;
	while(ch!=EOF && ch!='\n') {
		add1_buffer(b,ch);
		ch=inchar();
	}
	savchar(ch);
	add1_buffer(b,'\0');
	tmp=(struct sed_label *)ck_malloc(sizeof(struct sed_label));
	tmp->v=vec;
	tmp->v_index=cmd-vec->v;
	tmp->name=ck_strdup(get_buffer(b));
	tmp->next=list;
	flush_buffer(b);
	return tmp;
}

/* read in a filename for a 'r', 'w', or 's///w' command, and
   update the internal structure about files.  The file is
   opened if it isn't already open. */
FILE *
compile_filename(readit)
     int readit;
{
	char *file_name;
	int n;
	VOID *b;
	int ch;

	if(inchar()!=' ')
		bad_prog("missing ' ' before filename");
	b=init_buffer();
	while((ch=inchar())!=EOF && ch!='\n')
		add1_buffer(b,ch);
	add1_buffer(b,'\0');
	file_name=get_buffer(b);
	for(n=0;n<NUM_FPS;n++) {
		if(!file_ptrs[n].name)
			break;
		if(!strcmp(file_ptrs[n].name,file_name)) {
			if(file_ptrs[n].readit!=readit)
				bad_prog("Can't open file for both reading and writing");
			flush_buffer(b);
			return file_ptrs[n].phile;
		}
	}
	if(n<NUM_FPS) {
		file_ptrs[n].name=ck_strdup(file_name);
		file_ptrs[n].readit=readit;
		if (!readit)
			file_ptrs[n].phile=ck_fopen(file_name,"a");
		else if (access(file_name, 4) == 0)
			file_ptrs[n].phile=ck_fopen(file_name,"r");
		else if (access(file_name, 4) == 0)
			file_ptrs[n].phile=ck_fopen(file_name,"r");
		else
			file_ptrs[n].phile=ck_fopen("/dev/null", "r");
		flush_buffer(b);
		return file_ptrs[n].phile;
	} else {
		bad_prog("Hopelessely evil compiled in limit on number of open files.  re-compile sed");
		return 0;
	}
}

/* Parse a filename given by a 'r' 'w' or 's///w' command. */
void
read_file(name)
char *name;
{
	if(*name=='-' && name[1]=='\0')
		input_file=stdin;
	else {
		input_file=fopen(name,"r");
		if(input_file==0) {
			extern int errno;
			extern char *sys_errlist[];
			extern int sys_nerr;

			char *ptr;

			ptr=(errno>=0 && errno<sys_nerr) ? sys_errlist[errno] : "Unknown error code";
			bad_input++;
			fprintf(stderr,"%s: can't read %s: %s\n",myname,name,ptr);

			return;
		}
	}
	while(read_pattern_space()) {
		execute_program(the_program);
		if(!no_default_output)
			ck_fwrite(line.text,1,line.length,stdout);
		if(append.length) {
			ck_fwrite(append.text,1,append.length,stdout);
			append.length=0;
		}
		if(quit_cmd)
			break;
	}
	ck_fclose(input_file);
}

/* Execute the program 'vec' on the current input line. */
void
execute_program(vec)
struct vector *vec;
{
	struct sed_cmd *cur_cmd;
	int	n;
	int addr_matched;
	static int end_cycle;

	int start;
	int remain;
	int offset;

	static struct line tmp;
	struct line t;
	char *rep,*rep_end,*rep_next,*rep_cur;

	struct re_registers regs;
	int count = 0;

	end_cycle = 0;

	for(cur_cmd=vec->v,n=vec->v_length;n;cur_cmd++,n--) {

	exe_loop:
		addr_matched=0;
		if(cur_cmd->aflags&A1_MATCHED_BIT) {
			addr_matched=1;
			if(match_address(&(cur_cmd->a2)))
				cur_cmd->aflags&=~A1_MATCHED_BIT;
		} else if(match_address(&(cur_cmd->a1))) {
			addr_matched=1;
			if(cur_cmd->a2.addr_type!=ADDR_NULL)
				cur_cmd->aflags|=A1_MATCHED_BIT;
		}
		if(cur_cmd->aflags&ADDR_BANG_BIT)
			addr_matched= !addr_matched;
		if(!addr_matched)
			continue;
		switch(cur_cmd->cmd) {
		case '{':	/* Execute sub-program */
			execute_program(cur_cmd->x.sub);
			break;

		case ':':	/* Executing labels is easy. */
			break;

		case '=':
			printf("%d\n",input_line_number);
			break;

		case 'a':
			while(append.alloc-append.length<cur_cmd->x.cmd_txt.text_len) {
				append.alloc *= 2;
				append.text=ck_realloc(append.text,append.alloc);
			}
			bcopy(cur_cmd->x.cmd_txt.text,append.text+append.length,cur_cmd->x.cmd_txt.text_len);
			append.length+=cur_cmd->x.cmd_txt.text_len;
			break;

		case 'b':
			if(!cur_cmd->x.jump)
				end_cycle++;
			else {
				struct sed_label *j = cur_cmd->x.jump;

				n= j->v->v_length - j->v_index;
				cur_cmd= j->v->v + j->v_index;
				goto exe_loop;
			}
			break;

		case 'c':

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91传媒视频在线播放| 精品亚洲成a人| 色综合天天综合网天天狠天天| 久久夜色精品一区| 国产精品乡下勾搭老头1| 国产三级一区二区| 不卡在线观看av| 亚洲精品中文字幕乱码三区| 欧美日韩综合在线| 青青草国产成人av片免费| 欧美精品一区男女天堂| 成人免费高清在线| 亚洲综合在线电影| 3d动漫精品啪啪| 国产精品一区2区| 1000部国产精品成人观看| 日本韩国欧美国产| 久久电影网站中文字幕| 国产欧美日韩中文久久| 日本高清不卡aⅴ免费网站| 首页国产欧美久久| 久久久久久久久久久99999| www.色综合.com| 亚洲成年人影院| 2020国产精品自拍| 色综合激情五月| 蜜臀av在线播放一区二区三区| 精品欧美一区二区三区精品久久| 国产精品白丝jk黑袜喷水| 亚洲视频中文字幕| 日韩欧美一区二区在线视频| 国产白丝网站精品污在线入口| 亚洲美女一区二区三区| 精品区一区二区| 欧美日韩精品一区二区三区蜜桃| 日本系列欧美系列| 欧美激情在线看| 777亚洲妇女| 99久久免费视频.com| 日本欧美一区二区三区乱码| 国产精品三级在线观看| 欧美疯狂性受xxxxx喷水图片| 国产一区 二区 三区一级| 一区二区三区在线视频免费| 精品国产91洋老外米糕| 欧美日韩一本到| 国产一区二区三区久久悠悠色av| 一区二区理论电影在线观看| 久久久国产精品不卡| 欧美日韩一级视频| 97se狠狠狠综合亚洲狠狠| 激情五月播播久久久精品| 一区二区三区在线视频免费观看| 久久色中文字幕| 91精品国产综合久久福利软件| caoporen国产精品视频| 激情综合网最新| 亚洲成人av一区| 亚洲日本va午夜在线影院| 久久精品视频免费| 精品人在线二区三区| 7777精品伊人久久久大香线蕉的 | 亚洲国产精品天堂| 中文字幕中文乱码欧美一区二区| 欧美r级电影在线观看| 欧美在线999| 91在线一区二区| 成人一区二区三区中文字幕| 国内精品伊人久久久久av一坑| 日韩影院精彩在线| 五月天一区二区| 亚洲国产另类av| 亚洲成人你懂的| 亚洲成人动漫精品| 亚洲电影在线免费观看| 伊人一区二区三区| 亚洲一区二区三区影院| 亚洲精品国产a久久久久久| 亚洲免费电影在线| 一区二区三区精品视频| 亚洲最新在线观看| 一区二区三区.www| 夜色激情一区二区| 亚洲mv大片欧洲mv大片精品| 亚洲自拍偷拍网站| 亚洲国产色一区| 一区二区三区蜜桃| 亚洲在线免费播放| 亚洲精品国产视频| 亚洲6080在线| 亚洲二区在线观看| 亚洲欧美乱综合| 久久成人久久爱| 天天综合天天综合色| 亚洲第四色夜色| 国产精品久久久久影院老司| 久久久蜜桃精品| 久久亚洲私人国产精品va媚药| 欧美一级电影网站| 日韩一区二区三区av| 精品奇米国产一区二区三区| 欧美日韩一卡二卡三卡| 91 com成人网| 欧美videos大乳护士334| 精品人伦一区二区色婷婷| 久久综合色综合88| 日韩一区在线免费观看| 亚洲精品久久7777| 一区二区三区波多野结衣在线观看 | 国产一区不卡在线| 国产又黄又大久久| 粉嫩高潮美女一区二区三区| 国产成人丝袜美腿| av一本久道久久综合久久鬼色| 国产成人精品影视| av一区二区三区| 粉嫩久久99精品久久久久久夜| youjizz久久| 欧美日韩中文另类| 日韩欧美中文字幕一区| 国产午夜精品理论片a级大结局 | 91黄视频在线| 这里只有精品免费| 久久这里都是精品| 成人免费视频在线观看| 中文字幕一区二区视频| 日本系列欧美系列| 丁香婷婷深情五月亚洲| 在线视频一区二区三区| 日韩欧美第一区| 国产精品丝袜久久久久久app| 亚洲一区二区三区四区五区中文| 日韩av不卡一区二区| 国产真实精品久久二三区| 国产成人精品三级| 欧美在线视频不卡| 精品欧美一区二区三区精品久久| 国产精品久久三区| 麻豆视频观看网址久久| 成人动漫一区二区三区| 欧美高清www午色夜在线视频| 中文字幕中文乱码欧美一区二区 | 色丁香久综合在线久综合在线观看| 欧美日韩国产在线观看| 久久看人人爽人人| 中文字幕亚洲综合久久菠萝蜜| 久久福利视频一区二区| 91麻豆国产香蕉久久精品| 日韩一区二区三区精品视频| 亚洲色图在线视频| 韩国女主播成人在线| 欧美精品v国产精品v日韩精品 | 欧美午夜在线观看| 国产喷白浆一区二区三区| 亚洲国产一区在线观看| 成人性生交大片免费看中文网站| 欧美精品亚洲一区二区在线播放| 国产精品久久久久久久岛一牛影视| 丝袜亚洲另类欧美综合| 91网站在线播放| 精品乱人伦小说| 五月综合激情日本mⅴ| 成人99免费视频| 国产精品三级av| 蜜桃视频在线观看一区| 欧美私人免费视频| 中文字幕一区二区三区四区不卡| 国产一区二区三区在线观看精品| 欧美一区二区三区视频在线| 亚洲欧美日韩精品久久久久| 国产一区二区不卡| 日韩欧美国产系列| 日本伊人午夜精品| 日韩欧美一二三四区| 一区二区成人在线| 色综合一区二区三区| 日本一区二区三区四区| 国产成人亚洲综合a∨猫咪| 欧美激情在线看| 国产精一品亚洲二区在线视频| 91精品国产综合久久精品app | 99精品视频在线免费观看| 2欧美一区二区三区在线观看视频| 一区二区三区中文在线| 欧美日韩国产电影| 亚洲成a人片综合在线| 欧美日韩激情在线| 亚洲va欧美va人人爽| 欧美日韩在线综合| 日本最新不卡在线| 日韩亚洲欧美在线| 免费不卡在线观看| 日韩精品综合一本久道在线视频| 成人欧美一区二区三区视频网页| 经典三级在线一区| 国产日韩欧美精品综合| 国产盗摄一区二区三区| 欧美高清在线精品一区| 91最新地址在线播放| 五月天亚洲精品|