new copyright notice
[unix-history] / usr / src / bin / cat / cat.c
index 1004bfc..2155190 100644 (file)
@@ -5,17 +5,7 @@
  * This code is derived from software contributed to Berkeley by
  * Kevin Fall.
  *
  * This code is derived from software contributed to Berkeley by
  * Kevin Fall.
  *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * %sccs.include.redist.c%
  */
 
 #ifndef lint
  */
 
 #ifndef lint
@@ -25,7 +15,7 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)cat.c      5.6 (Berkeley) %G%";
+static char sccsid[] = "@(#)cat.c      5.11 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <sys/param.h>
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -34,6 +24,7 @@ static char sccsid[] = "@(#)cat.c     5.6 (Berkeley) %G%";
 #include <stdio.h>
 #include <ctype.h>
 
 #include <stdio.h>
 #include <ctype.h>
 
+extern int errno;
 int bflag, eflag, nflag, sflag, tflag, vflag;
 int rval;
 char *filename;
 int bflag, eflag, nflag, sflag, tflag, vflag;
 int rval;
 char *filename;
@@ -42,15 +33,12 @@ main(argc, argv)
        int argc;
        char **argv;
 {
        int argc;
        char **argv;
 {
-       extern int errno, optind;
+       extern int optind;
        int ch;
        char *strerror();
 
        int ch;
        char *strerror();
 
-       while ((ch = getopt(argc, argv, "-benstuv")) != EOF)
+       while ((ch = getopt(argc, argv, "benstuv")) != EOF)
                switch (ch) {
                switch (ch) {
-               case '-':
-                       --optind;
-                       goto done;
                case 'b':
                        bflag = nflag = 1;      /* -b implies -n */
                        break;
                case 'b':
                        bflag = nflag = 1;      /* -b implies -n */
                        break;
@@ -77,7 +65,7 @@ main(argc, argv)
                            "usage: cat [-benstuv] [-] [file ...]\n");
                        exit(1);
                }
                            "usage: cat [-benstuv] [-] [file ...]\n");
                        exit(1);
                }
-done:  argv += optind;
+       argv += optind;
 
        if (bflag || eflag || nflag || sflag || tflag || vflag)
                cook_args(argv);
 
        if (bflag || eflag || nflag || sflag || tflag || vflag)
                cook_args(argv);
@@ -122,49 +110,48 @@ cook_buf(fp)
                if (prev == '\n') {
                        if (ch == '\n') {
                                if (sflag) {
                if (prev == '\n') {
                        if (ch == '\n') {
                                if (sflag) {
-                                       if (gobble)
-                                               continue;
+                                       if (!gobble && putchar(ch) == EOF)
+                                               break;
                                        gobble = 1;
                                        gobble = 1;
+                                       continue;
                                }
                                if (nflag && !bflag) {
                                        (void)fprintf(stdout, "%6d\t", ++line);
                                        if (ferror(stdout))
                                                break;
                                }
                                }
                                if (nflag && !bflag) {
                                        (void)fprintf(stdout, "%6d\t", ++line);
                                        if (ferror(stdout))
                                                break;
                                }
-                       }
-                       else if (nflag) {
+                       } else if (nflag) {
                                (void)fprintf(stdout, "%6d\t", ++line);
                                if (ferror(stdout))
                                        break;
                        }
                }
                                (void)fprintf(stdout, "%6d\t", ++line);
                                if (ferror(stdout))
                                        break;
                        }
                }
+               gobble = 0;
                if (ch == '\n') {
                        if (eflag)
                if (ch == '\n') {
                        if (eflag)
-                               if (putc('$', stdout) == EOF)
+                               if (putchar('$') == EOF)
                                        break;
                } else if (ch == '\t') {
                        if (tflag) {
                                        break;
                } else if (ch == '\t') {
                        if (tflag) {
-                               if (putc('^', stdout) == EOF ||
-                                   putc('I', stdout) == EOF)
+                               if (putchar('^') == EOF || putchar('I') == EOF)
                                        break;
                                continue;
                        }
                } else if (vflag) {
                                        break;
                                continue;
                        }
                } else if (vflag) {
-                       if (ch > 0177) {
-                               if (putc('M', stdout) == EOF ||
-                                   putc('-', stdout) == EOF)
+                       if (!isascii(ch)) {
+                               if (putchar('M') == EOF || putchar('-') == EOF)
                                        break;
                                        break;
-                               ch &= 0177;
+                               ch = toascii(ch);
                        }
                        if (iscntrl(ch)) {
                        }
                        if (iscntrl(ch)) {
-                               if (putc('^', stdout) == EOF ||
-                                   putc(ch == '\177' ? '?' :
-                                   ch | 0100, stdout) == EOF)
+                               if (putchar('^') == EOF ||
+                                   putchar(ch == '\177' ? '?' :
+                                   ch | 0100) == EOF)
                                        break;
                                continue;
                        }
                }
                                        break;
                                continue;
                        }
                }
-               if (putc(ch, stdout) == EOF)
+               if (putchar(ch) == EOF)
                        break;
        }
        if (ferror(fp)) {
                        break;
        }
        if (ferror(fp)) {
@@ -207,7 +194,6 @@ raw_args(argv)
 raw_cat(fd)
        register int fd;
 {
 raw_cat(fd)
        register int fd;
 {
-       extern int errno;
        register int nr, nw, off;
        static int bsize;
        static char *buf;
        register int nr, nw, off;
        static int bsize;
        static char *buf;