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 + -
显示快捷键?