Importing usr.bin/vis

No Minix-specific changes needed.

Change-Id: I52e7a0b15553b6f067d82d568f3793c5b6ac2a77
This commit is contained in:
Thomas Cort 2013-10-27 21:12:56 -04:00
parent f1f496697e
commit 06f01a55d2
8 changed files with 480 additions and 1 deletions

View file

@ -539,6 +539,7 @@
./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
@ -2101,6 +2102,7 @@
./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

View file

@ -219,6 +219,7 @@
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

View 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

7
usr.bin/vis/Makefile Normal file
View file

@ -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>

39
usr.bin/vis/extern.h Normal file
View file

@ -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);

78
usr.bin/vis/foldit.c Normal file
View file

@ -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);
}

146
usr.bin/vis/vis.1 Normal file
View file

@ -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 .

206
usr.bin/vis/vis.c Normal file
View file

@ -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");
}