diff --git a/distrib/sets/lists/minix/mi b/distrib/sets/lists/minix/mi index 192860848..006209e9d 100644 --- a/distrib/sets/lists/minix/mi +++ b/distrib/sets/lists/minix/mi @@ -526,6 +526,7 @@ ./usr/bin/units minix-sys ./usr/bin/unlzma minix-sys ./usr/bin/unstack minix-sys +./usr/bin/unvis minix-sys ./usr/bin/unxz minix-sys ./usr/bin/unzip minix-sys ./usr/bin/update minix-sys @@ -2094,6 +2095,7 @@ ./usr/man/man1/units.1 minix-sys ./usr/man/man1/unlzma.1 minix-sys ./usr/man/man1/unset.1 minix-sys +./usr/man/man1/unvis.1 minix-sys ./usr/man/man1/unxz.1 minix-sys ./usr/man/man1/unzip.1 minix-sys ./usr/man/man1/users.1 minix-sys diff --git a/releasetools/nbsd_ports b/releasetools/nbsd_ports index 6c710bf98..d28f4212b 100644 --- a/releasetools/nbsd_ports +++ b/releasetools/nbsd_ports @@ -216,6 +216,7 @@ 2012/10/17 12:00:00,usr.bin/tsort 2010/10/06 07:59:18,usr.bin/uniq 2013/10/23 12:00:00,usr.bin/units +2012/10/17 12:00:00,usr.bin/unvis 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 diff --git a/usr.bin/Makefile b/usr.bin/Makefile index 356e11582..6d4d889f4 100644 --- a/usr.bin/Makefile +++ b/usr.bin/Makefile @@ -28,7 +28,7 @@ SUBDIR= asa \ tee tic tput \ tr tsort unexpand \ toproto \ - uniq units unzip users \ + uniq units unvis unzip users \ uuidgen vis \ \ wc whatis who whois \ diff --git a/usr.bin/unvis/Makefile b/usr.bin/unvis/Makefile new file mode 100644 index 000000000..677e61d94 --- /dev/null +++ b/usr.bin/unvis/Makefile @@ -0,0 +1,6 @@ +# $NetBSD: Makefile,v 1.3 1994/12/06 07:36:07 jtc Exp $ +# @(#)Makefile 8.1 (Berkeley) 6/6/93 + +PROG= unvis + +.include diff --git a/usr.bin/unvis/unvis.1 b/usr.bin/unvis/unvis.1 new file mode 100644 index 000000000..6c34c89c3 --- /dev/null +++ b/usr.bin/unvis/unvis.1 @@ -0,0 +1,80 @@ +.\" $NetBSD: unvis.1,v 1.9 2010/11/28 01:33:37 wiz Exp $ +.\" +.\" Copyright (c) 1989, 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. +.\" +.\" @(#)unvis.1 8.1 (Berkeley) 6/6/93 +.\" +.Dd November 27, 2010 +.Dt UNVIS 1 +.Os +.Sh NAME +.Nm unvis +.Nd "revert a visual representation of data back to original form" +.Sh SYNOPSIS +.Nm +.Op Fl e +.Op Fl Hh | Fl m +.Op Ar file ... +.Sh DESCRIPTION +.Nm +is the inverse function of +.Xr vis 1 . +It reverts +a visual representation of data back to its original form on standard output. +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl e +Don't decode \e escaped sequences. +.It Fl H +Decode using the URI encoding from RFC 1866. +.Pq Dv VIS_HTTP1866 +.It Fl h +Decode using the URI encoding from RFC 1808. +.Pq Dv VIS_HTTP1808 +.It Fl m +Decode using mime style. +.Pq Dv VIS_MIMESTYLE +.El +.Pp +Mixing +.Fl h +or +.Fl H +with +.Fl m +is not supported. +.Sh SEE ALSO +.Xr vis 1 , +.Xr unvis 3 , +.Xr vis 3 +.Sh HISTORY +The +.Nm +command appears in +.Bx 4.4 . diff --git a/usr.bin/unvis/unvis.c b/usr.bin/unvis/unvis.c new file mode 100644 index 000000000..d854a3731 --- /dev/null +++ b/usr.bin/unvis/unvis.c @@ -0,0 +1,138 @@ +/* $NetBSD: unvis.c,v 1.13 2010/11/27 19:46:25 christos 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 +#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[] = "@(#)unvis.c 8.1 (Berkeley) 6/6/93"; +#endif +__RCSID("$NetBSD: unvis.c,v 1.13 2010/11/27 19:46:25 christos Exp $"); +#endif /* not lint */ + +#include +#include +#include +#include +#include + +static void process(FILE *, const char *, int); + +int +main(int argc, char *argv[]) +{ + FILE *fp; + int ch, eflags = 0; + + setprogname(argv[0]); + while ((ch = getopt(argc, argv, "eHhm")) != -1) + switch((char)ch) { + case 'e': + eflags |= VIS_NOESCAPE; + break; + case 'H': + eflags |= VIS_HTTP1866; + break; + case 'h': + eflags |= VIS_HTTP1808; + break; + case 'm': + eflags |= VIS_MIMESTYLE; + break; + case '?': + default: + (void)fprintf(stderr, + "Usage: %s [-e] [-Hh | -m] [file...]\n", + getprogname()); + return EXIT_FAILURE; + } + argc -= optind; + argv += optind; + + switch (eflags & (VIS_HTTP1808|VIS_HTTP1866|VIS_MIMESTYLE)) { + case VIS_HTTP1808|VIS_MIMESTYLE: + case VIS_HTTP1866|VIS_MIMESTYLE: + case VIS_HTTP1808|VIS_HTTP1866|VIS_MIMESTYLE: + errx(EXIT_FAILURE, "Can't mix -m with -h and/or -H"); + /*NOTREACHED*/ + default: + break; + } + + if (*argv) + while (*argv) { + if ((fp = fopen(*argv, "r")) != NULL) + process(fp, *argv, eflags); + else + warn("%s", *argv); + argv++; + } + else + process(stdin, "", eflags); + return EXIT_SUCCESS; +} + +static void +process(FILE *fp, const char *filename, int eflags) +{ + int offset = 0, c, ret; + int state = 0; + char outc; + + while ((c = getc(fp)) != EOF) { + offset++; + again: + switch(ret = unvis(&outc, (char)c, &state, eflags)) { + case UNVIS_VALID: + (void)putchar(outc); + break; + case UNVIS_VALIDPUSH: + (void)putchar(outc); + goto again; + case UNVIS_SYNBAD: + warnx("%s: offset: %d: can't decode", filename, offset); + state = 0; + break; + case 0: + case UNVIS_NOCHAR: + break; + default: + errx(1, "bad return value (%d), can't happen", ret); + /* NOTREACHED */ + } + } + if (unvis(&outc, (char)0, &state, eflags | UNVIS_END) == UNVIS_VALID) + (void)putchar(outc); +}