Annotation of 40BSD/cmd/csh/sh.time.c, revision 1.1.1.1

1.1       root        1: static char *sccsid = "@(#)sh.time.c 4.1 10/9/80";
                      2: 
                      3: #include "sh.h"
                      4: 
                      5: /*
                      6:  * C Shell - routines handling process timing and niceing
                      7:  */
                      8: #ifdef VMUNIX
                      9: struct vtimes vm0;
                     10: #else
                     11: struct tms times0;
                     12: struct tms timesdol;
                     13: #endif
                     14: 
                     15: settimes()
                     16: {
                     17: 
                     18:        time(&time0);
                     19: #ifdef VMUNIX
                     20:        vtimes(&vm0, 0);
                     21: #else
                     22:        times(&times0);
                     23: #endif
                     24: }
                     25: 
                     26: /*
                     27:  * dotime is only called if it is truly a builtin function and not a
                     28:  * prefix to another command
                     29:  */
                     30: dotime()
                     31: {
                     32:        time_t timedol;
                     33: #ifdef VMUNIX
                     34:        struct vtimes vm1, vmch;
                     35: 
                     36:        vtimes(&vm1, &vmch);
                     37:        vmsadd(&vm1, &vmch);
                     38: #endif
                     39: 
                     40:        time(&timedol);
                     41: #ifdef VMUNIX
                     42:        pvtimes(&vm0, &vm1, timedol - time0);
                     43: #else
                     44:        times(&timesdol);
                     45:        ptimes(timedol - time0, &times0, &timesdol);
                     46: #endif
                     47: }
                     48: 
                     49: /*
                     50:  * donice is only called when it on the line by itself or with a +- value
                     51:  */
                     52: donice(v)
                     53:        register char **v;
                     54: {
                     55:        register char *cp;
                     56: 
                     57:        v++, cp = *v++;
                     58:        if (cp == 0) {
                     59: #ifndef V6
                     60:                nice(20);
                     61:                nice(-10);
                     62: #endif
                     63:                nice(4);
                     64:        } else if (*v == 0 && any(cp[0], "+-")) {
                     65: #ifndef V6
                     66:                nice(20);
                     67:                nice(-10);
                     68: #endif
                     69:                nice(getn(cp));
                     70:        }
                     71: }
                     72: 
                     73: #ifndef VMUNIX
                     74: ptimes(utime, stime, etime)
                     75:        register time_t utime, stime, etime;
                     76: {
                     77: 
                     78:        p60ths(utime);
                     79:        printf("u ");
                     80:        p60ths(stime);
                     81:        printf("s ");
                     82:        psecs(etime);
                     83:        printf(" %d%%\n", (int) (100 * (utime+stime) /
                     84:                (60 * (etime ? etime : 1))));
                     85: }
                     86: 
                     87: #else
                     88: vmsadd(vp, wp)
                     89:        register struct vtimes *vp, *wp;
                     90: {
                     91: 
                     92:        vp->vm_utime += wp->vm_utime;
                     93:        vp->vm_stime += wp->vm_stime;
                     94:        vp->vm_nswap += wp->vm_nswap;
                     95:        vp->vm_idsrss += wp->vm_idsrss;
                     96:        vp->vm_ixrss += wp->vm_ixrss;
                     97:        if (vp->vm_maxrss < wp->vm_maxrss)
                     98:                vp->vm_maxrss = wp->vm_maxrss;
                     99:        vp->vm_majflt += wp->vm_majflt;
                    100:        vp->vm_minflt += wp->vm_minflt;
                    101:        vp->vm_inblk += wp->vm_inblk;
                    102:        vp->vm_oublk += wp->vm_oublk;
                    103: }
                    104: 
                    105: pvtimes(v0, v1, sec)
                    106:        register struct vtimes *v0, *v1;
                    107:        time_t sec;
                    108: {
                    109:        register time_t t =
                    110:            (v1->vm_utime-v0->vm_utime)+(v1->vm_stime-v0->vm_stime);
                    111:        register char *cp;
                    112:        register int i;
                    113:        register struct varent *vp = adrof("time");
                    114: 
                    115:        cp = "%Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww";
                    116:        if (vp && vp->vec[0] && vp->vec[1])
                    117:                cp = vp->vec[1];
                    118:        for (; *cp; cp++)
                    119:        if (*cp != '%')
                    120:                putchar(*cp);
                    121:        else if (cp[1]) switch(*++cp) {
                    122: 
                    123:        case 'U':
                    124:                p60ths(v1->vm_utime - v0->vm_utime);
                    125:                break;
                    126: 
                    127:        case 'S':
                    128:                p60ths(v1->vm_stime - v0->vm_stime);
                    129:                break;
                    130: 
                    131:        case 'E':
                    132:                psecs(sec);
                    133:                break;
                    134: 
                    135:        case 'P':
                    136:                printf("%d%%", (int) ((100 * t) / (60 * (sec ? sec : 1))));
                    137:                break;
                    138: 
                    139:        case 'W':
                    140:                i = v1->vm_nswap - v0->vm_nswap;
                    141:                printf("%d", i);
                    142:                break;
                    143: 
                    144:        case 'X':
                    145:                printf("%d", t == 0 ? 0 : (v1->vm_ixrss-v0->vm_ixrss)/(2*t));
                    146:                break;
                    147: 
                    148:        case 'D':
                    149:                printf("%d", t == 0 ? 0 : (v1->vm_idsrss-v0->vm_idsrss)/(2*t));
                    150:                break;
                    151: 
                    152:        case 'K':
                    153:                printf("%d", t == 0 ? 0 : ((v1->vm_ixrss+v1->vm_idsrss) -
                    154:                   (v0->vm_ixrss+v0->vm_idsrss))/(2*t));
                    155:                break;
                    156: 
                    157:        case 'M':
                    158:                printf("%d", v1->vm_maxrss/2);
                    159:                break;
                    160: 
                    161:        case 'F':
                    162:                printf("%d", v1->vm_majflt-v0->vm_majflt);
                    163:                break;
                    164: 
                    165:        case 'R':
                    166:                printf("%d", v1->vm_minflt-v0->vm_minflt);
                    167:                break;
                    168: 
                    169:        case 'I':
                    170:                printf("%d", v1->vm_inblk-v0->vm_inblk);
                    171:                break;
                    172: 
                    173:        case 'O':
                    174:                printf("%d", v1->vm_oublk-v0->vm_oublk);
                    175:                break;
                    176: 
                    177:        }
                    178:        putchar('\n');
                    179: }
                    180: #endif

unix.superglobalmegacorp.com

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