# 2.11BSD#431 - /usr/src/bin/csh/sh.hist.c

##### Functions

    dohist            X
    dohist1           X
    enthist           X
    hfree             X
    phist             X
    savehist          X

       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

- in /usr/src/bin/csh/sh.c line 568
- in /usr/src/bin/csh/sh.init.c line 35, 123

dohist1 defined in line 112; used 2 times

- in line 109, 123

enthist defined in line 47; used 3 times

- in line 44
- in /usr/src/bin/csh/sh.h line 413
- in /usr/src/bin/csh/sh.lex.c line 676

hfree defined in line 70; used 1 times

- in line 41

phist defined in line 134; used 2 times

- in line 125-129(2)

savehist defined in line 17; used 1 times

- in /usr/src/bin/csh/sh.c line 768

#### 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: 1318 |