1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley Software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #if !defined(lint) && defined(DOSCCS)
   8: static char *sccsid = "@(#)sh.hist.c	5.2 (Berkeley) 6/6/85";
   9: #endif
  10: 
  11: #include "sh.h"
  12: 
  13: /*
  14:  * C shell
  15:  */
  16: 
  17: savehist(sp)
  18:     struct wordent *sp;
  19: {
  20:     register struct Hist *hp, *np;
  21:     register int histlen = 0;
  22:     char *cp;
  23: 
  24:     /* throw away null lines */
  25:     if (sp->next->word[0] == '\n')
  26:         return;
  27:     cp = value("history");
  28:     if (*cp) {
  29:         register char *p = cp;
  30: 
  31:         while (*p) {
  32:             if (!digit(*p)) {
  33:                 histlen = 0;
  34:                 break;
  35:             }
  36:             histlen = histlen * 10 + *p++ - '0';
  37:         }
  38:     }
  39:     for (hp = &Histlist; np = hp->Hnext;)
  40:         if (eventno - np->Href >= histlen || histlen == 0)
  41:             hp->Hnext = np->Hnext, hfree(np);
  42:         else
  43:             hp = np;
  44:     (void) enthist(++eventno, sp, 1);
  45: }
  46: 
  47: struct Hist *
  48: enthist(event, lp, docopy)
  49:     int event;
  50:     register struct wordent *lp;
  51:     bool docopy;
  52: {
  53:     register struct Hist *np;
  54: 
  55:     np = (struct Hist *) xalloc(sizeof *np);
  56:     np->Hnum = np->Href = event;
  57:     if (docopy)
  58:         copylex(&np->Hlex, lp);
  59:     else {
  60:         np->Hlex.next = lp->next;
  61:         lp->next->prev = &np->Hlex;
  62:         np->Hlex.prev = lp->prev;
  63:         lp->prev->next = &np->Hlex;
  64:     }
  65:     np->Hnext = Histlist.Hnext;
  66:     Histlist.Hnext = np;
  67:     return (np);
  68: }
  69: 
  70: hfree(hp)
  71:     register struct Hist *hp;
  72: {
  73: 
  74:     freelex(&hp->Hlex);
  75:     xfree((char *)hp);
  76: }
  77: 
  78: dohist(vp)
  79:     char **vp;
  80: {
  81:     int n, rflg = 0, hflg = 0;
  82:     if (getn(value("history")) == 0)
  83:         return;
  84:     if (setintr)
  85:         (void) sigsetmask(sigblock(0L) & ~sigmask(SIGINT));
  86:     while (*++vp && **vp == '-') {
  87:         char *vp2 = *vp;
  88: 
  89:         while (*++vp2)
  90:             switch (*vp2) {
  91:             case 'h':
  92:                 hflg++;
  93:                 break;
  94:             case 'r':
  95:                 rflg++;
  96:                 break;
  97:             case '-':   /* ignore multiple '-'s */
  98:                 break;
  99:             default:
 100:                 printf("Unknown flag: -%c\n", *vp2);
 101:                 error("Usage: history [-rh] [# number of events]");
 102:             }
 103:     }
 104:     if (*vp)
 105:         n = getn(*vp);
 106:     else {
 107:         n = getn(value("history"));
 108:     }
 109:     dohist1(Histlist.Hnext, &n, rflg, hflg);
 110: }
 111: 
 112: dohist1(hp, np, rflg, hflg)
 113:     struct Hist *hp;
 114:     int *np, rflg, hflg;
 115: {
 116:     bool print = (*np) > 0;
 117: top:
 118:     if (hp == 0)
 119:         return;
 120:     (*np)--;
 121:     hp->Href++;
 122:     if (rflg == 0) {
 123:         dohist1(hp->Hnext, np, rflg, hflg);
 124:         if (print)
 125:             phist(hp, hflg);
 126:         return;
 127:     }
 128:     if (*np >= 0)
 129:         phist(hp, hflg);
 130:     hp = hp->Hnext;
 131:     goto top;
 132: }
 133: 
 134: phist(hp, hflg)
 135:     register struct Hist *hp;
 136:     int hflg;
 137: {
 138: 
 139:     if (hflg == 0)
 140:         printf("%6d\t", hp->Hnum);
 141:     prlex(&hp->Hlex);
 142: }

Defined functions

dohist defined in line 78; used 3 times
dohist1 defined in line 112; used 2 times
enthist defined in line 47; used 3 times
hfree defined in line 70; used 1 times
  • in line 41
phist defined in line 134; used 2 times
savehist defined in line 17; used 1 times

Defined variables

sccsid defined in line 8; never used
Last modified: 1991-08-31
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 3101
Valid CSS Valid XHTML 1.0 Strict