|
|
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
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: char copyright[] =
20: "@(#) Copyright (c) 1989 The Regents of the University of California.\n\
21: All rights reserved.\n";
22: #endif /* not lint */
23:
24: #ifndef lint
25: static char sccsid[] = "@(#)vis.c 1.2 (Berkeley) 6/29/90";
26: #endif /* not lint */
27:
28: #include <stdio.h>
29: #include <vis.h>
30:
31: int eflags, fold, foldwidth=80, none, markeol, debug;
32:
33: main(argc, argv)
34: char *argv[];
35: {
36: extern char *optarg;
37: extern int optind;
38: extern int errno;
39: FILE *fp;
40: int ch;
41:
42: while ((ch = getopt(argc, argv, "nwctsobfF:ld")) != EOF)
43: switch((char)ch) {
44: case 'n':
45: none++;
46: break;
47: case 'w':
48: eflags |= VIS_WHITE;
49: break;
50: case 'c':
51: eflags |= VIS_CSTYLE;
52: break;
53: case 't':
54: eflags |= VIS_TAB;
55: break;
56: case 's':
57: eflags |= VIS_SAFE;
58: break;
59: case 'o':
60: eflags |= VIS_OCTAL;
61: break;
62: case 'b':
63: eflags |= VIS_NOSLASH;
64: break;
65: case 'F':
66: if ((foldwidth = atoi(optarg))<5) {
67: fprintf(stderr,
68: "vis: can't fold lines to less than 5 cols\n");
69: exit(1);
70: }
71: /*FALLTHROUGH*/
72: case 'f':
73: fold++; /* fold output lines to 80 cols */
74: break; /* using hidden newline */
75: case 'l':
76: markeol++; /* mark end of line with \$ */
77: break;
78: #ifdef DEBUG
79: case 'd':
80: debug++;
81: break;
82: #endif
83: case '?':
84: default:
85: fprintf(stderr,
86: "usage: vis [-nwctsobf] [-F foldwidth]\n");
87: exit(1);
88: }
89: argc -= optind;
90: argv += optind;
91:
92: if (*argv)
93: while (*argv) {
94: if ((fp=fopen(*argv, "r")) != NULL)
95: process(fp, *argv);
96: else
97: fprintf(stderr, "vis: %s: %s\n", *argv,
98: (char *)strerror(errno));
99: argv++;
100: }
101: else
102: process(stdin, "<stdin>");
103: exit(0);
104: }
105:
106: process(fp, filename)
107: FILE *fp;
108: char *filename;
109: {
110: static int col = 0;
111: register char *cp = "\0"+1; /* so *(cp-1) starts out != '\n' */
112: register int c, rachar;
113: register char nc;
114: char buff[5];
115:
116: c = getc(fp);
117: while (c != EOF) {
118: rachar = getc(fp);
119: if (none) {
120: cp = buff;
121: *cp++ = c;
122: if (c == '\\')
123: *cp++ = '\\';
124: *cp = '\0';
125: } else if (markeol && c == '\n') {
126: cp = buff;
127: if ((eflags & VIS_NOSLASH) == 0)
128: *cp++ = '\\';
129: *cp++ = '$';
130: *cp++ = '\n';
131: *cp = '\0';
132: } else
133: (void) vis(buff, (char)c, eflags, (char)rachar);
134:
135: cp = buff;
136: if (fold) {
137: #ifdef DEBUG
138: if (debug)
139: printf("<%02d,", col);
140: #endif
141: col = foldit(cp, col, foldwidth);
142: #ifdef DEBUG
143: if (debug)
144: printf("%02d>", col);
145: #endif
146: }
147: do {
148: putchar(*cp);
149: } while (*++cp);
150: c = rachar;
151: }
152: /*
153: * terminate partial line with a hidden newline
154: */
155: if (fold && *(cp-1) != '\n')
156: printf("\\\n");
157: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.