1: static char Sccsid[] = "a9.c @(#)a9.c 1.4 10/1/82 Berkeley ";
2: #include "apl.h"
3: #include <math.h>
4:
5: ex_dibm()
6: {
7: register j, arg;
8: register struct item *p;
9:
10: /* Dyadic i-beam functions. I-beam 63 assumes that the
11: * "empty" system call (check whether pipe empty) has been
12: * implemented in the Unix kernel.
13: */
14:
15: arg = topfix(); /* Get left argument */
16:
17: switch(topfix()) {
18:
19: default:
20: error("unknown i-beam");
21:
22: case 29: /* Set origin, return old one */
23: datum = thread.iorg;
24: thread.iorg = arg;
25: break;
26:
27: case 30: /* Set width, return old one */
28: datum = thread.width;
29: thread.width = arg;
30: break;
31:
32: case 31: /* Set number of digits, return old one */
33: datum = thread.digits;
34: thread.digits = arg;
35: break;
36:
37: case 34: /* "Nice" system call */
38: datum = nice(arg);
39: break;
40:
41: case 35: /* "Sleep" system call */
42: datum = sleep(arg);
43: break;
44:
45: case 38: /* Sets random seed */
46: datum = thread.rl;
47: thread.rl = arg;
48: srand((int) arg);
49: break;
50:
51:
52: case 63: /* "Empty" system call */
53: datum = empty(arg);
54: break;
55:
56: case 90: /* Enable/disable exit with ")off" only */
57: datum = offexit;
58: arg = !!arg;
59: offexit = arg ? isatty(0) : arg;
60: break;
61:
62: case 99: /* Buffer flush */
63: /* Warning -- information is lost if an input pipe
64: * file descriptor is flushed. No checking is
65: * made for this i-beam function!!
66: */
67: #ifdef NBUF
68: datum = newbuf(-1, arg);
69: #else
70: datum = zero; /* No-op if unbuffered */
71: #endif
72: break;
73:
74: }
75:
76: p = newdat(DA, 0, 1);
77: p->datap[0] = datum;
78: *sp++ = p;
79:
80: }
81:
82: int afnfree, afnused;
83:
84:
85: ex_mibm()
86: {
87: struct tm *tp, *localtime();
88: struct si *gp;
89: register struct item *p;
90: register struct nlist *np;
91: register i;
92: long tvec;
93: struct {
94: long proc_user_time;
95: long proc_system_time;
96: long child_user_time;
97: long child_system_time;
98: } t;
99:
100: switch(topfix()) {
101:
102: default:
103: error("unknown i-beam");
104:
105: case 20: /* time of day */
106: time(&tvec);
107: goto tod;
108:
109: case 21: /* CPU time */
110: times(&t);
111: datum = t.proc_user_time+t.proc_system_time;
112: break;
113:
114: case 22: /* ws bytes unused */
115: datum = afnfree;
116: break;
117:
118: case 24: /* starting time */
119: tvec = stime;
120:
121: tod:
122: tp = localtime(&tvec);
123: datum = 60.*(tp->tm_sec+60.*(tp->tm_min+60.*tp->tm_hour));
124: break;
125:
126: case 25: /* date */
127: time(&tvec);
128: goto dt;
129:
130: case 26: /* current line */
131: datum = (gsip ? gsip->funlc - 1 : 0);
132: break;
133:
134: case 27: /* vector of line numbers of fn activations # */
135: i = 0;
136: gp = gsip;
137: while(gp){
138: if(gp->np)
139: i++;
140: gp = gp->sip;
141: }
142: p = newdat(DA, 1, i);
143: gp = gsip;
144: i = 0;
145: while(gp){
146: if(gp->np);
147: p->datap[i++] = gp->funlc - 1;
148: gp = gp->sip;
149: }
150: *sp++ = p;
151: return;
152:
153: /*
154: * non standard I functions
155: */
156:
157: case 28: /* starting date */
158: tvec = stime;
159:
160: dt:
161: tp = localtime(&tvec);
162: datum = tp->tm_year+100.*(tp->tm_mday+100.*(tp->tm_mon+1));
163: break;
164:
165: case 29: /* iorg */
166: datum = thread.iorg;
167: break;
168:
169: case 30: /* width */
170: datum = thread.width;
171: break;
172:
173: case 31: /* digits */
174: datum = thread.digits;
175: break;
176:
177: case 32: /* ws bytes in use */
178: datum = afnused;
179: break;
180:
181: case 36: /* 2nd element of ib27 */
182: datum = ((gsip && gsip->sip) ? gsip->sip->funlc - 1 : 0);
183: break;
184:
185: case 40: /* Total accumulated child's time */
186: times(&t);
187: datum = t.child_user_time+t.child_system_time;
188: break;
189:
190: case 41: /* Total accumulated user time -- including all kids */
191: times(&t);
192: datum = t.proc_user_time+t.child_user_time;
193: break;
194:
195: case 42: /* Total system time -- including all kids */
196: times(&t);
197: datum = t.proc_system_time+t.child_system_time;
198: break;
199:
200: case 43: /* User time -- parent only */
201: times(&t);
202: datum = t.proc_user_time;
203: break;
204:
205: case 44: /* System time -- parent only */
206: times(&t);
207: datum = t.proc_system_time;
208: break;
209:
210: case 95: /* dump namelist */
211: for (np=nlist; np->namep; np++)
212: printf("%s: use=%d, type=%d, itemp=%o, label=%d\n",
213: np->namep, np->use, np->type, np->itemp,
214: np->label);
215: datum = 0;
216: break;
217:
218: case 96:
219: dstack();
220:
221: case 97:
222: datum = (sp - stack) / 2;
223: break;
224:
225: case 98: /* turn off alloc/free trace */
226: datum = aftrace;
227: aftrace = 0;
228: break;
229:
230: case 99: /* turn on alloc/free trace */
231: datum = aftrace;
232: aftrace = 1;
233: break;
234: }
235: p = newdat(DA, 0, 1);
236: p->datap[0] = datum;
237: *sp++ = p;
238: }
Defined functions
Defined variables
Sccsid
defined in line
1;
never used