From 4918b88317f39c2aeca7b3b066863254f9dcc976 Mon Sep 17 00:00:00 2001 From: Christian Neukirchen Date: Thu, 31 Jul 2014 20:19:44 +0200 Subject: import vis and unvis --- src/usr.bin/unvis/Makefile | 5 +++ src/usr.bin/unvis/unvis | Bin 0 -> 11224 bytes src/usr.bin/unvis/unvis.1 | 56 +++++++++++++++++++++++++ src/usr.bin/unvis/unvis.c | 101 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 162 insertions(+) create mode 100644 src/usr.bin/unvis/Makefile create mode 100755 src/usr.bin/unvis/unvis create mode 100644 src/usr.bin/unvis/unvis.1 create mode 100644 src/usr.bin/unvis/unvis.c (limited to 'src/usr.bin/unvis') diff --git a/src/usr.bin/unvis/Makefile b/src/usr.bin/unvis/Makefile new file mode 100644 index 0000000..9b6e0f9 --- /dev/null +++ b/src/usr.bin/unvis/Makefile @@ -0,0 +1,5 @@ +# $OpenBSD: Makefile,v 1.3 1997/09/21 11:51:36 deraadt Exp $ + +PROG= unvis + +.include diff --git a/src/usr.bin/unvis/unvis b/src/usr.bin/unvis/unvis new file mode 100755 index 0000000..6b52842 Binary files /dev/null and b/src/usr.bin/unvis/unvis differ diff --git a/src/usr.bin/unvis/unvis.1 b/src/usr.bin/unvis/unvis.1 new file mode 100644 index 0000000..c112dbf --- /dev/null +++ b/src/usr.bin/unvis/unvis.1 @@ -0,0 +1,56 @@ +.\" $OpenBSD: unvis.1,v 1.8 2013/08/12 14:19:53 jmc Exp $ +.\" $NetBSD: unvis.1,v 1.3 1994/12/06 07:36:08 jtc 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 $Mdocdate: August 12 2013 $ +.Dt UNVIS 1 +.Os +.Sh NAME +.Nm unvis +.Nd revert a visual representation of data back to original form +.Sh SYNOPSIS +.Nm unvis +.Op Ar +.Sh DESCRIPTION +.Nm unvis +is the inverse function of +.Xr vis 1 . +It reverts +a visual representation of data back to its original form on standard output. +.Sh SEE ALSO +.Xr vis 1 , +.Xr unvis 3 , +.Xr vis 3 +.Sh HISTORY +The +.Nm +command appeared in +.Bx 4.4 . diff --git a/src/usr.bin/unvis/unvis.c b/src/usr.bin/unvis/unvis.c new file mode 100644 index 0000000..c5cd008 --- /dev/null +++ b/src/usr.bin/unvis/unvis.c @@ -0,0 +1,101 @@ +/* $OpenBSD: unvis.c,v 1.12 2014/01/22 09:45:21 jsg 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 +#include +#include +#include +#include + +void process(FILE *fp, const char *filename); + +int +main(int argc, char *argv[]) +{ + FILE *fp; + int ch; + + while ((ch = getopt(argc, argv, "")) != -1) + switch(ch) { + case '?': + default: + (void) fprintf(stderr, "usage: unvis [file ...]\n"); + exit(1); + } + argc -= optind; + argv += optind; + + if (*argv) + while (*argv) { + if ((fp=fopen(*argv, "r")) != NULL) { + process(fp, *argv); + fclose(fp); + } else + warn("%s", *argv); + argv++; + } + else + process(stdin, ""); + exit(0); +} + +void +process(FILE *fp, const char *filename) +{ + int offset = 0, c, ret; + int state = 0; + char outc; + + while ((c = getc(fp)) != EOF) { + offset++; + again: + switch(ret = unvis(&outc, (char)c, &state, 0)) { + case UNVIS_VALID: + putchar(outc); + break; + case UNVIS_VALIDPUSH: + 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, UNVIS_END) == UNVIS_VALID) + putchar(outc); +} -- cgit 1.4.1