make ^D scroll 1/2 screenful by default.
[unix-history] / usr / src / old / more / more.c
index f3e80ab..984677b 100644 (file)
@@ -1,4 +1,6 @@
-static char *sccsid = "@(#)more.c      4.12 (Berkeley) 83/06/25";
+#ifndef lint
+static char *sccsid = "@(#)more.c      4.17 (Berkeley) 84/01/06";
+#endif
 
 /*
 ** more.c - General purpose tty output filter and file perusal program
 
 /*
 ** more.c - General purpose tty output filter and file perusal program
@@ -17,12 +19,9 @@ static       char *sccsid = "@(#)more.c      4.12 (Berkeley) 83/06/25";
 #include <setjmp.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <setjmp.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <local/uparm.h>
 
 
-/* Help file will eventually go in libpath(more.help) on all systems */
-
-#define HELPFILE       libpath(more.help)
-#define VI             binpath(vi)
+#define HELPFILE       "/usr/lib/more.help"
+#define VI             "/usr/ucb/vi"
 
 #define Fopen(s,m)     (Currline = 0,file_pos=0,fopen(s,m))
 #define Ftell(f)       file_pos
 
 #define Fopen(s,m)     (Currline = 0,file_pos=0,fopen(s,m))
 #define Ftell(f)       file_pos
@@ -40,7 +39,7 @@ static        char *sccsid = "@(#)more.c      4.12 (Berkeley) 83/06/25";
 #define ESC    '\033'
 #define QUIT   '\034'
 
 #define ESC    '\033'
 #define QUIT   '\034'
 
-struct sgttyb  otty;
+struct sgttyb  otty, savetty;
 long           file_pos, file_size;
 int            fnum, no_intty, no_tty, slow_tty;
 int            dum_opt, dlines, onquit(), end_it();
 long           file_pos, file_size;
 int            fnum, no_intty, no_tty, slow_tty;
 int            dum_opt, dlines, onquit(), end_it();
@@ -112,6 +111,9 @@ char *argv[];
     nfiles = argc;
     fnames = argv;
     initterm ();
     nfiles = argc;
     fnames = argv;
     initterm ();
+    nscroll = Lpp/2 - 1;
+    if (nscroll <= 0)
+       nscroll = 1;
     if(s = getenv("MORE")) argscan(s);
     while (--nfiles > 0) {
        if ((ch = (*++fnames)[0]) == '-') {
     if(s = getenv("MORE")) argscan(s);
     while (--nfiles > 0) {
        if ((ch = (*++fnames)[0]) == '-') {
@@ -1326,7 +1328,7 @@ initterm ()
 
     setbuf(stdout, obuf);
     if (!(no_tty = gtty(1, &otty))) {
 
     setbuf(stdout, obuf);
     if (!(no_tty = gtty(1, &otty))) {
-       if ((term = getenv("TERM")) && tgetent(buf, term) <= 0) {
+       if ((term = getenv("TERM")) == 0 || tgetent(buf, term) <= 0) {
            dumb++; ul_opt = 0;
        }
        else {
            dumb++; ul_opt = 0;
        }
        else {
@@ -1368,7 +1370,7 @@ initterm ()
            if (padstr = tgetstr("pc", &clearptr))
                PC = *padstr;
            Home = tgetstr("ho",&clearptr);
            if (padstr = tgetstr("pc", &clearptr))
                PC = *padstr;
            Home = tgetstr("ho",&clearptr);
-           if (Home == 0 && *Home == '\0')
+           if (Home == 0 || *Home == '\0')
            {
                if ((cursorm = tgetstr("cm", &clearptr)) != NULL) {
                    strcpy(cursorhome, tgoto(cursorm, 0, 0));
            {
                if ((cursorm = tgetstr("cm", &clearptr)) != NULL) {
                    strcpy(cursorhome, tgoto(cursorm, 0, 0));
@@ -1382,6 +1384,7 @@ initterm ()
     }
     no_intty = gtty(0, &otty);
     gtty(2, &otty);
     }
     no_intty = gtty(0, &otty);
     gtty(2, &otty);
+    savetty = otty;
     ospeed = otty.sg_ospeed;
     slow_tty = ospeed < B1200;
     hardtabs =  !(otty.sg_flags & XTABS);
     ospeed = otty.sg_ospeed;
     slow_tty = ospeed < B1200;
     hardtabs =  !(otty.sg_flags & XTABS);
@@ -1576,7 +1579,7 @@ reset_tty ()
 {
     otty.sg_flags |= ECHO;
     otty.sg_flags &= ~MBIT;
 {
     otty.sg_flags |= ECHO;
     otty.sg_flags &= ~MBIT;
-    stty(2, &otty);
+    stty(2, &savetty);
 }
 
 rdline (f)
 }
 
 rdline (f)
@@ -1597,8 +1600,11 @@ register FILE *f;
 
 onsusp ()
 {
 
 onsusp ()
 {
+    /* ignore SIGTTOU so we don't get stopped if csh grabs the tty */
+    signal(SIGTTOU, SIG_IGN);
     reset_tty ();
     fflush (stdout);
     reset_tty ();
     fflush (stdout);
+    signal(SIGTTOU, SIG_DFL);
     /* Send the TSTP signal to suspend our process group */
     signal(SIGTSTP, SIG_DFL);
     sigsetmask(0);
     /* Send the TSTP signal to suspend our process group */
     signal(SIGTSTP, SIG_DFL);
     sigsetmask(0);