#include <stdio.h>
#include <string.h>

enum dump_type_t { NAME, ADDR, FOCUS, BAD } ;

main(int argc, char *argv[])
{
  if (argc > 2) {
    enum dump_type_t dump_type ;
    
    if (!strcmp(argv[2], "name")) dump_type = NAME ;
    else if (!strcmp(argv[2], "addr")) dump_type = ADDR ;
    else if (!strcmp(argv[2], "focus")) dump_type = FOCUS ;
    else dump_type = BAD ;

    if (dump_type != BAD) {
      FILE *in_fp ;

      in_fp = fopen(argv[1], "r") ;
      if (in_fp != NULL) {
	while (!feof(in_fp)) {
	  static char s[80] ;

	  if (dump_type == NAME) printf("qqqnamestart\n") ;

	  /* first name */
	  do {
	    fgets(s, 80, in_fp) ;
	    if (!feof(in_fp) && s[0] != '-') {
	      if (dump_type == NAME)
		printf("%s", s) ;
	    }
	  } while (!feof(in_fp) && s[0] != '-') ;

	  /* last name */
	  do {
	    fgets(s, 80, in_fp) ;
	    if (!feof(in_fp) && s[0] != '-') {
	      if (dump_type == NAME)
		printf("%s", s) ;
	      printf("qqqlast%c\n", s[0]) ; /* for letter-based pages */
	    }
	  } while (!feof(in_fp) && s[0] != '-') ;

	  if (dump_type == NAME) printf("qqqnameend\n") ;

	  if (dump_type == ADDR) printf("qqqaddrstart\n") ;

	  /* non-email address */
	  do {
	    fgets(s, 80, in_fp) ;
	    if (!feof(in_fp) && dump_type == ADDR && s[0] != '-')
	      printf("%s", s) ;
	  } while (!feof(in_fp) && s[0] != '-') ;

	  if (dump_type == ADDR) { 
	    printf("qqqaddrend\n") ;
	    printf("qqqphonestart\n") ;
	  }

	  /* phone/fax */
	  do {
	    fgets(s, 80, in_fp) ;
	    if (!feof(in_fp) && dump_type == ADDR && s[0] != '-') {
	      if (strncmp(s, "no phone", 8))
		printf("%s", s) ;
	    }
	  } while (!feof(in_fp) && s[0] != '-') ;

	  if (dump_type == ADDR) {
	    printf("qqqphoneend\n") ;
	    printf("qqqemailstart\n") ;
	  }

	  /* email address */
	  do {
	    fgets(s, 80, in_fp) ;
	    if (!feof(in_fp) && dump_type == ADDR && s[0] != '-') {
	      if (strncmp(s, "no email", strlen("no email"))) {
		char *t, *u ;
		t = s ;
		t[(int)strlen(t)-1] = '\0' ;
		do {
		  u = strstr(t, " OR ") ;
		  if (u != NULL) 
		    u[0] = '\0' ;
		  printf("%s\n", t) ;
		  if (u != NULL)
		    t = u+4 ;
		} while (u != NULL) ;
	      }
	    }
	  } while (!feof(in_fp) && s[0] != '-') ;

	  if (dump_type == ADDR) printf("qqqemailend\n") ;

	  if (dump_type == FOCUS) printf("qqqfocusstart\n") ;

	  do {
	    fgets(s, 80, in_fp) ;
	    if (!feof(in_fp) && dump_type == FOCUS  && s[0] != '=') {
	      if (strncmp(s, "no focus", strlen("no focus")))
		printf("%s", s) ;
	    }
	  } while (!feof(in_fp) && s[0] != '=') ;

	  if (dump_type == FOCUS) printf("qqqfocusend\n") ;

	  if (!feof(in_fp)) printf("%c\n", (char)2) ;
	}
      }
      else fprintf(stderr, "Unable to open input file.\n") ;
    }
    else fprintf(stderr, "Bad dump type requested.\n") ;
  } 
  else 
    fprintf(stderr, "Usage: dumper input_file \"name\"|\"addr\"|\"focus\"\n") ;
}
