Annotation of 43BSDTahoe/ucb/window/lcmd2.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1983 Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * Redistribution and use in source and binary forms are permitted
                      6:  * provided that the above copyright notice and this paragraph are
                      7:  * duplicated in all such forms and that any documentation,
                      8:  * advertising materials, and other materials related to such
                      9:  * distribution and use acknowledge that the software was developed
                     10:  * by the University of California, Berkeley.  The name of the
                     11:  * University may not be used to endorse or promote products derived
                     12:  * from this software without specific prior written permission.
                     13:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     14:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     15:  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     16:  */
                     17: 
                     18: #ifndef lint
                     19: static char sccsid[] = "@(#)lcmd2.c    3.15 (Berkeley) 6/29/88";
                     20: #endif /* not lint */
                     21: 
                     22: #include "defs.h"
                     23: #include "string.h"
                     24: #include "value.h"
                     25: #include "var.h"
                     26: #include "lcmd.h"
                     27: #include <sys/resource.h>
                     28: #include "alias.h"
                     29: 
                     30: /*ARGSUSED*/
                     31: l_iostat(v, a)
                     32: struct value *v, *a;
                     33: {
                     34:        register struct ww *w;
                     35: 
                     36:        if ((w = openiwin(14, "IO Statistics")) == 0) {
                     37:                error("Can't open statistics window: %s.", wwerror());
                     38:                return;
                     39:        }
                     40:        wwprintf(w, "ttflush\twrite\terror\tzero\tchar\n");
                     41:        wwprintf(w, "%d\t%d\t%d\t%d\t%d\n",
                     42:                wwnflush, wwnwr, wwnwre, wwnwrz, wwnwrc);
                     43:        wwprintf(w, "wwwrite\tattempt\tchar\n");
                     44:        wwprintf(w, "%d\t%d\t%d\n",
                     45:                wwnwwr, wwnwwra, wwnwwrc);
                     46:        wwprintf(w, "wwupdat\tline\tmiss\tmajor\tmiss\n");
                     47:        wwprintf(w, "%d\t%d\t%d\t%d\t%d\n",
                     48:                wwnupdate, wwnupdline, wwnupdmiss, wwnmajline, wwnmajmiss);
                     49:        wwprintf(w, "select\terror\tzero\n");
                     50:        wwprintf(w, "%d\t%d\t%d\n",
                     51:                wwnselect, wwnselecte, wwnselectz);
                     52:        wwprintf(w, "read\terror\tzero\tchar\n");
                     53:        wwprintf(w, "%d\t%d\t%d\t%d\n",
                     54:                wwnread, wwnreade, wwnreadz, wwnreadc);
                     55:        wwprintf(w, "ptyread\terror\tzero\tcontrol\tdata\tchar\n");
                     56:        wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\n",
                     57:                wwnwread, wwnwreade, wwnwreadz,
                     58:                wwnwreadp, wwnwreadd, wwnwreadc);
                     59:        waitnl(w);
                     60:        closeiwin(w);
                     61: }
                     62: 
                     63: struct lcmd_arg arg_time[] = {
                     64:        { "who",        1,      ARG_STR },
                     65:        0
                     66: };
                     67: 
                     68: /*ARGSUSED*/
                     69: l_time(v, a)
                     70: struct value *v;
                     71: register struct value *a;
                     72: {
                     73:        register struct ww *w;
                     74:        struct rusage rusage;
                     75:        struct timeval timeval;
                     76:        char *strtime();
                     77: 
                     78:        if ((w = openiwin(6, "Timing and Resource Usage")) == 0) {
                     79:                error("Can't open time window: %s.", wwerror());
                     80:                return;
                     81:        }
                     82: 
                     83:        (void) gettimeofday(&timeval, (struct timezone *)0);
                     84:        timeval.tv_sec -= starttime.tv_sec;
                     85:        if ((timeval.tv_usec -= starttime.tv_usec) < 0) {
                     86:                timeval.tv_sec--;
                     87:                timeval.tv_usec += 1000000;
                     88:        }
                     89:        (void) getrusage(a->v_type == V_STR
                     90:                        && str_match(a->v_str, "children", 1)
                     91:                ? RUSAGE_CHILDREN : RUSAGE_SELF, &rusage);
                     92: 
                     93:        wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\n");
                     94:        wwprintf(w, "%-16s", strtime(&timeval));
                     95:        wwprintf(w, "%-16s", strtime(&rusage.ru_utime));
                     96:        wwprintf(w, "%-16s", strtime(&rusage.ru_stime));
                     97:        wwprintf(w, "%ld\t%ld\t%ld\t%ld\n",
                     98:                rusage.ru_maxrss, rusage.ru_ixrss,
                     99:                rusage.ru_idrss, rusage.ru_isrss);
                    100:        wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\n");
                    101:        wwprintf(w, "%ld\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld\n",
                    102:                rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap,
                    103:                rusage.ru_inblock, rusage.ru_oublock,
                    104:                rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals,
                    105:                rusage.ru_nvcsw, rusage.ru_nivcsw);
                    106: 
                    107:        waitnl(w);
                    108:        closeiwin(w);
                    109: }
                    110: 
                    111: char *
                    112: strtime(t)
                    113: register struct timeval *t;
                    114: {
                    115:        char fill = 0;
                    116:        static char buf[20];
                    117:        register char *p = buf;
                    118: 
                    119:        if (t->tv_sec > 60*60) {
                    120:                (void) sprintf(p, "%ld:", t->tv_sec / (60*60));
                    121:                while (*p++)
                    122:                        ;
                    123:                p--;
                    124:                t->tv_sec %= 60*60;
                    125:                fill++;
                    126:        }
                    127:        if (t->tv_sec > 60) {
                    128:                (void) sprintf(p, fill ? "%02ld:" : "%ld:", t->tv_sec / 60);
                    129:                while (*p++)
                    130:                        ;
                    131:                p--;
                    132:                t->tv_sec %= 60;
                    133:                fill++;
                    134:        }
                    135:        (void) sprintf(p, fill ? "%02ld.%02d" : "%ld.%02ld",
                    136:                t->tv_sec, t->tv_usec / 10000);
                    137:        return buf;
                    138: }
                    139: 
                    140: /*ARGSUSED*/
                    141: l_list(v, a)
                    142: struct value *v, *a;
                    143: {
                    144:        register struct ww *w, *wp;
                    145:        register i;
                    146:        int n;
                    147: 
                    148:        for (n = 0, i = 0; i < NWINDOW; i++)
                    149:                if (window[i] != 0)
                    150:                        n++;
                    151:        if (n == 0) {
                    152:                error("No windows.");
                    153:                return;
                    154:        }
                    155:        if ((w = openiwin(n + 2, "Windows")) == 0) {
                    156:                error("Can't open listing window: %s.", wwerror());
                    157:                return;
                    158:        }
                    159:        for (i = 0; i < NWINDOW; i++) {
                    160:                if ((wp = window[i]) == 0)
                    161:                        continue;
                    162:                wwprintf(w, "%c %c %-13s %-.*s\n",
                    163:                        wp == selwin ? '+' : (wp == lastselwin ? '-' : ' '),
                    164:                        i + '1',
                    165:                        wp->ww_state == WWS_HASPROC ? "" : "(No process)",
                    166:                        wwncol - 20,
                    167:                        wp->ww_label ? wp->ww_label : "(No label)");
                    168:        }
                    169:        waitnl(w);
                    170:        closeiwin(w);
                    171: }
                    172: 
                    173: /*ARGSUSED*/
                    174: l_variable(v, a)
                    175: struct value *v, *a;
                    176: {
                    177:        register struct ww *w;
                    178:        int printvar();
                    179: 
                    180:        if ((w = openiwin(wwnrow - 3, "Variables")) == 0) {
                    181:                error("Can't open variable window: %s.", wwerror());
                    182:                return;
                    183:        }
                    184:        if (var_walk(printvar, (int)w) >= 0)
                    185:                waitnl(w);
                    186:        closeiwin(w);
                    187: }
                    188: 
                    189: printvar(w, r)
                    190: register struct ww *w;
                    191: register struct var *r;
                    192: {
                    193:        if (more(w, 0) == 2)
                    194:                return -1;
                    195:        wwprintf(w, "%16s    ", r->r_name);
                    196:        switch (r->r_val.v_type) {
                    197:        case V_STR:
                    198:                wwprintf(w, "%s\n", r->r_val.v_str);
                    199:                break;
                    200:        case V_NUM:
                    201:                wwprintf(w, "%d\n", r->r_val.v_num);
                    202:                break;
                    203:        case V_ERR:
                    204:                wwprintf(w, "ERROR\n");
                    205:                break;
                    206:        }
                    207:        return 0;
                    208: }
                    209: 
                    210: struct lcmd_arg arg_shell[] = {
                    211:        { "",   0,              ARG_ANY|ARG_LIST },
                    212:        0
                    213: };
                    214: 
                    215: l_shell(v, a)
                    216:        struct value *v, *a;
                    217: {
                    218:        register char **pp;
                    219:        register struct value *vp;
                    220: 
                    221:        if (a->v_type == V_ERR) {
                    222:                if ((v->v_str = str_cpy(shellfile)) != 0)
                    223:                        v->v_type = V_STR;
                    224:                return;
                    225:        }
                    226:        if (v->v_str = shellfile) {
                    227:                v->v_type = V_STR;
                    228:                for (pp = shell + 1; *pp; pp++) {
                    229:                        str_free(*pp);
                    230:                        *pp = 0;
                    231:                }
                    232:        }
                    233:        for (pp = shell, vp = a;
                    234:             vp->v_type != V_ERR && pp < &shell[sizeof shell/sizeof *shell-1];
                    235:             pp++, vp++)
                    236:                if ((*pp = vp->v_type == V_STR ?
                    237:                     str_cpy(vp->v_str) : str_itoa(vp->v_num)) == 0) {
                    238:                        /* just leave shell[] the way it is */
                    239:                        p_memerror();
                    240:                        break;
                    241:                }
                    242:        if (shellfile = *shell)
                    243:                if (*shell = rindex(shellfile, '/'))
                    244:                        (*shell)++;
                    245:                else
                    246:                        *shell = shellfile;
                    247: }
                    248: 
                    249: struct lcmd_arg arg_alias[] = {
                    250:        { "",   0,              ARG_STR },
                    251:        { "",   0,              ARG_STR|ARG_LIST },
                    252:        0
                    253: };
                    254: 
                    255: l_alias(v, a)
                    256:        struct value *v, *a;
                    257: {
                    258:        if (a->v_type == V_ERR) {
                    259:                register struct ww *w;
                    260:                int printalias();
                    261: 
                    262:                if ((w = openiwin(wwnrow - 3, "Aliases")) == 0) {
                    263:                        error("Can't open alias window: %s.", wwerror());
                    264:                        return;
                    265:                }
                    266:                if (alias_walk(printalias, (int)w) >= 0)
                    267:                        waitnl(w);
                    268:                closeiwin(w);
                    269:        } else {
                    270:                register struct alias *ap = 0;
                    271: 
                    272:                if (ap = alias_lookup(a->v_str)) {
                    273:                        if ((v->v_str = str_cpy(ap->a_buf)) == 0) {
                    274:                                p_memerror();
                    275:                                return;
                    276:                        }
                    277:                        v->v_type = V_STR;
                    278:                }
                    279:                if (a[1].v_type == V_STR) {
                    280:                        register struct value *vp;
                    281:                        register char *p, *q;
                    282:                        char *str;
                    283:                        register n;
                    284: 
                    285:                        for (n = 0, vp = a + 1; vp->v_type != V_ERR; vp++, n++)
                    286:                                for (p = vp->v_str; *p; p++, n++)
                    287:                                        ;
                    288:                        if ((str = str_alloc(n)) == 0) {
                    289:                                p_memerror();
                    290:                                return;
                    291:                        }
                    292:                        for (q = str, vp = a + 1; vp->v_type != V_ERR;
                    293:                             vp++, q[-1] = ' ')
                    294:                                for (p = vp->v_str; *q++ = *p++;)
                    295:                                        ;
                    296:                        q[-1] = 0;
                    297:                        if ((ap = alias_set(a[0].v_str, (char *)0)) == 0) {
                    298:                                p_memerror();
                    299:                                str_free(str);
                    300:                                return;
                    301:                        }
                    302:                        ap->a_buf = str;
                    303:                }
                    304:        }
                    305: }
                    306: 
                    307: printalias(w, a)
                    308: register struct ww *w;
                    309: register struct alias *a;
                    310: {
                    311:        if (more(w, 0) == 2)
                    312:                return -1;
                    313:        wwprintf(w, "%16s    %s\n", a->a_name, a->a_buf);
                    314:        return 0;
                    315: }
                    316: 
                    317: struct lcmd_arg arg_unalias[] = {
                    318:        { "alias",      1,      ARG_STR },
                    319:        0
                    320: };
                    321: 
                    322: l_unalias(v, a)
                    323: struct value *v, *a;
                    324: {
                    325:        if (a->v_type == ARG_STR)
                    326:                v->v_num = alias_unset(a->v_str);
                    327:        v->v_type = V_NUM;
                    328: }
                    329: 
                    330: struct lcmd_arg arg_echo[] = {
                    331:        { "window",     1,      ARG_NUM },
                    332:        { "",           0,      ARG_ANY|ARG_LIST },
                    333:        0
                    334: };
                    335: 
                    336: /*ARGSUSED*/
                    337: l_echo(v, a)
                    338: struct value *v;
                    339: register struct value *a;
                    340: {
                    341:        char buf[20];
                    342:        struct ww *w;
                    343: 
                    344:        if ((w = vtowin(a++, selwin)) == 0)
                    345:                return;
                    346:        while (a->v_type != V_ERR) {
                    347:                if (a->v_type == V_NUM) {
                    348:                        (void) sprintf(buf, "%d", a->v_num);
                    349:                        (void) wwwrite(w, buf, strlen(buf));
                    350:                } else
                    351:                        (void) wwwrite(w, a->v_str, strlen(a->v_str));
                    352:                if ((++a)->v_type != V_ERR)
                    353:                        (void) wwwrite(w, " ", 1);
                    354:        }
                    355:        (void) wwwrite(w, "\r\n", 2);
                    356: }

unix.superglobalmegacorp.com

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