1: #ifndef lint
2: static char *rcsid =
3: "$Header: fpipe.c,v 1.3 85/05/22 07:53:41 sklower Exp $";
4: #endif
5:
6:
7: /* -[Sat Jan 29 12:44:16 1983 by jkf]-
8: * fpipe.c $Locker: $
9: * pipe creation
10: *
11: * (c) copyright 1982, Regents of the University of California
12: */
13:
14:
15: #include "global.h"
16: #include <signal.h>
17:
18: FILE *fpipe(info)
19: FILE *info[2];
20: {
21: register FILE *p;
22: int fd[2];
23:
24: if(0 > pipe(fd)) return( (FILE *) -1);
25:
26: if(NULL==(p = fdopen(fd[0],"r"))) {
27: close(fd[0]);
28: close(fd[1]);
29: return( (FILE *) -1);
30: }
31: info[0] = p;
32: if(NULL==(p = fdopen(fd[1],"w"))) {
33: close(fd[0]);
34: close(fd[1]);
35: return( (FILE *) -1);
36: }
37: info[1] = p;
38:
39: return((FILE *) 2); /*indicate sucess*/
40: }
41: /* Nioreset *************************************************************/
42:
43: lispval
44: Nioreset() {
45: #ifndef RTPORTS
46: register FILE *p;
47:
48: for(p = &_iob[3]; p < _iob + _NFILE; p++) {
49: if(p->_flag & (_IOWRT | _IOREAD)) fclose(p);
50: }
51: #else RTPORTS
52: lispval NiorUtil();
53:
54: _fwalk(NiorUtil);
55: #endif RTPORTS
56: return(nil);
57: }
58:
59: #ifdef RTPORTS
60: FILE FILEdummy;
61:
62: static lispval
63: NiorUtil(p)
64: FILE *p;
65: {
66: lispval handy;
67: if(p==stdin||p==stdout||p==stderr)
68: return(0);
69: fclose(p);
70: handy = P(p);
71: if(TYPE(handy)==PORT) {
72: handy->p = &FILEdummy;
73: }
74: return(nil);
75: }
76: FILE **xports;
77:
78: #define LOTS (LBPG/(sizeof (FILE *)))
79: lispval P(p)
80: FILE *p;
81: {
82: register FILE **q;
83: extern int fakettsize;
84:
85: if(xports==((FILE **) 0)) {
86: /* this is gross. I don't want to change csegment -- kls */
87: xports = (FILE **) csegment(OTHER,LOTS,0);
88: SETTYPE(xports,PORT,31);
89: for(q = xports; q < xports + LOTS; q++) {
90: *q = &FILEdummy;
91: }
92: }
93: for(q = xports; q < xports + LOTS; q++) {
94: if(*q==p) return ((lispval)q);
95: if(*q==&FILEdummy) {
96: *q = p;
97: return ((lispval)q);
98: }
99: }
100: /* Heavens above knows this could be disasterous in makevals() */
101: error("Ran out of Ports",FALSE);
102: }
103:
104: #endif RTPORTS
105:
106: FILE *
107: fstopen(base,count,flag)
108: char *base;
109: char *flag;
110: {
111: register FILE *p = fdopen(0,flag);
112:
113: p->_flag |= _IOSTRG;
114: p->_cnt = count;
115: p->_ptr = p->_base = base;
116: p->_file = -1;
117: return(p);
118: }
119:
120: #ifdef SPISFP
121: char *
122: alloca(howmuch)
123: register int howmuch;
124: {
125: howmuch += 3 ;
126: howmuch >>= 2;
127: xsp -= howmuch;
128: if (xsp < xstack) {
129: xsp += howmuch;
130: xserr();
131: }
132: return((char *) xsp);
133: }
134: #endif
Defined functions
P
defined in line
79; used 21 times
alloca
defined in line
121; used 17 times
- in /usr/src/ucb/lisp/franz/divbig.c line
23,
79
- in /usr/src/ucb/lisp/franz/eval2.c line
67,
86,
143
- in /usr/src/ucb/lisp/franz/fasl.c line
97,
314,
433
- in /usr/src/ucb/lisp/franz/ffasl.c line
391,
469,
523
- in /usr/src/ucb/lisp/franz/lam5.c line
36,
142
- in /usr/src/ucb/lisp/franz/lam6.c line
27,
47
- in /usr/src/ucb/lisp/franz/pbignum.c line
20,
38
fpipe
defined in line
18; used 3 times
Defined variables
rcsid
defined in line
2;
never used
Defined macros
LOTS
defined in line
78; used 3 times