fixed problem with stab type for initialized static variables,
[unix-history] / usr / src / old / more / more.c
index 0d84b2b..0aa5e04 100644 (file)
@@ -1,4 +1,6 @@
-static char *sccsid = "@(#)more.c      4.8 (Berkeley) 83/02/09";
+#ifndef lint
+static char *sccsid = "@(#)more.c      4.15 (Berkeley) 83/07/07";
+#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.8 (Berkeley) 83/02/09";
 #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.8 (Berkeley) 83/02/09";
 #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();
@@ -263,23 +262,39 @@ char *argv[];
 argscan(s)
 char *s;
 {
 argscan(s)
 char *s;
 {
-           for (dlines = 0; *s != '\0'; s++)
-               if (isdigit(*s))
-                   dlines = dlines*10 + *s - '0';
-               else if (*s == 'd')
-                   dum_opt = 1;
-               else if (*s == 'l')
-                   stop_opt = 0;
-               else if (*s == 'f')
-                   fold_opt = 0;
-               else if (*s == 'p')
-                   noscroll++;
-               else if (*s == 'c')
-                   clreol++;
-               else if (*s == 's')
-                   ssp_opt = 1;
-               else if (*s == 'u')
-                   ul_opt = 0;
+       for (dlines = 0; *s != '\0'; s++)
+       {
+               switch (*s)
+               {
+                 case '0': case '1': case '2':
+                 case '3': case '4': case '5':
+                 case '6': case '7': case '8':
+                 case '9':
+                       dlines = dlines*10 + *s - '0';
+                       break;
+                 case 'd':
+                       dum_opt = 1;
+                       break;
+                 case 'l':
+                       stop_opt = 0;
+                       break;
+                 case 'f':
+                       fold_opt = 0;
+                       break;
+                 case 'p':
+                       noscroll++;
+                       break;
+                 case 'c':
+                       clreol++;
+                       break;
+                 case 's':
+                       ssp_opt = 1;
+                       break;
+                 case 'u':
+                       ul_opt = 0;
+                       break;
+               }
+       }
 }
 
 
 }
 
 
@@ -415,7 +430,7 @@ register int num_lines;
            return;
        if (hard && promptlen > 0)
                erase (0);
            return;
        if (hard && promptlen > 0)
                erase (0);
-       if (noscroll && num_lines == dlines)
+       if (noscroll && num_lines >= dlines)
        { 
            if (clreol)
                home();
        { 
            if (clreol)
                home();
@@ -550,16 +565,16 @@ int n;
 char *str;
 {
     sptr = str;
 char *str;
 {
     sptr = str;
-    sprintf (n);
+    Sprintf (n);
     *sptr = '\0';
 }
 
     *sptr = '\0';
 }
 
-sprintf (n)
+Sprintf (n)
 {
     int a;
 
     if (a = n/10)
 {
     int a;
 
     if (a = n/10)
-       sprintf (a);
+       Sprintf (a);
     *sptr++ = n % 10 + '0';
 }
 
     *sptr++ = n % 10 + '0';
 }
 
@@ -1310,7 +1325,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 {
@@ -1366,6 +1381,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);
@@ -1560,7 +1576,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)
@@ -1584,6 +1600,8 @@ onsusp ()
     reset_tty ();
     fflush (stdout);
     /* Send the TSTP signal to suspend our process group */
     reset_tty ();
     fflush (stdout);
     /* Send the TSTP signal to suspend our process group */
+    signal(SIGTSTP, SIG_DFL);
+    sigsetmask(0);
     kill (0, SIGTSTP);
     /* Pause for station break */
 
     kill (0, SIGTSTP);
     /* Pause for station break */