get.c

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 1,050 行 · 第 1/2 页

C
1,050
字号
				case INCL:				putc('I',out);				break;			case EXCL:				putc('X',out);				break;			case CUTOFF:				putc('C',out);				break;			default:				putc(' ',out);				break;			}			putc(' ',out);			sid_ba(&dt.d_sid,str);			fprintf(out,"%s\t",str);			date_ba(&dt.d_datetime,str);			fprintf(out,"%s %s\n",str,dt.d_pgmr);		}		while ((n = fgets(line,sizeof(line),in)) != NULL)			if (line[0] != CTLCHAR)				break;			else {				switch (line[1]) {				case EDELTAB:					break;				default:					continue;				case MRNUM:				case COMMENTS:					if (dt.d_type == 'D')						fprintf(out,"\t%s",&line[3]);					continue;				}				break;			}		if (n == NULL || line[0] != CTLCHAR)			break;		putc('\n',out);	}	fclose(in);	if (out != stdout) {		if(ferror(out))			fatal("Unable to write lfile\n");		fclose(out);	}}char	Curdate[18];char	*Curtime;char	Gdate[9];char	Chgdate[18];char	*Chgtime;char	Gchgdate[9];char	Sid[32];char	Mod[16];char	Olddir[BUFSIZ];char	Pname[BUFSIZ];char	Dir[BUFSIZ];char	*Qsect;idsetup(pkt)register struct packet *pkt;{	extern long Timenow;	register int n;	register char *p;	date_ba(&Timenow,Curdate);	Curtime = &Curdate[9];	Curdate[8] = 0;	makgdate(Curdate,Gdate);	for (n = maxser(pkt); n; n--)		if (pkt->p_apply[n].a_code == APPLY)			break;	if (n)		date_ba(&pkt->p_idel[n].i_datetime,Chgdate);	Chgtime = &Chgdate[9];	Chgdate[8] = 0;	makgdate(Chgdate,Gchgdate);	sid_ba(&pkt->p_gotsid,Sid);	if (p = Sflags[MODFLAG - 'a'])		copy(p,Mod);	else		copy(Gfile,Mod);	if (!(Qsect = Sflags[QSECTFLAG - 'a']))		Qsect = Null;}makgdate(old,new)register char *old, *new;{	if ((*new = old[3]) != '0')		new++;	*new++ = old[4];	*new++ = '/';	if ((*new = old[6]) != '0')		new++;	*new++ = old[7];	*new++ = '/';	*new++ = old[0];	*new++ = old[1];	*new = 0;}static char Zkeywd[5] = "@(#)";char *idsubst(pkt,line)register struct packet *pkt;char line[];{	static char tline[BUFSIZ];	static char str[32];	register char *lp, *tp;	char *trans();	extern char *Type;	extern char *Sflags[];	if (HADK || !any('%',line))		return(line);	tp = tline;	for(lp=line; *lp != 0; lp++) {		if(lp[0] == '%' && lp[1] != 0 && lp[2] == '%') {			switch(*++lp) {			case 'M':				tp = trans(tp,Mod);				break;			case 'Q':				tp = trans(tp,Qsect);				break;			case 'R':				sprintf(str,"%u",pkt->p_gotsid.s_rel);				tp = trans(tp,str);				break;			case 'L':				sprintf(str,"%u",pkt->p_gotsid.s_lev);				tp = trans(tp,str);				break;			case 'B':				sprintf(str,"%u",pkt->p_gotsid.s_br);				tp = trans(tp,str);				break;			case 'S':				sprintf(str,"%u",pkt->p_gotsid.s_seq);				tp = trans(tp,str);				break;			case 'D':				tp = trans(tp,Curdate);				break;			case 'H':				tp = trans(tp,Gdate);				break;			case 'T':				tp = trans(tp,Curtime);				break;			case 'E':				tp = trans(tp,Chgdate);				break;			case 'G':				tp = trans(tp,Gchgdate);				break;			case 'U':				tp = trans(tp,Chgtime);				break;			case 'Z':				tp = trans(tp,Zkeywd);				break;			case 'Y':				tp = trans(tp,Type);				break;			case 'W':				tp = trans(tp,Zkeywd);				tp = trans(tp,Mod);				*tp++ = '\t';			case 'I':				tp = trans(tp,Sid);				break;			case 'P':				copy(pkt->p_file,Dir);				dname(Dir);				if(curdir(Olddir) != 0)					fatal("curdir failed (ge20)");				if(chdir(Dir) != 0)					fatal("cannot change directory (ge21)");				if(curdir(Pname) != 0)					fatal("curdir failed (ge20)");				if(chdir(Olddir) != 0)					fatal("cannot change directory (ge21)");				tp = trans(tp,Pname);				*tp++ = '/';				tp = trans(tp,(sname(pkt->p_file)));				break;			case 'F':				tp = trans(tp,pkt->p_file);				break;			case 'C':				sprintf(str,"%u",pkt->p_glnno);				tp = trans(tp,str);				break;			case 'A':				tp = trans(tp,Zkeywd);				tp = trans(tp,Type);				*tp++ = ' ';				tp = trans(tp,Mod);				*tp++ = ' ';				tp = trans(tp,Sid);				tp = trans(tp,Zkeywd);				break;			default:				*tp++ = '%';				*tp++ = *lp;				continue;			}			lp++;		}		else			*tp++ = *lp;	}	*tp = 0;	return(tline);}char *trans(tp,str)register char *tp, *str;{	Did_id = 1;	while(*tp++ = *str++)		;	return(tp-1);}prfx(pkt)register struct packet *pkt;{	char str[32];	if (HADN)		fprintf(pkt->p_gout,"%s\t",Mod);	if (HADM) {		sid_ba(&pkt->p_inssid,str);		fprintf(pkt->p_gout,"%s\t",str);	}	if(ferror(pkt->p_gout))		FAILPUT;}clean_up(n){	/*	clean_up is only called from fatal() upon bad termination.	*/	if (gpkt.p_iop)		fclose(gpkt.p_iop);	if (gpkt.p_gout)		fflush(gpkt.p_gout);	if (gpkt.p_gout && gpkt.p_gout != stdout) {		fclose(gpkt.p_gout);		unlink(Gfile);	}	if (HADE) {		if (! had_pfile) {			unlink(auxf(gpkt.p_file,'p'));		}		else if (exists(auxf(gpkt.p_file,'q'))) {			copy(auxf(gpkt.p_file,'p'),Pfilename);			xrename(auxf(gpkt.p_file,'q'),Pfilename);		     }	}	ffreeall();	unlockit(auxf(gpkt.p_file,'z'),getpid());}static	char	warn[] = "WARNING: being edited: `%s' (ge18)\n";wrtpfile(pkt,inc,exc)register struct packet *pkt;char *inc, *exc;{	char line[64], str1[32], str2[32];	char *user;	FILE *in, *out;	struct pfile pf;	register char *p;	int fd;	int orig_umask;	extern long Timenow;	user = logname();	if (exists(p = auxf(pkt->p_file,'p'))) {		fd = xopen(p,2);		in = fdfopen(fd,0);		while (fgets(line,sizeof(line),in) != NULL) {			p = line;			p[length(p) - 1] = 0;			pf_ab(p,&pf,0);			if (!(Sflags[JOINTFLAG - 'a'])) {				if ((pf.pf_gsid.s_rel == pkt->p_gotsid.s_rel &&     				   pf.pf_gsid.s_lev == pkt->p_gotsid.s_lev &&				   pf.pf_gsid.s_br == pkt->p_gotsid.s_br &&				   pf.pf_gsid.s_seq == pkt->p_gotsid.s_seq) ||				   (pf.pf_nsid.s_rel == pkt->p_reqsid.s_rel &&				   pf.pf_nsid.s_lev == pkt->p_reqsid.s_lev &&				   pf.pf_nsid.s_br == pkt->p_reqsid.s_br &&				   pf.pf_nsid.s_seq == pkt->p_reqsid.s_seq)) {					fclose(in);					sprintf(Error,					     "being edited: `%s' (ge17)",line);					fatal(Error);				}				if (!equal(pf.pf_user,user))					fprintf(stderr,warn,line);			}			else fprintf(stderr,warn,line);		}		out = fdfopen(dup(fd),1);		fclose(in);	}	else	{		orig_umask = umask();		umask(0000);		out = xfcreat(p,0644);		umask(orig_umask);	}	fseek(out,0L,2);	sid_ba(&pkt->p_gotsid,str1);	sid_ba(&pkt->p_reqsid,str2);	date_ba(&Timenow,line);	fprintf(out,"%s %s %s %s",str1,str2,user,line);	if (inc)		fprintf(out," -i%s",inc);	if (exc)		fprintf(out," -x%s",exc);	if (cmrinsert () > 0)	/* if there are CMRS and they are okay */		fprintf (out, " -z%s", cmr);	fprintf(out,"\n");	if(ferror(out) || fclose(out)==EOF)		xmsg(auxf(pkt->p_file, 'p'),  "wrtpfile");	if (pkt->p_verbose)		fprintf(pkt->p_stdout,"new delta %s\n",str2);}getser(pkt)register struct packet *pkt;{	register struct idel *rdp;	int n, ser, def;	char *p;	extern char *Sflags[];	def = 0;	if (pkt->p_reqsid.s_rel == 0) {		if (p = Sflags[DEFTFLAG - 'a'])			chksid(sid_ab(p, &pkt->p_reqsid), &pkt->p_reqsid);		else {			pkt->p_reqsid.s_rel = MAX;			def = 1;		}	}	ser = 0;	if (pkt->p_reqsid.s_lev == 0) {		for (n = maxser(pkt); n; n--) {			rdp = &pkt->p_idel[n];			if ((rdp->i_sid.s_br == 0 || HADT) &&				pkt->p_reqsid.s_rel >= rdp->i_sid.s_rel &&				rdp->i_sid.s_rel > pkt->p_gotsid.s_rel) {					ser = n;					pkt->p_gotsid.s_rel = rdp->i_sid.s_rel;			}		}	}	/*	 * If had '-t' keyletter and R.L SID type, find	 * the youngest SID	*/	else if ((pkt->p_reqsid.s_br == 0) && HADT) {		for (n = maxser(pkt); n; n--) {			rdp = &pkt->p_idel[n];			if (rdp->i_sid.s_rel == pkt->p_reqsid.s_rel &&			    rdp->i_sid.s_lev == pkt->p_reqsid.s_lev )				break;		}		ser = n;	}	else if (pkt->p_reqsid.s_br && pkt->p_reqsid.s_seq == 0) {		for (n = maxser(pkt); n; n--) {			rdp = &pkt->p_idel[n];			if (rdp->i_sid.s_rel == pkt->p_reqsid.s_rel &&				rdp->i_sid.s_lev == pkt->p_reqsid.s_lev &&				rdp->i_sid.s_br == pkt->p_reqsid.s_br)					break;		}		ser = n;	}	else {		ser = sidtoser(&pkt->p_reqsid,pkt);	}	if (ser == 0)		fatal("nonexistent sid (ge5)");	rdp = &pkt->p_idel[ser];	pkt->p_gotsid = rdp->i_sid;	if (def || (pkt->p_reqsid.s_lev == 0 && pkt->p_reqsid.s_rel == pkt->p_gotsid.s_rel))		pkt->p_reqsid = pkt->p_gotsid;	return(ser);}/* Null routine to satisfy external reference from dodelt() */escdodelt(){}/* NULL routine to satisfy external reference from dodelt() */fredck(){}in_pfile(sp,pkt)struct	sid	*sp;struct	packet	*pkt;{	struct	pfile	pf;	char	line[BUFSIZ];	char	*p;	FILE	*in;	if (Sflags[JOINTFLAG - 'a']) {		if (exists(auxf(pkt->p_file,'p'))) {			in = xfopen(auxf(pkt->p_file,'p'),0);			while ((p = fgets(line,sizeof(line),in)) != NULL) {				p[length(p) - 1] = 0;				pf_ab(p,&pf,0);				if (pf.pf_nsid.s_rel == sp->s_rel &&					pf.pf_nsid.s_lev == sp->s_lev &&					pf.pf_nsid.s_br == sp->s_br &&					pf.pf_nsid.s_seq == sp->s_seq) {						fclose(in);						return(1);				}			}			fclose(in);		}		else return(0);	}	else return(0);}mk_qfile(pkt)register struct	packet *pkt;{	FILE	*in, *qout;	char	line[BUFSIZ];	in = xfopen(auxf(pkt->p_file,'p'),0);	qout = xfcreat(auxf(pkt->p_file,'q'),0644);	while ((fgets(line,sizeof(line),in) != NULL)) {		fputs(line,qout);		if(ferror(qout))			FAILPUT;	}	fclose(in);	if(fclose(qout)==EOF)		FAILPUT;}/* cmrinsert -- insert CMR numbers in the p.file. */cmrinsert (){	extern char *strrchr (), *Sflags[];	extern int	cmrcheck ();	if (Sflags[CMFFLAG - 'a'] == 0)		/* CMFFLAG was not set. */		return (0);	if ( HADP && ( ! HADZ))	/* no CMFFLAG and no place to prompt. */		fatal("Background CASSI get with no CMRs\n");retry:	if (cmr[0] == NULL) {					/* No CMR list.  Make one. */		if(HADZ && ((!isatty(0)) || (!isatty(1))))		{			fatal("Background CASSI get with invalid CMR\n");		}		fprintf (stdout, "Input Comma Separated List of CMRs: ");		fgets (cmr, CMRLIMIT, stdin);		for (cmri = 0; cmri < CMRLIMIT; cmri++)			if (cmr[cmri] == '\n') {				cmr[cmri] = NULL;				break;				}		if (cmri == CMRLIMIT) {			fprintf (stdout, "?Too many CMRs.\n");			cmr[0] = NULL;			goto retry;					/* Entry was too long. */			}		}	/* Now, check the comma seperated list of CMRs for accuracy. */	if (cmrcheck (cmr, Sflags[CMFFLAG - 'a']) != 0) {		cmr[0] = NULL;		goto retry;		}	else		return (1);}

⌨️ 快捷键说明

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