Importing usr.bin/vis
No Minix-specific changes needed. Change-Id: I52e7a0b15553b6f067d82d568f3793c5b6ac2a77
This commit is contained in:
parent
f1f496697e
commit
06f01a55d2
8 changed files with 480 additions and 1 deletions
|
@ -539,6 +539,7 @@
|
||||||
./usr/bin/version minix-sys
|
./usr/bin/version minix-sys
|
||||||
./usr/bin/vi minix-sys
|
./usr/bin/vi minix-sys
|
||||||
./usr/bin/view minix-sys
|
./usr/bin/view minix-sys
|
||||||
|
./usr/bin/vis minix-sys
|
||||||
./usr/bin/vol minix-sys
|
./usr/bin/vol minix-sys
|
||||||
./usr/bin/wc minix-sys
|
./usr/bin/wc minix-sys
|
||||||
./usr/bin/whatis minix-sys
|
./usr/bin/whatis minix-sys
|
||||||
|
@ -2101,6 +2102,7 @@
|
||||||
./usr/man/man1/uuidgen.1 minix-sys
|
./usr/man/man1/uuidgen.1 minix-sys
|
||||||
./usr/man/man1/vi.1 minix-sys
|
./usr/man/man1/vi.1 minix-sys
|
||||||
./usr/man/man1/view.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/vol.1 minix-sys
|
||||||
./usr/man/man1/wait.1 minix-sys
|
./usr/man/man1/wait.1 minix-sys
|
||||||
./usr/man/man1/wc.1 minix-sys
|
./usr/man/man1/wc.1 minix-sys
|
||||||
|
|
|
@ -219,6 +219,7 @@
|
||||||
2013/10/14 12:00:00,usr.bin/unzip
|
2013/10/14 12:00:00,usr.bin/unzip
|
||||||
2013/10/14 12:00:00,usr.bin/users
|
2013/10/14 12:00:00,usr.bin/users
|
||||||
2013/10/23 12:00:00,usr.bin/uuidgen
|
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
|
2012/10/17 12:00:00,usr.bin/wc
|
||||||
2013/03/22 12:00:00,usr.bin/whatis
|
2013/03/22 12:00:00,usr.bin/whatis
|
||||||
2013/03/15 12:00:00,usr.bin/who
|
2013/03/15 12:00:00,usr.bin/who
|
||||||
|
|
|
@ -29,7 +29,7 @@ SUBDIR= asa \
|
||||||
tr tsort unexpand \
|
tr tsort unexpand \
|
||||||
toproto \
|
toproto \
|
||||||
uniq units unzip users \
|
uniq units unzip users \
|
||||||
uuidgen \
|
uuidgen vis \
|
||||||
\
|
\
|
||||||
wc whatis who whois \
|
wc whatis who whois \
|
||||||
write xargs xinstall yes
|
write xargs xinstall yes
|
||||||
|
|
7
usr.bin/vis/Makefile
Normal file
7
usr.bin/vis/Makefile
Normal 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
39
usr.bin/vis/extern.h
Normal 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
78
usr.bin/vis/foldit.c
Normal 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
146
usr.bin/vis/vis.1
Normal 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
206
usr.bin/vis/vis.c
Normal 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");
|
||||||
|
}
|
Loading…
Reference in a new issue