Commit | Line | Data |
---|---|---|
0a02ab26 BJ |
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 | } |