added "more" command
authorSerge ??? <serge@ucbvax.Berkeley.EDU>
Fri, 7 Jun 1985 17:47:29 +0000 (09:47 -0800)
committerSerge ??? <serge@ucbvax.Berkeley.EDU>
Fri, 7 Jun 1985 17:47:29 +0000 (09:47 -0800)
SCCS-vsn: usr.bin/mail/cmdtab.c 2.12
SCCS-vsn: usr.bin/mail/cmd1.c 2.14

usr/src/usr.bin/mail/cmd1.c
usr/src/usr.bin/mail/cmdtab.c

index 50770ae..6ad7b8a 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char sccsid[] = "@(#)cmd1.c     2.13 (Berkeley) %G%";
+static char sccsid[] = "@(#)cmd1.c     2.14 (Berkeley) %G%";
 #endif
 
 #include "rcv.h"
 #endif
 
 #include "rcv.h"
@@ -137,6 +137,9 @@ screensize()
 {
        register char *cp;
        register int s;
 {
        register char *cp;
        register int s;
+#ifdef TIOCGWINSZ
+       struct winsize ws;
+#endif
 
        if ((cp = value("screen")) != NOSTR) {
                s = atoi(cp);
 
        if ((cp = value("screen")) != NOSTR) {
                s = atoi(cp);
@@ -147,6 +150,10 @@ screensize()
                s = 5;
        else if (baud == B1200)
                s = 10;
                s = 5;
        else if (baud == B1200)
                s = 10;
+#ifdef TIOCGWINSZ
+       else if (ioctl(fileno(stdout), TIOCGWINSZ, &ws) == 0 && ws.ws_row != 0)
+               s = ws.ws_row - 4;
+#endif
        else
                s = 20;
        return(s);
        else
                s = 20;
        return(s);
@@ -261,6 +268,25 @@ pcmdlist()
        return(0);
 }
 
        return(0);
 }
 
+/*
+ * Paginate messages, honor ignored fields.
+ */
+more(msgvec)
+       int *msgvec;
+{
+       return (type1(msgvec, 1, 1));
+}
+
+/*
+ * Paginate messages, even printing ignored fields.
+ */
+More(msgvec)
+       int *msgvec;
+{
+
+       return (type1(msgvec, 0, 1));
+}
+
 /*
  * Type out messages, honor ignored fields.
  */
 /*
  * Type out messages, honor ignored fields.
  */
@@ -268,7 +294,7 @@ type(msgvec)
        int *msgvec;
 {
 
        int *msgvec;
 {
 
-       return(type1(msgvec, 1));
+       return(type1(msgvec, 1, 0));
 }
 
 /*
 }
 
 /*
@@ -278,7 +304,7 @@ Type(msgvec)
        int *msgvec;
 {
 
        int *msgvec;
 {
 
-       return(type1(msgvec, 0));
+       return(type1(msgvec, 0, 0));
 }
 
 /*
 }
 
 /*
@@ -286,7 +312,7 @@ Type(msgvec)
  */
 jmp_buf        pipestop;
 
  */
 jmp_buf        pipestop;
 
-type1(msgvec, doign)
+type1(msgvec, doign, page)
        int *msgvec;
 {
        register *ip;
        int *msgvec;
 {
        register *ip;
@@ -306,10 +332,13 @@ type1(msgvec, doign)
                sigset(SIGPIPE, SIG_DFL);
                return(0);
        }
                sigset(SIGPIPE, SIG_DFL);
                return(0);
        }
-       if (intty && outtty && (cp = value("crt")) != NOSTR) {
-               for (ip = msgvec, nlines = 0; *ip && ip-msgvec < msgCount; ip++)
-                       nlines += message[*ip - 1].m_lines;
-               if (nlines > atoi(cp)) {
+       if (intty && outtty && (page || (cp = value("crt")) != NOSTR)) {
+               if (!page) {
+                       nlines = 0;
+                       for (ip = msgvec; *ip && ip-msgvec < msgCount; ip++)
+                               nlines += message[*ip - 1].m_lines;
+               }
+               if (page || nlines > atoi(cp)) {
                        obuf = popen(MORE, "w");
                        if (obuf == NULL) {
                                perror(MORE);
                        obuf = popen(MORE, "w");
                        if (obuf == NULL) {
                                perror(MORE);
index afbd66a..b322025 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)cmdtab.c    2.11 (Berkeley) %G%";
+static char *sccsid = "@(#)cmdtab.c    2.12 (Berkeley) %G%";
 #endif
 
 #include "def.h"
 #endif
 
 #include "def.h"
@@ -17,7 +17,7 @@ extern int messize(), psalloc(), deltype(), unset(), set(), source();
 extern int pversion(), group(), top(), core(), null(), stouch(), visual();
 extern int swrite(), dosh(), file(), echo(), Respond(), scroll(), ifcmd();
 extern int elsecmd(), endifcmd(), mboxit(), clobber(), alternates();
 extern int pversion(), group(), top(), core(), null(), stouch(), visual();
 extern int swrite(), dosh(), file(), echo(), Respond(), scroll(), ifcmd();
 extern int elsecmd(), endifcmd(), mboxit(), clobber(), alternates();
-extern int local(), folders(), igfield(), Type(), retfield();
+extern int local(), folders(), igfield(), Type(), retfield(), more(), More();
 
 struct cmd cmdtab[] = {
        "next",         next,           NDMLIST,        0,      MMNDEL,
 
 struct cmd cmdtab[] = {
        "next",         next,           NDMLIST,        0,      MMNDEL,
@@ -37,6 +37,10 @@ struct cmd cmdtab[] = {
        "unset",        unset,          M|RAWLIST,      1,      1000,
        "mail",         sendmail,       R|M|I|STRLIST,  0,      0,
        "mbox",         mboxit,         W|MSGLIST,      0,      0,
        "unset",        unset,          M|RAWLIST,      1,      1000,
        "mail",         sendmail,       R|M|I|STRLIST,  0,      0,
        "mbox",         mboxit,         W|MSGLIST,      0,      0,
+       "more",         more,           MSGLIST,        0,      MMNDEL,
+       "page",         more,           MSGLIST,        0,      MMNDEL,
+       "More",         More,           MSGLIST,        0,      MMNDEL,
+       "Page",         More,           MSGLIST,        0,      MMNDEL,
        "!",            shell,          I|STRLIST,      0,      0,
        "copy",         copycmd,        M|STRLIST,      0,      0,
        "chdir",        schdir,         M|STRLIST,      0,      0,
        "!",            shell,          I|STRLIST,      0,      0,
        "copy",         copycmd,        M|STRLIST,      0,      0,
        "chdir",        schdir,         M|STRLIST,      0,      0,