* Copyright (c) 1980, 1991 The Regents of the University of California.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)hist.c 5.11 (Berkeley) %G%";
static void hfree
__P((struct Hist
*));
static void dohist1
__P((struct Hist
*, int *, int, int));
static void phist
__P((struct Hist
*, int));
register struct Hist
*hp
, *np
;
register int histlen
= 0;
/* throw away null lines */
if (sp
->next
->word
[0] == '\n')
histlen
= histlen
* 10 + *p
++ - '0';
for (hp
= &Histlist
; (np
= hp
->Hnext
) != NULL
;)
if (eventno
- np
->Href
>= histlen
|| histlen
== 0)
hp
->Hnext
= np
->Hnext
, hfree(np
);
(void) enthist(++eventno
, sp
, 1);
enthist(event
, lp
, docopy
)
register struct wordent
*lp
;
register struct Hist
*np
;
np
= (struct Hist
*) xmalloc((size_t) sizeof(*np
));
np
->Hnum
= np
->Href
= event
;
np
->Hlex
.next
= lp
->next
;
lp
->next
->prev
= &np
->Hlex
;
np
->Hlex
.prev
= lp
->prev
;
lp
->prev
->next
= &np
->Hlex
;
np
->Hnext
= Histlist
.Hnext
;
register struct Hist
*hp
;
int n
, rflg
= 0, hflg
= 0;
if (getn(value(STRhistory
)) == 0)
(void) sigsetmask(sigblock((sigset_t
) 0) & ~sigmask(SIGINT
));
while (*++v
&& **v
== '-') {
case '-': /* ignore multiple '-'s */
n
= getn(value(STRhistory
));
dohist1(Histlist
.Hnext
, &n
, rflg
, hflg
);
dohist1(hp
, np
, rflg
, hflg
)
for (; hp
!= 0; hp
= hp
->Hnext
) {
dohist1(hp
->Hnext
, np
, rflg
, hflg
);
register struct Hist
*hp
;
(void) fprintf(cshout
, "%6d\t", hp
->Hnum
);
prlex(cshout
, &hp
->Hlex
);