1: static  char *sccsid = "@(#)sh.hist.c 4.1 10/9/80";
   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;
  73: 
  74:     if (getn(value("history")) == 0)
  75:         return;
  76:     if (setintr)
  77:         sigrelse(SIGINT);
  78:     vp++;
  79:     if (*vp && eq(*vp, "-r")) {
  80:         rflg++;
  81:         vp++;
  82:     }
  83:     if (*vp)
  84:         n = getn(*vp);
  85:     else
  86:         n = 1000;
  87:     dohist1(Histlist.Hnext, &n, rflg);
  88: }
  89: 
  90: dohist1(hp, np, rflg)
  91:     struct Hist *hp;
  92:     int *np;
  93: {
  94:     bool print = (*np) > 0;
  95: top:
  96:     if (hp == 0)
  97:         return;
  98:     (*np)--;
  99:     hp->Href++;
 100:     if (rflg == 0) {
 101:         dohist1(hp->Hnext, np, rflg);
 102:         if (print)
 103:             phist(hp);
 104:         return;
 105:     }
 106:     if (*np >= 0)
 107:         phist(hp);
 108:     hp = hp->Hnext;
 109:     goto top;
 110: }
 111: 
 112: phist(hp)
 113:     register struct Hist *hp;
 114: {
 115: 
 116:     printf("%6d\t", hp->Hnum);
 117:     prlex(&hp->Hlex);
 118: }

Defined functions

dohist defined in line 69; used 2 times
dohist1 defined in line 90; used 2 times
enthist defined in line 38; used 3 times
hfree defined in line 61; used 1 times
  • in line 32
phist defined in line 112; used 2 times
savehist defined in line 9; used 1 times

Defined variables

sccsid defined in line 1; never used
Last modified: 1980-10-09
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 839
Valid CSS Valid XHTML 1.0 Strict