1: #ifndef lint
2: static char sccsid[] = "@(#)io.c 4.3 3/19/85";
3: #endif
4:
5: #
6: /*
7: * UNIX shell
8: *
9: * S. R. Bourne
10: * Bell Telephone Laboratories
11: *
12: */
13:
14: #include "defs.h"
15:
16:
17: /* ======== input output and file copying ======== */
18:
19: initf(fd)
20: UFD fd;
21: {
22: REG FILE f=standin;
23:
24: f->fdes=fd; f->fsiz=((flags&(oneflg|ttyflg))==0 ? BUFSIZ : 1);
25: f->fnxt=f->fend=f->fbuf; f->feval=0; f->flin=1;
26: f->feof=FALSE;
27: }
28:
29: estabf(s)
30: REG STRING s;
31: {
32: REG FILE f;
33:
34: (f=standin)->fdes = -1;
35: f->fend=length(s)+(f->fnxt=s);
36: f->flin=1;
37: return(f->feof=(s==0));
38: }
39:
40: push(af)
41: FILE af;
42: {
43: REG FILE f;
44:
45: (f=af)->fstak=standin;
46: f->feof=0; f->feval=0;
47: standin=f;
48: }
49:
50: pop()
51: {
52: REG FILE f;
53:
54: IF (f=standin)->fstak
55: THEN IF f->fdes>=0 THEN close(f->fdes) FI
56: standin=f->fstak;
57: return(TRUE);
58: ELSE return(FALSE);
59: FI
60: }
61:
62: chkpipe(pv)
63: INT *pv;
64: {
65: IF pipe(pv)<0 ORF pv[INPIPE]<0 ORF pv[OTPIPE]<0
66: THEN error(piperr);
67: FI
68: }
69:
70: chkopen(idf)
71: STRING idf;
72: {
73: REG INT rc;
74:
75: IF (rc=open(idf,0))<0
76: THEN failed(idf,badopen);
77: ELSE return(rc);
78: FI
79: }
80:
81: rename(f1,f2)
82: REG INT f1, f2;
83: {
84: IF f1!=f2
85: THEN dup2(f1, f2);
86: close(f1);
87: IF f2==0 THEN ioset|=1 FI
88: FI
89: }
90:
91: create(s)
92: STRING s;
93: {
94: REG INT rc;
95:
96: IF (rc=creat(s,0666))<0
97: THEN failed(s,badcreate);
98: ELSE return(rc);
99: FI
100: }
101:
102: tmpfil()
103: {
104: itos(serial++); movstr(numbuf,tmpnam);
105: return(create(tmpout));
106: }
107:
108: /* set by trim */
109: BOOL nosubst;
110:
111: copy(ioparg)
112: IOPTR ioparg;
113: {
114: CHAR c, *ends;
115: REG CHAR *cline, *clinep;
116: INT fd;
117: REG IOPTR iop;
118:
119: IF iop=ioparg
120: THEN copy(iop->iolst);
121: ends=mactrim(iop->ioname); IF nosubst THEN iop->iofile &= ~IODOC FI
122: fd=tmpfil();
123: iop->ioname=cpystak(tmpout);
124: iop->iolst=iotemp; iotemp=iop;
125: cline=locstak();
126:
127: LOOP clinep=cline; chkpr(NL);
128: WHILE (c = (nosubst ? readc() : nextc(*ends)), !eolchar(c)) DO *clinep++ = c OD
129: *clinep=0;
130: IF eof ORF eq(cline,ends) THEN break FI
131: *clinep++=NL;
132: write(fd,cline,clinep-cline);
133: POOL
134: close(fd);
135: FI
136: }
Defined functions
copy
defined in line
111; used 2 times
initf
defined in line
19; used 5 times
pop
defined in line
50; used 6 times
push
defined in line
40; used 5 times
Defined variables
sccsid
defined in line
2;
never used