Home | History | Annotate | Line # | Download | only in catalog
      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
     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
     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