]> Zhao Yanbai Git Server - minix.git/commitdiff
Importing usr.bin/vis 82/1082/1
authorThomas Cort <tcort@minix3.org>
Mon, 28 Oct 2013 01:12:56 +0000 (21:12 -0400)
committerThomas Cort <tcort@minix3.org>
Mon, 28 Oct 2013 13:28:17 +0000 (09:28 -0400)
No Minix-specific changes needed.

Change-Id: I52e7a0b15553b6f067d82d568f3793c5b6ac2a77

distrib/sets/lists/minix/mi
releasetools/nbsd_ports
usr.bin/Makefile
usr.bin/vis/Makefile [new file with mode: 0644]
usr.bin/vis/extern.h [new file with mode: 0644]
usr.bin/vis/foldit.c [new file with mode: 0644]
usr.bin/vis/vis.1 [new file with mode: 0644]
usr.bin/vis/vis.c [new file with mode: 0644]

index 75295651be9cabc78471f5ec1d43a8308ebd5391..192860848db5516b7480e55c394c3e97147b7996 100644 (file)
 ./usr/bin/version                      minix-sys
 ./usr/bin/vi                           minix-sys
 ./usr/bin/view                         minix-sys
+./usr/bin/vis                          minix-sys
 ./usr/bin/vol                          minix-sys
 ./usr/bin/wc                           minix-sys
 ./usr/bin/whatis                       minix-sys
 ./usr/man/man1/uuidgen.1               minix-sys
 ./usr/man/man1/vi.1                    minix-sys
 ./usr/man/man1/view.1                  minix-sys
+./usr/man/man1/vis.1                   minix-sys
 ./usr/man/man1/vol.1                   minix-sys
 ./usr/man/man1/wait.1                  minix-sys
 ./usr/man/man1/wc.1                    minix-sys
index 87b77b9519396e6c40c1fcbc05c5ebb390b3cf96..6c710bf9851c717744c528586deafe7c5cdca81d 100644 (file)
 2013/10/14 12:00:00,usr.bin/unzip
 2013/10/14 12:00:00,usr.bin/users
 2013/10/23 12:00:00,usr.bin/uuidgen
+2012/10/17 12:00:00,usr.bin/vis
 2012/10/17 12:00:00,usr.bin/wc
 2013/03/22 12:00:00,usr.bin/whatis
 2013/03/15 12:00:00,usr.bin/who
index dca7e585c98c98d698b5de07c8ae3ba5e2f35dd9..356e1158276baef78e8b9fc05d47b8da44331c9f 100644 (file)
@@ -29,7 +29,7 @@ SUBDIR= asa \
        tr tsort unexpand \
        toproto \
        uniq units unzip users \
-       uuidgen \
+       uuidgen vis \
        \
        wc whatis who whois \
        write xargs xinstall yes
diff --git a/usr.bin/vis/Makefile b/usr.bin/vis/Makefile
new file mode 100644 (file)
index 0000000..696b62a
--- /dev/null
@@ -0,0 +1,7 @@
+#      $NetBSD: Makefile,v 1.3 1994/11/17 07:55:57 jtc Exp $
+#      @(#)Makefile    8.1 (Berkeley) 6/6/93
+
+PROG=  vis
+SRCS=  vis.c foldit.c
+
+.include <bsd.prog.mk>
diff --git a/usr.bin/vis/extern.h b/usr.bin/vis/extern.h
new file mode 100644 (file)
index 0000000..49b6f15
--- /dev/null
@@ -0,0 +1,39 @@
+/*     $NetBSD: extern.h,v 1.1 2009/02/10 23:06:31 christos Exp $      */
+
+/*-
+ * Copyright (c) 2009 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * 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 NetBSD
+ *        Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+ */
+
+int foldit(const char *, int, int, int);
diff --git a/usr.bin/vis/foldit.c b/usr.bin/vis/foldit.c
new file mode 100644 (file)
index 0000000..789b14c
--- /dev/null
@@ -0,0 +1,78 @@
+/*     $NetBSD: foldit.c,v 1.7 2009/02/10 23:06:31 christos Exp $      */
+
+/*-
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * 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. 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)foldit.c   8.1 (Berkeley) 6/6/93";
+#endif
+__RCSID("$NetBSD: foldit.c,v 1.7 2009/02/10 23:06:31 christos Exp $");
+#endif /* not lint */
+
+#include <stdio.h>
+#include <vis.h>
+#include "extern.h"
+
+int
+foldit(const char *chunk, int col, int max, int flags)
+{
+       const char *cp;
+
+       /*
+        * Keep track of column position. Insert hidden newline
+        * if this chunk puts us over the limit.
+        */
+again:
+       cp = chunk;
+       while (*cp) {
+               switch(*cp) {
+               case '\n':
+               case '\r':
+                       col = 0;
+                       break;
+               case '\t':
+                       col = (col + 8) &~ 07;
+                       break;
+               case '\b':
+                       col = col ? col - 1 : 0;
+                       break;
+               default:
+                       col++;
+               }
+               if (col > (max - 2)) {
+                       printf(flags & VIS_MIMESTYLE ? "=\n" : "\\\n");
+                       col = 0;
+                       goto again;
+               } 
+               cp++;
+       }
+       return (col);
+}
diff --git a/usr.bin/vis/vis.1 b/usr.bin/vis/vis.1
new file mode 100644 (file)
index 0000000..13c2806
--- /dev/null
@@ -0,0 +1,146 @@
+.\"    $NetBSD: vis.1,v 1.14 2009/02/10 23:06:31 christos Exp $
+.\"
+.\" Copyright (c) 1989, 1991, 1993, 1994
+.\"    The Regents of the University of California.  All rights reserved.
+.\"
+.\" 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. 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.
+.\"
+.\"     @(#)vis.1      8.4 (Berkeley) 4/19/94
+.\"
+.Dd February 10, 2009
+.Dt VIS 1
+.Os
+.Sh NAME
+.Nm vis
+.Nd display non-printable characters in a visual format
+.Sh SYNOPSIS
+.Nm
+.Op Fl bcfhlmnostw
+.Op Fl e Ar extra
+.Op Fl F Ar foldwidth
+.Op Ar file ...
+.Sh DESCRIPTION
+.Nm
+is a filter for converting non-printable characters
+into a visual representation.
+It differs from
+.Ql cat -v
+in that
+the form is unique and invertible.
+By default, all non-graphic
+characters except space, tab, and newline are encoded.
+A detailed description of the
+various visual formats is given in
+.Xr vis 3 .
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl b
+Turns off prepending of backslash before up-arrow control sequences
+and meta characters, and disables the doubling of backslashes.
+This
+produces output which is neither invertible or precise, but does
+represent a minimum of change to the input.
+It is similar to
+.Dq Li cat -v .
+.Pq Dv VIS_NOSLASH
+.It Fl c
+Request a format which displays a small subset of the
+non-printable characters using C-style backslash sequences.
+.Pq Dv VIS_CSTYLE
+.It Fl e Ar extra
+Also encode characters in
+.Ar extra ,
+per
+.Xr svis 3 .
+.It Fl F Ar foldwidth
+Causes
+.Nm
+to fold output lines to foldwidth columns (default 80), like
+.Xr fold 1 ,
+except
+that a hidden newline sequence is used, (which is removed
+when inverting the file back to its original form with
+.Xr unvis 1 ) .
+If the last character in the encoded file does not end in a newline,
+a hidden newline sequence is appended to the output.
+This makes
+the output usable with various editors and other utilities which
+typically don't work with partial lines.
+.It Fl f
+Same as
+.Fl F .
+.It Fl h
+Encode using the URI encoding from RFC 1808.
+.Pq Dv VIS_HTTPSTYLE
+.It Fl l
+Mark newlines with the visible sequence
+.Ql \e$ ,
+followed by the newline.
+.It Fl m
+Encode using the MIME Quoted-Printable encoding from RFC 2045.
+.Pq Dv VIS_MIMESTYLE
+.It Fl n
+Turns off any encoding, except for the fact that backslashes are
+still doubled and hidden newline sequences inserted if
+.Fl f
+or
+.Fl F
+is selected.
+When combined with the
+.Fl f
+flag,
+.Nm
+becomes like
+an invertible version of the
+.Xr fold 1
+utility.
+That is, the output can be unfolded by running the output through
+.Xr unvis 1 .
+.It Fl o
+Request a format which displays non-printable characters as
+an octal number, \eddd.
+.Pq Dv VIS_OCTAL
+.It Fl s
+Only characters considered unsafe to send to a terminal are encoded.
+This flag allows backspace, bell, and carriage return in addition
+to the default space, tab and newline.
+.Pq Dv VIS_SAFE
+.It Fl t
+Tabs are also encoded.
+.Pq Dv VIS_TAB
+.It Fl w
+White space (space-tab-newline) is also encoded.
+.Pq Dv VIS_WHITE
+.El
+.Sh SEE ALSO
+.Xr unvis 1 ,
+.Xr svis 3 ,
+.Xr vis 3
+.Sh HISTORY
+The
+.Nm
+command appears in
+.Bx 4.4 .
diff --git a/usr.bin/vis/vis.c b/usr.bin/vis/vis.c
new file mode 100644 (file)
index 0000000..5dcd2f9
--- /dev/null
@@ -0,0 +1,206 @@
+/*     $NetBSD: vis.c,v 1.15 2009/02/11 06:42:31 wiz Exp $     */
+
+/*-
+ * Copyright (c) 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * 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. 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__COPYRIGHT("@(#) Copyright (c) 1989, 1993\
+ The Regents of the University of California.  All rights reserved.");
+#endif /* not lint */
+
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)vis.c      8.1 (Berkeley) 6/6/93";
+#endif
+__RCSID("$NetBSD: vis.c,v 1.15 2009/02/11 06:42:31 wiz Exp $");
+#endif /* not lint */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <err.h>
+#include <vis.h>
+
+#include "extern.h"
+
+static int eflags, fold, foldwidth = 80, none, markeol;
+#ifdef DEBUG
+int debug;
+#endif
+static char *extra;
+
+static void process(FILE *);
+
+int
+main(int argc, char *argv[])
+{
+       FILE *fp;
+       int ch;
+       int rval;
+
+       while ((ch = getopt(argc, argv, "bcde:F:fhlmnostw")) != -1)
+               switch((char)ch) {
+               case 'b':
+                       eflags |= VIS_NOSLASH;
+                       break;
+               case 'c':
+                       eflags |= VIS_CSTYLE;
+                       break;
+#ifdef DEBUG
+               case 'd':
+                       debug++;
+                       break;
+#endif
+               case 'e':
+                       extra = optarg;
+                       break;
+               case 'F':
+                       if ((foldwidth = atoi(optarg)) < 5) {
+                               errx(1, "can't fold lines to less than 5 cols");
+                               /* NOTREACHED */
+                       }
+                       markeol++;
+                       break;
+               case 'f':
+                       fold++;         /* fold output lines to 80 cols */
+                       break;          /* using hidden newline */
+               case 'h':
+                       eflags |= VIS_HTTPSTYLE;
+                       break;
+               case 'l':
+                       markeol++;      /* mark end of line with \$ */
+                       break;
+               case 'm':
+                       eflags |= VIS_MIMESTYLE;
+                       if (foldwidth == 80)
+                               foldwidth = 76;
+                       break;
+               case 'n':
+                       none++;
+                       break;
+               case 'o':
+                       eflags |= VIS_OCTAL;
+                       break;
+               case 's':
+                       eflags |= VIS_SAFE;
+                       break;
+               case 't':
+                       eflags |= VIS_TAB;
+                       break;
+               case 'w':
+                       eflags |= VIS_WHITE;
+                       break;
+               case '?':
+               default:
+                       (void)fprintf(stderr, 
+                           "Usage: %s [-bcfhlmnostw] [-e extra]" 
+                           " [-F foldwidth] [file ...]\n", getprogname());
+                       return 1;
+               }
+
+       if ((eflags & (VIS_HTTPSTYLE|VIS_MIMESTYLE)) ==
+           (VIS_HTTPSTYLE|VIS_MIMESTYLE))
+               errx(1, "Can't specify -m and -h at the same time");
+
+       argc -= optind;
+       argv += optind;
+
+       rval = 0;
+
+       if (*argv)
+               while (*argv) {
+                       if ((fp = fopen(*argv, "r")) != NULL) {
+                               process(fp);
+                               (void)fclose(fp);
+                       } else {
+                               warn("%s", *argv);
+                               rval = 1;
+                       }
+                       argv++;
+               }
+       else
+               process(stdin);
+       return rval;
+}
+       
+static void
+process(FILE *fp)
+{
+       static int col = 0;
+       static char nul[] = "\0";
+       char *cp = nul + 1;     /* so *(cp-1) starts out != '\n' */
+       int c, rachar; 
+       char buff[5];
+       
+       c = getc(fp);
+       while (c != EOF) {
+               rachar = getc(fp);
+               if (none) {
+                       cp = buff;
+                       *cp++ = c;
+                       if (c == '\\')
+                               *cp++ = '\\';
+                       *cp = '\0';
+               } else if (markeol && c == '\n') {
+                       cp = buff;
+                       if ((eflags & VIS_NOSLASH) == 0)
+                               *cp++ = '\\';
+                       *cp++ = '$';
+                       *cp++ = '\n';
+                       *cp = '\0';
+               } else if (extra)
+                       (void)svis(buff, (char)c, eflags, (char)rachar, extra);
+               else
+                       (void)vis(buff, (char)c, eflags, (char)rachar);
+
+               cp = buff;
+               if (fold) {
+#ifdef DEBUG
+                       if (debug)
+                               (void)printf("<%02d,", col);
+#endif
+                       col = foldit(cp, col, foldwidth, eflags);
+#ifdef DEBUG
+                       if (debug)
+                               (void)printf("%02d>", col);
+#endif
+               }
+               do {
+                       (void)putchar(*cp);
+               } while (*++cp);
+               c = rachar;
+       }
+       /*
+        * terminate partial line with a hidden newline
+        */
+       if (fold && *(cp - 1) != '\n')
+               (void)printf(eflags & VIS_MIMESTYLE ? "=\n" : "\\\n");
+}