xref: /minix/external/bsd/nvi/dist/catalog/dump.c (revision 0a6a1f1d)
1 /*	$NetBSD: dump.c,v 1.4 2014/01/28 20:43:55 joerg Exp $ */
2 /*-
3  * Copyright (c) 1992, 1993, 1994
4  *	The Regents of the University of California.  All rights reserved.
5  *
6  * %sccs.include.redist.c%
7  */
8 
9 #if defined(__NetBSD__)
10 #include <sys/cdefs.h>
11 #if 0
12 #ifndef lint
13 static char copyright[] =
14 "%Z% Copyright (c) 1992, 1993, 1994\n\
15 	The Regents of the University of California.  All rights reserved.\n";
16 #endif /* not lint */
17 #else
18 __RCSID("$NetBSD: dump.c,v 1.4 2014/01/28 20:43:55 joerg Exp $");
19 #endif
20 #endif
21 
22 #include <ctype.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25 
26 static void
parse(fp)27 parse(fp)
28 	FILE *fp;
29 {
30 	int ch, s1, s2, s3;
31 
32 #define	TESTD(s) {							\
33 	if ((s = getc(fp)) == EOF)					\
34 		return;							\
35 	if (!isdigit(s))						\
36 		continue;						\
37 }
38 #define	TESTP {								\
39 	if ((ch = getc(fp)) == EOF)					\
40 		return;							\
41 	if (ch != '|')							\
42 		continue;						\
43 }
44 #define	MOVEC(t) {							\
45 	do {								\
46 		if ((ch = getc(fp)) == EOF)				\
47 			return;						\
48 	} while (ch != (t));						\
49 }
50 	for (;;) {
51 		MOVEC('"');
52 		TESTD(s1);
53 		TESTD(s2);
54 		TESTD(s3);
55 		TESTP;
56 		putchar('"');
57 		putchar(s1);
58 		putchar(s2);
59 		putchar(s3);
60 		putchar('|');
61 		for (;;) {		/* dump to end quote. */
62 			if ((ch = getc(fp)) == EOF)
63 				return;
64 			putchar(ch);
65 			if (ch == '"')
66 				break;
67 			if (ch == '\\') {
68 				if ((ch = getc(fp)) == EOF)
69 					return;
70 				putchar(ch);
71 			}
72 		}
73 		putchar('\n');
74 	}
75 }
76 
77 int
main(argc,argv)78 main(argc, argv)
79 	int argc;
80 	char *argv[];
81 {
82 	FILE *fp;
83 
84 	for (; *argv != NULL; ++argv) {
85 		if ((fp = fopen(*argv, "r")) == NULL) {
86 			perror(*argv);
87 			exit (1);
88 		}
89 		parse(fp);
90 		(void)fclose(fp);
91 	}
92 	exit (0);
93 }
94