|
|
1.1 root 1: /*-
2: * Copyright (c) 1989 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted provided
6: * that: (1) source distributions retain this entire copyright notice and
7: * comment, and (2) distributions including binaries display the following
8: * acknowledgement: ``This product includes software developed by the
9: * University of California, Berkeley and its contributors'' in the
10: * documentation or other materials provided with the distribution and in
11: * all advertising materials mentioning features or use of this software.
12: * Neither the name of the University nor the names of its contributors may
13: * be used to endorse or promote products derived from this software without
14: * specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
16: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
17: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: */
19:
20: #ifndef lint
21: char copyright[] =
22: "@(#) Copyright (c) 1989 The Regents of the University of California.\n\
23: All rights reserved.\n";
24: #endif /* not lint */
25:
26: #ifndef lint
27: static char sccsid[] = "@(#)unvis.c 5.1 (Berkeley) 6/1/90";
28: #endif /* not lint */
29:
30: #include <stdio.h>
31: #include <vis.h>
32:
33: char *Program;
34: #define usage() fprintf(stderr, "usage: %s %s\n", Program, USAGE)
35: #define USAGE "[file...]"
36:
37: main(argc, argv)
38: char *argv[];
39: {
40: FILE *fp;
41: extern char *optarg;
42: extern int optind;
43: int ch;
44:
45: Program = argv[0];
46: while ((ch = getopt(argc, argv, "")) != EOF)
47: switch((char)ch) {
48: case '?':
49: default:
50: usage();
51: exit(1);
52: }
53: argc -= optind;
54: argv += optind;
55:
56: if (*argv)
57: while (*argv) {
58: if ((fp=fopen(*argv, "r")) != NULL)
59: process(fp, *argv);
60: else
61: syserror("%s", *argv);
62: argv++;
63: }
64: else
65: process(stdin, "<stdin>");
66: exit(0);
67: }
68:
69: process(fp, filename)
70: FILE *fp;
71: char *filename;
72: {
73: register int offset = 0, c, ret;
74: int state = 0;
75: char outc;
76:
77: while ((c = getc(fp)) != EOF) {
78: offset++;
79: again:
80: switch(ret = unvis(&outc, (char)c, &state, 0)) {
81: case UNVIS_VALID:
82: putchar(outc);
83: break;
84: case UNVIS_VALIDPUSH:
85: putchar(outc);
86: goto again;
87: case UNVIS_SYNBAD:
88: error("%s: offset: %d: can't decode", filename, offset);
89: state = 0;
90: break;
91: case 0:
92: case UNVIS_NOCHAR:
93: break;
94: default:
95: error("bad return value (%d), can't happen", ret);
96: exit(1);
97: }
98: }
99: if (unvis(&outc, (char)0, &state, UNVIS_END) == UNVIS_VALID)
100: putchar(outc);
101: }
102:
103: #include <varargs.h>
104:
105: error(va_alist)
106: va_dcl
107: {
108: char *fmt;
109: va_list ap;
110: extern errno;
111:
112: fprintf(stderr, "%s: ", Program);
113: va_start(ap);
114: fmt = va_arg(ap, char *);
115: (void) vfprintf(stderr, fmt, ap);
116: va_end(ap);
117: fprintf(stderr, "\n");
118: }
119:
120: syserror(va_alist)
121: va_dcl
122: {
123: char *fmt;
124: va_list ap;
125: extern errno;
126:
127: fprintf(stderr, "%s: ", Program);
128: va_start(ap);
129: fmt = va_arg(ap, char *);
130: (void) vfprintf(stderr, fmt, ap);
131: va_end(ap);
132: fprintf(stderr, ": %s\n", strerror(errno));
133: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.