|
|
1.1 root 1: /* Copyright (c) 1979 Regents of the University of California */
2: #include "sh.h"
3:
4: /*
5: * C shell
6: */
7:
8: savehist(sp)
9: struct wordent *sp;
10: {
11: register struct Hist *hp, *np;
12: int histlen;
13: register char *cp;
14:
15: cp = value("history");
16: if (*cp == 0)
17: histlen = 0;
18: else {
19: while (*cp && digit(*cp))
20: cp++;
21: /* avoid a looping snafu */
22: if (*cp)
23: set("history", "10");
24: histlen = getn(value("history"));
25: }
26: /* throw away null lines */
27: if (sp->next->word[0] == '\n')
28: return;
29: for (hp = &Histlist; np = hp->Hnext;)
30: if (eventno - np->Href >= histlen || histlen == 0)
31: hp->Hnext = np->Hnext, hfree(np);
32: else
33: hp = np;
34: enthist(++eventno, sp, 1);
35: }
36:
37: struct Hist *
38: enthist(event, lp, docopy)
39: int event;
40: register struct wordent *lp;
41: bool docopy;
42: {
43: register struct Hist *np;
44:
45: np = (struct Hist *) calloc(1, sizeof *np);
46: np->Hnum = np->Href = event;
47: if (docopy)
48: copylex(&np->Hlex, lp);
49: else {
50: np->Hlex.next = lp->next;
51: lp->next->prev = &np->Hlex;
52: np->Hlex.prev = lp->prev;
53: lp->prev->next = &np->Hlex;
54: }
55: np->Hnext = Histlist.Hnext;
56: Histlist.Hnext = np;
57: return (np);
58: }
59:
60: hfree(hp)
61: register struct Hist *hp;
62: {
63:
64: freelex(&hp->Hlex);
65: xfree(hp);
66: }
67:
68: dohist()
69: {
70:
71: if (getn(value("history")) == 0)
72: return;
73: dohist1(Histlist.Hnext);
74: }
75:
76: dohist1(hp)
77: register struct Hist *hp;
78: {
79:
80: if (hp == 0)
81: return;
82: hp->Href++;
83: dohist1(hp->Hnext);
84: phist(hp);
85: }
86:
87: phist(hp)
88: register struct Hist *hp;
89: {
90:
91: printf("%6d\t", hp->Hnum);
92: prlex(&hp->Hlex);
93: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.