Annotation of 43BSD/contrib/apl/src/a9.c, revision 1.1.1.1

1.1       root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.