Annotation of 42BSD/bin/csh/sh.hist.c, revision 1.1.1.1

1.1       root        1: static char *sccsid = "@(#)sh.hist.c 4.6 6/11/83";
                      2: 
                      3: #include "sh.h"
                      4: 
                      5: /*
                      6:  * C shell
                      7:  */
                      8: 
                      9: savehist(sp)
                     10:        struct wordent *sp;
                     11: {
                     12:        register struct Hist *hp, *np;
                     13:        int histlen;
                     14:        register char *cp;
                     15: 
                     16:        cp = value("history");
                     17:        if (*cp == 0)
                     18:                histlen = 0;
                     19:        else {
                     20:                while (*cp && digit(*cp))
                     21:                        cp++;
                     22:                /* avoid a looping snafu */
                     23:                if (*cp)
                     24:                        set("history", "10");
                     25:                histlen = getn(value("history"));
                     26:        }
                     27:        /* throw away null lines */
                     28:        if (sp->next->word[0] == '\n')
                     29:                return;
                     30:        for (hp = &Histlist; np = hp->Hnext;)
                     31:                if (eventno - np->Href >= histlen || histlen == 0)
                     32:                        hp->Hnext = np->Hnext, hfree(np);
                     33:                else
                     34:                        hp = np;
                     35:        enthist(++eventno, sp, 1);
                     36: }
                     37: 
                     38: struct Hist *
                     39: enthist(event, lp, docopy)
                     40:        int event;
                     41:        register struct wordent *lp;
                     42:        bool docopy;
                     43: {
                     44:        register struct Hist *np;
                     45: 
                     46:        np = (struct Hist *) calloc(1, sizeof *np);
                     47:        np->Hnum = np->Href = event;
                     48:        if (docopy)
                     49:                copylex(&np->Hlex, lp);
                     50:        else {
                     51:                np->Hlex.next = lp->next;
                     52:                lp->next->prev = &np->Hlex;
                     53:                np->Hlex.prev = lp->prev;
                     54:                lp->prev->next = &np->Hlex;
                     55:        }
                     56:        np->Hnext = Histlist.Hnext;
                     57:        Histlist.Hnext = np;
                     58:        return (np);
                     59: }
                     60: 
                     61: hfree(hp)
                     62:        register struct Hist *hp;
                     63: {
                     64: 
                     65:        freelex(&hp->Hlex);
                     66:        xfree((char *)hp);
                     67: }
                     68: 
                     69: dohist(vp)
                     70:        char **vp;
                     71: {
                     72:        int n, rflg = 0, hflg = 0;
                     73:        if (getn(value("history")) == 0)
                     74:                return;
                     75:        if (setintr)
                     76:                sigrelse(SIGINT);
                     77:        vp++;
                     78:        while (*vp && *vp[0] == '-') {
                     79:                if (*vp && eq(*vp, "-h")) {
                     80:                        hflg++;
                     81:                        vp++;
                     82:                }
                     83:                if (*vp && eq(*vp, "-r")) {
                     84:                        rflg++;
                     85:                        vp++;
                     86:                }
                     87:        }
                     88:        if (*vp)
                     89:                n = getn(*vp);
                     90:        else {
                     91:                n = getn(value("history"));
                     92:        }
                     93:        dohist1(Histlist.Hnext, &n, rflg, hflg);
                     94: }
                     95: 
                     96: dohist1(hp, np, rflg, hflg)
                     97:        struct Hist *hp;
                     98:        int *np, rflg, hflg;
                     99: {
                    100:        bool print = (*np) > 0;
                    101: top:
                    102:        if (hp == 0)
                    103:                return;
                    104:        (*np)--;
                    105:        hp->Href++;
                    106:        if (rflg == 0) {
                    107:                dohist1(hp->Hnext, np, rflg, hflg);
                    108:                if (print)
                    109:                        phist(hp, hflg);
                    110:                return;
                    111:        }
                    112:        if (*np >= 0)
                    113:                phist(hp, hflg);
                    114:        hp = hp->Hnext;
                    115:        goto top;
                    116: }
                    117: 
                    118: phist(hp, hflg)
                    119:        register struct Hist *hp;
                    120:        int hflg;
                    121: {
                    122: 
                    123:        if (hflg == 0)
                    124:                printf("%6d\t", hp->Hnum);
                    125:        prlex(&hp->Hlex);
                    126: }

unix.superglobalmegacorp.com

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