BSD 4_4_Lite2 release
[unix-history] / usr / src / bin / csh / hist.c
index 3b9d76e..673cf54 100644 (file)
@@ -1,19 +1,54 @@
 /*-
 /*-
- * Copyright (c) 1980, 1991 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1980, 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  *
- * %sccs.include.redist.c%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)hist.c     5.5 (Berkeley) %G%";
+static char sccsid[] = "@(#)hist.c     8.2 (Berkeley) 3/22/95";
 #endif /* not lint */
 
 #endif /* not lint */
 
-#include "sh.h"
+#include <sys/types.h>
+#include <stdlib.h>
+#if __STDC__
+# include <stdarg.h>
+#else
+# include <varargs.h>
+#endif
+
+#include "csh.h"
+#include "extern.h"
 
 
-static void hfree();
-static void dohist1();
-static void phist();
+static void    hfree __P((struct Hist *));
+static void    dohist1 __P((struct Hist *, int *, int, int));
+static void    phist __P((struct Hist *, int));
 
 void
 savehist(sp)
 
 void
 savehist(sp)
@@ -38,7 +73,7 @@ savehist(sp)
            histlen = histlen * 10 + *p++ - '0';
        }
     }
            histlen = histlen * 10 + *p++ - '0';
        }
     }
-    for (hp = &Histlist; np = hp->Hnext;)
+    for (hp = &Histlist; (np = hp->Hnext) != NULL;)
        if (eventno - np->Href >= histlen || histlen == 0)
            hp->Hnext = np->Hnext, hfree(np);
        else
        if (eventno - np->Href >= histlen || histlen == 0)
            hp->Hnext = np->Hnext, hfree(np);
        else
@@ -55,7 +90,6 @@ enthist(event, lp, docopy)
     register struct Hist *np;
 
     np = (struct Hist *) xmalloc((size_t) sizeof(*np));
     register struct Hist *np;
 
     np = (struct Hist *) xmalloc((size_t) sizeof(*np));
-    (void) time(&(np->Htime));
     np->Hnum = np->Href = event;
     if (docopy) {
        copylex(&np->Hlex, lp);
     np->Hnum = np->Href = event;
     if (docopy) {
        copylex(&np->Hlex, lp);
@@ -81,29 +115,32 @@ hfree(hp)
 }
 
 void
 }
 
 void
-dohist(vp)
-    Char  **vp;
+/*ARGSUSED*/
+dohist(v, t)
+    Char **v;
+    struct command *t;
 {
 {
-    int     n, rflg = 0, hflg = 0, tflg = 0;
+    int     n, rflg = 0, hflg = 0;
+    sigset_t sigset;
 
     if (getn(value(STRhistory)) == 0)
        return;
 
     if (getn(value(STRhistory)) == 0)
        return;
-    if (setintr)
-       (void) sigsetmask(sigblock((sigmask_t) 0) & ~sigmask(SIGINT));
-    while (*++vp && **vp == '-') {
-       Char   *vp2 = *vp;
+    if (setintr) {
+       sigemptyset(&sigset);
+       sigaddset(&sigset, SIGINT);
+       sigprocmask(SIG_UNBLOCK, &sigset, NULL);
+    }
+    while (*++v && **v == '-') {
+       Char   *vp = *v;
 
 
-       while (*++vp2)
-           switch (*vp2) {
+       while (*++vp)
+           switch (*vp) {
            case 'h':
                hflg++;
                break;
            case 'r':
                rflg++;
                break;
            case 'h':
                hflg++;
                break;
            case 'r':
                rflg++;
                break;
-           case 't':
-               tflg++;
-               break;
            case '-':           /* ignore multiple '-'s */
                break;
            default:
            case '-':           /* ignore multiple '-'s */
                break;
            default:
@@ -111,18 +148,18 @@ dohist(vp)
                break;
            }
     }
                break;
            }
     }
-    if (*vp)
-       n = getn(*vp);
+    if (*v)
+       n = getn(*v);
     else {
        n = getn(value(STRhistory));
     }
     else {
        n = getn(value(STRhistory));
     }
-    dohist1(Histlist.Hnext, &n, rflg, hflg, tflg);
+    dohist1(Histlist.Hnext, &n, rflg, hflg);
 }
 
 static void
 }
 
 static void
-dohist1(hp, np, rflg, hflg, tflg)
+dohist1(hp, np, rflg, hflg)
     struct Hist *hp;
     struct Hist *hp;
-    int    *np, rflg, hflg, tflg;
+    int    *np, rflg, hflg;
 {
     bool    print = (*np) > 0;
 
 {
     bool    print = (*np) > 0;
 
@@ -130,42 +167,22 @@ dohist1(hp, np, rflg, hflg, tflg)
        (*np)--;
        hp->Href++;
        if (rflg == 0) {
        (*np)--;
        hp->Href++;
        if (rflg == 0) {
-           dohist1(hp->Hnext, np, rflg, hflg, tflg);
+           dohist1(hp->Hnext, np, rflg, hflg);
            if (print)
            if (print)
-               phist(hp, hflg, tflg);
+               phist(hp, hflg);
            return;
        }
        if (*np >= 0)
            return;
        }
        if (*np >= 0)
-           phist(hp, hflg, tflg);
+           phist(hp, hflg);
     }
 }
 
 static void
     }
 }
 
 static void
-phist(hp, hflg, tflg)
+phist(hp, hflg)
     register struct Hist *hp;
     register struct Hist *hp;
-    int     hflg, tflg;
+    int     hflg;
 {
 {
-    struct tm *t;
-    char    ampm = 'a';
-
-    if (hflg == 0) {
-       xprintf("%6d\t", hp->Hnum);
-       if (tflg == 0) {
-           t = localtime(&hp->Htime);
-           if (adrof(STRampm)) {       /* addition by Hans J. Albertsson */
-               if (t->tm_hour >= 12) {
-                   if (t->tm_hour > 12)
-                       t->tm_hour -= 12;
-                   ampm = 'p';
-               }
-               else if (t->tm_hour == 0)
-                   t->tm_hour = 12;
-               xprintf("%2d:%02d%cm\t", t->tm_hour, t->tm_min, ampm);
-           }
-           else {
-               xprintf("%2d:%02d\t", t->tm_hour, t->tm_min);
-           }
-       }
-    }
-    prlex(&hp->Hlex);
+    if (hflg == 0)
+       (void) fprintf(cshout, "%6d\t", hp->Hnum);
+    prlex(cshout, &hp->Hlex);
 }
 }