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

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

?? sam.c

?? 這是一個同樣來自貝爾實驗室的和UNIX有著淵源的操作系統, 其簡潔的設計和實現易于我們學習和理解
?? C
字號:
#include "sam.h"Rune	genbuf[BLOCKSIZE];int	io;int	panicking;int	rescuing;String	genstr;String	rhs;String	curwd;String	cmdstr;Rune	empty[] = { 0 };char	*genc;File	*curfile;File	*flist;File	*cmd;jmp_buf	mainloop;List	tempfile = { 'p' };int	quitok = TRUE;int	downloaded;int	dflag;int	Rflag;char	*machine;char	*home;int	bpipeok;int	termlocked;char	*samterm = SAMTERM;char	*rsamname = RSAM;File	*lastfile;Disk	*disk;long	seq;Rune	baddir[] = { '<', 'b', 'a', 'd', 'd', 'i', 'r', '>', '\n'};void	usage(void);void main(int argc, char *argv[]){	int i;	String *t;	char *termargs[10], **ap;		ap = termargs;	*ap++ = "samterm";	ARGBEGIN{	case 'd':		dflag++;		break;	case 'r':		machine = EARGF(usage());		break;	case 'R':		Rflag++;		break;	case 't':		samterm = EARGF(usage());		break;	case 's':		rsamname = EARGF(usage());		break;	default:		dprint("sam: unknown flag %c\n", ARGC());		usage();	/* options for samterm */	case 'a':		*ap++ = "-a";		break;	}ARGEND	*ap = nil;		Strinit(&cmdstr);	Strinit0(&lastpat);	Strinit0(&lastregexp);	Strinit0(&genstr);	Strinit0(&rhs);	Strinit0(&curwd);	Strinit0(&plan9cmd);	home = getenv(HOME);	disk = diskinit();	if(home == 0)		home = "/";	if(!dflag)		startup(machine, Rflag, termargs, argv);	notify(notifyf);	getcurwd();	if(argc>0){		for(i=0; i<argc; i++){			if(!setjmp(mainloop)){				t = tmpcstr(argv[i]);				Straddc(t, '\0');				Strduplstr(&genstr, t);				freetmpstr(t);				fixname(&genstr);				logsetname(newfile(), &genstr);			}		}	}else if(!downloaded)		newfile();	seq++;	if(file.nused)		current(file.filepptr[0]);	setjmp(mainloop);	cmdloop();	trytoquit();	/* if we already q'ed, quitok will be TRUE */	exits(0);}voidusage(void){	dprint("usage: sam [-d] [-t samterm] [-s sam name] -r machine\n");	exits("usage");}voidrescue(void){	int i, nblank = 0;	File *f;	char *c;	char buf[256];	if(rescuing++)		return;	io = -1;	for(i=0; i<file.nused; i++){		f = file.filepptr[i];		if(f==cmd || f->nc==0 || !fileisdirty(f))			continue;		if(io == -1){			sprint(buf, "%s/sam.save", home);			io = create(buf, 1, 0777);			if(io<0)				return;		}		if(f->name.s[0]){			c = Strtoc(&f->name);			strncpy(buf, c, sizeof buf-1);			buf[sizeof buf-1] = 0;			free(c);		}else			sprint(buf, "nameless.%d", nblank++);		fprint(io, "#!%s '%s' $* <<'---%s'\n", SAMSAVECMD, buf, buf);		addr.r.p1 = 0, addr.r.p2 = f->nc;		writeio(f);		fprint(io, "\n---%s\n", (char *)buf);	}}voidpanic(char *s){	int wasd;	if(!panicking++ && !setjmp(mainloop)){		wasd = downloaded;		downloaded = 0;		dprint("sam: panic: %s: %r\n", s);		if(wasd)			fprint(2, "sam: panic: %s: %r\n", s);		rescue();		abort();	}}voidhiccough(char *s){	File *f;	int i;	if(rescuing)		exits("rescue");	if(s)		dprint("%s\n", s);	resetcmd();	resetxec();	resetsys();	if(io > 0)		close(io);	/*	 * back out any logged changes & restore old sequences	 */	for(i=0; i<file.nused; i++){		f = file.filepptr[i];		if(f==cmd)			continue;		if(f->seq==seq){			bufdelete(&f->epsilon, 0, f->epsilon.nc);			f->seq = f->prevseq;			f->dot.r = f->prevdot;			f->mark = f->prevmark;			state(f, f->prevmod ? Dirty: Clean);		}	}	update();	if (curfile) {		if (curfile->unread)			curfile->unread = FALSE;		else if (downloaded)			outTs(Hcurrent, curfile->tag);	}	longjmp(mainloop, 1);}voidintr(void){	error(Eintr);}voidtrytoclose(File *f){	char *t;	char buf[256];	if(f == cmd)	/* possible? */		return;	if(f->deleted)		return;	if(fileisdirty(f) && !f->closeok){		f->closeok = TRUE;		if(f->name.s[0]){			t = Strtoc(&f->name);			strncpy(buf, t, sizeof buf-1);			free(t);		}else			strcpy(buf, "nameless file");		error_s(Emodified, buf);	}	f->deleted = TRUE;}voidtrytoquit(void){	int c;	File *f;	if(!quitok){		for(c = 0; c<file.nused; c++){			f = file.filepptr[c];			if(f!=cmd && fileisdirty(f)){				quitok = TRUE;				eof = FALSE;				error(Echanges);			}		}	}}voidload(File *f){	Address saveaddr;	Strduplstr(&genstr, &f->name);	filename(f);	if(f->name.s[0]){		saveaddr = addr;		edit(f, 'I');		addr = saveaddr;	}else{		f->unread = 0;		f->cleanseq = f->seq;	}	fileupdate(f, TRUE, TRUE);}voidcmdupdate(void){	if(cmd && cmd->seq!=0){		fileupdate(cmd, FALSE, downloaded);		cmd->dot.r.p1 = cmd->dot.r.p2 = cmd->nc;		telldot(cmd);	}}voiddelete(File *f){	if(downloaded && f->rasp)		outTs(Hclose, f->tag);	delfile(f);	if(f == curfile)		current(0);}voidupdate(void){	int i, anymod;	File *f;	settempfile();	for(anymod = i=0; i<tempfile.nused; i++){		f = tempfile.filepptr[i];		if(f==cmd)	/* cmd gets done in main() */			continue;		if(f->deleted) {			delete(f);			continue;		}		if(f->seq==seq && fileupdate(f, FALSE, downloaded))			anymod++;		if(f->rasp)			telldot(f);	}	if(anymod)		seq++;}File *current(File *f){	return curfile = f;}voidedit(File *f, int cmd){	int empty = TRUE;	Posn p;	int nulls;	if(cmd == 'r')		logdelete(f, addr.r.p1, addr.r.p2);	if(cmd=='e' || cmd=='I'){		logdelete(f, (Posn)0, f->nc);		addr.r.p2 = f->nc;	}else if(f->nc!=0 || (f->name.s[0] && Strcmp(&genstr, &f->name)!=0))		empty = FALSE;	if((io = open(genc, OREAD))<0) {		if (curfile && curfile->unread)			curfile->unread = FALSE;		error_r(Eopen, genc);	}	p = readio(f, &nulls, empty, TRUE);	closeio((cmd=='e' || cmd=='I')? -1 : p);	if(cmd == 'r')		f->ndot.r.p1 = addr.r.p2, f->ndot.r.p2 = addr.r.p2+p;	else		f->ndot.r.p1 = f->ndot.r.p2 = 0;	f->closeok = empty;	if (quitok)		quitok = empty;	else		quitok = FALSE;	state(f, empty && !nulls? Clean : Dirty);	if(empty && !nulls)		f->cleanseq = f->seq;	if(cmd == 'e')		filename(f);}intgetname(File *f, String *s, int save){	int c, i;	Strzero(&genstr);	if(genc){		free(genc);		genc = 0;	}	if(s==0 || (c = s->s[0])==0){		/* no name provided */		if(f)			Strduplstr(&genstr, &f->name);		goto Return;	}	if(c!=' ' && c!='\t')		error(Eblank);	for(i=0; (c=s->s[i])==' ' || c=='\t'; i++)		;	while(s->s[i] > ' ')		Straddc(&genstr, s->s[i++]);	if(s->s[i])		error(Enewline);	fixname(&genstr);	if(f && (save || f->name.s[0]==0)){		logsetname(f, &genstr);		if(Strcmp(&f->name, &genstr)){			quitok = f->closeok = FALSE;			f->qidpath = 0;			f->mtime = 0;			state(f, Dirty); /* if it's 'e', fix later */		}	}    Return:	genc = Strtoc(&genstr);	i = genstr.n;	if(i && genstr.s[i-1]==0)		i--;	return i;	/* strlen(name) */}voidfilename(File *f){	if(genc)		free(genc);	genc = Strtoc(&genstr);	dprint("%c%c%c %s\n", " '"[f->mod],		"-+"[f->rasp!=0], " ."[f==curfile], genc);}voidundostep(File *f, int isundo){	uint p1, p2;	int mod;	mod = f->mod;	fileundo(f, isundo, 1, &p1, &p2, TRUE);	f->ndot = f->dot;	if(f->mod){		f->closeok = 0;		quitok = 0;	}else		f->closeok = 1;	if(f->mod != mod){		f->mod = mod;		if(mod)			mod = Clean;		else			mod = Dirty;		state(f, mod);	}}intundo(int isundo){	File *f;	int i;	Mod max;	max = undoseq(curfile, isundo);	if(max == 0)		return 0;	settempfile();	for(i = 0; i<tempfile.nused; i++){		f = tempfile.filepptr[i];		if(f!=cmd && undoseq(f, isundo)==max)			undostep(f, isundo);	}	return 1;}intreadcmd(String *s){	int retcode;	if(flist != 0)		fileclose(flist);	flist = fileopen();	addr.r.p1 = 0, addr.r.p2 = flist->nc;	retcode = plan9(flist, '<', s, FALSE);	fileupdate(flist, FALSE, FALSE);	flist->seq = 0;	if (flist->nc > BLOCKSIZE)		error(Etoolong);	Strzero(&genstr);	Strinsure(&genstr, flist->nc);	bufread(flist, (Posn)0, genbuf, flist->nc);	memmove(genstr.s, genbuf, flist->nc*RUNESIZE);	genstr.n = flist->nc;	Straddc(&genstr, '\0');	return retcode;}voidgetcurwd(void){	String *t;	char buf[256];	buf[0] = 0;	getwd(buf, sizeof(buf));	t = tmpcstr(buf);	Strduplstr(&curwd, t);	freetmpstr(t);	if(curwd.n == 0)		warn(Wpwd);	else if(curwd.s[curwd.n-1] != '/')		Straddc(&curwd, '/');}voidcd(String *str){	int i, fd;	char *s;	File *f;	String owd;	getcurwd();	if(getname((File *)0, str, FALSE))		s = genc;	else		s = home;	if(chdir(s))		syserror("chdir");	fd = open("/dev/wdir", OWRITE);	if(fd > 0)		write(fd, s, strlen(s));	dprint("!\n");	Strinit(&owd);	Strduplstr(&owd, &curwd);	getcurwd();	settempfile();	for(i=0; i<tempfile.nused; i++){		f = tempfile.filepptr[i];		if(f!=cmd && f->name.s[0]!='/' && f->name.s[0]!=0){			Strinsert(&f->name, &owd, (Posn)0);			fixname(&f->name);			sortname(f);		}else if(f != cmd && Strispre(&curwd, &f->name)){			fixname(&f->name);			sortname(f);		}	}	Strclose(&owd);}intloadflist(String *s){	int c, i;	c = s->s[0];	for(i = 0; s->s[i]==' ' || s->s[i]=='\t'; i++)		;	if((c==' ' || c=='\t') && s->s[i]!='\n'){		if(s->s[i]=='<'){			Strdelete(s, 0L, (long)i+1);			readcmd(s);		}else{			Strzero(&genstr);			while((c = s->s[i++]) && c!='\n')				Straddc(&genstr, c);			Straddc(&genstr, '\0');		}	}else{		if(c != '\n')			error(Eblank);		Strdupl(&genstr, empty);	}	if(genc)		free(genc);	genc = Strtoc(&genstr);	return genstr.s[0];}File *readflist(int readall, int delete){	Posn i;	int c;	File *f;	String t;	Strinit(&t);	for(i=0,f=0; f==0 || readall || delete; i++){	/* ++ skips blank */		Strdelete(&genstr, (Posn)0, i);		for(i=0; (c = genstr.s[i])==' ' || c=='\t' || c=='\n'; i++)			;		if(i >= genstr.n)			break;		Strdelete(&genstr, (Posn)0, i);		for(i=0; (c=genstr.s[i]) && c!=' ' && c!='\t' && c!='\n'; i++)			;		if(i == 0)			break;		genstr.s[i] = 0;		Strduplstr(&t, tmprstr(genstr.s, i+1));		fixname(&t);		f = lookfile(&t);		if(delete){			if(f == 0)				warn_S(Wfile, &t);			else				trytoclose(f);		}else if(f==0 && readall)			logsetname(f = newfile(), &t);	}	Strclose(&t);	return f;}File *tofile(String *s){	File *f;	if(s->s[0] != ' ')		error(Eblank);	if(loadflist(s) == 0){		f = lookfile(&genstr);	/* empty string ==> nameless file */		if(f == 0)			error_s(Emenu, genc);	}else if((f=readflist(FALSE, FALSE)) == 0)		error_s(Emenu, genc);	return current(f);}File *getfile(String *s){	File *f;	if(loadflist(s) == 0)		logsetname(f = newfile(), &genstr);	else if((f=readflist(TRUE, FALSE)) == 0)		error(Eblank);	return current(f);}voidclosefiles(File *f, String *s){	if(s->s[0] == 0){		if(f == 0)			error(Enofile);		trytoclose(f);		return;	}	if(s->s[0] != ' ')		error(Eblank);	if(loadflist(s) == 0)		error(Enewline);	readflist(FALSE, TRUE);}voidcopy(File *f, Address addr2){	Posn p;	int ni;	for(p=addr.r.p1; p<addr.r.p2; p+=ni){		ni = addr.r.p2-p;		if(ni > BLOCKSIZE)			ni = BLOCKSIZE;		bufread(f, p, genbuf, ni);		loginsert(addr2.f, addr2.r.p2, tmprstr(genbuf, ni)->s, ni);	}	addr2.f->ndot.r.p2 = addr2.r.p2+(f->dot.r.p2-f->dot.r.p1);	addr2.f->ndot.r.p1 = addr2.r.p2;}voidmove(File *f, Address addr2){	if(addr.r.p2 <= addr2.r.p2){		logdelete(f, addr.r.p1, addr.r.p2);		copy(f, addr2);	}else if(addr.r.p1 >= addr2.r.p2){		copy(f, addr2);		logdelete(f, addr.r.p1, addr.r.p2);	}else		error(Eoverlap);}Posnnlcount(File *f, Posn p0, Posn p1){	Posn nl = 0;	while(p0 < p1)		if(filereadc(f, p0++)=='\n')			nl++;	return nl;}voidprintposn(File *f, int charsonly){	Posn l1, l2;	if(!charsonly){		l1 = 1+nlcount(f, (Posn)0, addr.r.p1);		l2 = l1+nlcount(f, addr.r.p1, addr.r.p2);		/* check if addr ends with '\n' */		if(addr.r.p2>0 && addr.r.p2>addr.r.p1 && filereadc(f, addr.r.p2-1)=='\n')			--l2;		dprint("%lud", l1);		if(l2 != l1)			dprint(",%lud", l2);		dprint("; ");	}	dprint("#%lud", addr.r.p1);	if(addr.r.p2 != addr.r.p1)		dprint(",#%lud", addr.r.p2);	dprint("\n");}voidsettempfile(void){	if(tempfile.nalloc < file.nused){		if(tempfile.filepptr)			free(tempfile.filepptr);		tempfile.filepptr = emalloc(sizeof(File*)*file.nused);		tempfile.nalloc = file.nused;	}	memmove(tempfile.filepptr, file.filepptr, sizeof(File*)*file.nused);	tempfile.nused = file.nused;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av不卡在线观看| 国产欧美一区二区在线观看| 精品国内二区三区| 亚洲男人的天堂av| 精品综合免费视频观看| 色综合色狠狠天天综合色| 日韩一卡二卡三卡国产欧美| 亚洲手机成人高清视频| 激情五月婷婷综合| 337p亚洲精品色噜噜| 一区二区三区在线观看欧美| 国产精品中文字幕日韩精品| 3d成人动漫网站| 亚洲主播在线观看| 91视频一区二区三区| 国产日韩欧美综合在线| 老司机精品视频一区二区三区| 欧美性xxxxxx少妇| 亚洲美女屁股眼交| www.视频一区| 国产亲近乱来精品视频| 国内精品写真在线观看| 欧美刺激午夜性久久久久久久| 亚洲电影一区二区三区| 在线免费观看视频一区| 最近中文字幕一区二区三区| 99精品欧美一区| 国产精品夫妻自拍| 99在线热播精品免费| 亚洲国产精品精华液ab| 国产传媒欧美日韩成人| 久久午夜羞羞影院免费观看| 精品亚洲国产成人av制服丝袜| 日韩一区二区精品| 老司机午夜精品99久久| 精品精品欲导航| 国产一区二区三区观看| 久久久久久久一区| 国产99久久久久| 中文字幕一区二区三区四区| 99精品欧美一区| 亚洲综合无码一区二区| 欧美亚洲国产怡红院影院| 亚洲成人激情自拍| 91精品国产综合久久精品app| 日韩精品亚洲专区| 日韩一级免费一区| 国产精品一区二区在线看| 久久久av毛片精品| 成人黄色免费短视频| 亚洲图片激情小说| 欧美色国产精品| 蜜桃久久av一区| 国产欧美一区二区三区在线老狼 | 欧美va亚洲va在线观看蝴蝶网| 日韩电影免费一区| xf在线a精品一区二区视频网站| 国产精品1区2区3区在线观看| 国产精品欧美一级免费| 一本大道久久a久久精二百| 午夜激情一区二区三区| 精品电影一区二区三区| 91网站最新网址| 日韩成人伦理电影在线观看| 久久久久国产成人精品亚洲午夜| 91在线一区二区三区| 午夜电影一区二区三区| 国产亚洲欧美日韩在线一区| 91国产福利在线| 久久精品国产99国产精品| 国产欧美精品在线观看| 欧美日韩国产经典色站一区二区三区| 麻豆精品国产91久久久久久| 国产精品超碰97尤物18| 69久久99精品久久久久婷婷| 成人av网站在线| 日韩电影免费一区| 亚洲美腿欧美偷拍| 精品福利一二区| 欧美日韩在线播| 国产成人av电影| 五月天激情小说综合| 欧美激情资源网| 91精品国产手机| 欧美在线高清视频| 成人av电影免费观看| 美国十次综合导航| 亚洲二区在线视频| 亚洲人妖av一区二区| 国产亚洲午夜高清国产拍精品| 欧美日韩在线播放三区| 91美女片黄在线观看91美女| 国产中文字幕精品| 裸体一区二区三区| 亚洲一区二区三区中文字幕| 国产精品不卡一区| 国产午夜精品一区二区| 精品三级在线看| 91精品久久久久久久99蜜桃 | 欧美精品少妇一区二区三区| 99久久夜色精品国产网站| 国产一区二区在线看| 日本中文字幕一区二区有限公司| 一区二区三区自拍| 亚洲人成网站色在线观看| 国产精品久久久久国产精品日日| 久久综合九色综合97婷婷| 日韩欧美中文字幕一区| 欧美一区二区在线播放| 欧美日韩国产小视频| 欧美日韩国产首页在线观看| 欧美亚洲综合另类| 欧美日韩亚洲综合| 欧美日韩国产在线观看| 欧美日韩国产三级| 精品视频在线免费观看| 欧美男生操女生| 7777精品久久久大香线蕉| 91麻豆精品国产自产在线| 欧美午夜在线观看| 91精品在线一区二区| 欧美一区二区人人喊爽| 精品日韩欧美一区二区| 26uuu国产一区二区三区| 久久久三级国产网站| 久久亚洲影视婷婷| 国产精品青草久久| 亚洲精品视频自拍| 视频一区二区不卡| 久久精品久久精品| 国产精品18久久久久久vr| 成人av网站在线观看免费| 色婷婷精品大视频在线蜜桃视频| 欧美最猛性xxxxx直播| 欧美精品tushy高清| 精品免费视频.| 中文字幕免费不卡| 一区二区三区成人在线视频 | 亚洲日本va午夜在线电影| 依依成人综合视频| 日韩国产欧美在线播放| 国产成人精品免费网站| 91色.com| 欧美va亚洲va在线观看蝴蝶网| 日本一区二区成人在线| 亚洲午夜久久久久久久久电影院| 日本中文一区二区三区| 国产精品中文有码| 欧美制服丝袜第一页| 欧美一级午夜免费电影| 国产精品久久网站| 日韩av一区二区在线影视| 国产成人aaaa| 欧美日韩国产精品成人| 国产精品网曝门| 天堂资源在线中文精品| 国产不卡视频在线观看| 欧美日韩电影一区| 国产精品久久久久aaaa| 日韩国产欧美在线观看| 99久久国产免费看| 精品日本一线二线三线不卡| 亚洲男人天堂av网| 国产高清不卡二三区| 欧美军同video69gay| 国产精品美女久久久久av爽李琼| 日本中文一区二区三区| 色婷婷久久久综合中文字幕| 久久久午夜电影| 久久国产夜色精品鲁鲁99| 欧美在线小视频| 国产精品久久精品日日| 国产美女精品在线| 91精品国产综合久久精品图片 | 午夜欧美视频在线观看| 不卡av免费在线观看| 精品av久久707| 玖玖九九国产精品| 欧美性生活大片视频| 亚洲视频一二三区| 国产98色在线|日韩| 精品国产伦一区二区三区观看体验 | 久久精品亚洲国产奇米99| 无吗不卡中文字幕| 在线免费不卡电影| 国产精品第一页第二页第三页| 国产精品亚洲人在线观看| 欧美一级午夜免费电影| 亚洲bdsm女犯bdsm网站| 91精品1区2区| 亚洲天堂av一区| 波多野结衣在线一区| 日本一区二区三级电影在线观看 | 精品一区二区三区免费播放| 欧美久久久久久久久| 亚洲第一电影网| 欧美日韩成人激情| 一区二区三区色| 欧美日韩亚洲综合在线| 亚洲成av人影院|