/*
 * Strings 1.0
 *
 * Public Domain 1992 Dan Zerkle
 *
 * See documentation file for usage.
 */

#include <stdio.h>

#define BUFSIZE 1024

static char *title0 = "\0Strings 1.0 February 1992";
static char *title1 = "\0This program Public Domain 1992 Dan Zerkle";
static char *title2 = "\0Please e-mail zerkle@cs.ucdavis.edu";

main (argc, argv)
  int argc; char **argv;

{
  int asccount=0;
  int ccount=0;
  int in;
  int minlen=6;
  char string[BUFSIZE];
  int newline='1';

  FILE *infile;

  while ((argc>1) && (argv[1][0]=='-'))
    {
	  if (argv[1][1]=='n')
	    newline=0;
	  else if ((argv[1][1]>='0') && (argv[1][1]<='9'))
		minlen=(-atoi(argv[1]));
	  else
	    {
		  fprintf(stderr,"Unknown option %s\n",argv[1]);
		  fprintf(stderr,"USAGE: strings [-n] [-<minsize>] [<filename>]\n");
		  exit(1);
		}

      argc--;argv++;
	} /* if */

  if (minlen>=BUFSIZE)
    minlen=BUFSIZE-1;

  if (argc > 1)
    {
      if (!(infile=fopen(argv[1],"rb")))
	    {
	      fprintf(stderr,"Can't open file %s\n",argv[1]);
		  exit(1);
	    }
	} /* if */
  else
    infile=stdin;

  string[minlen-1]=0;

  while((in=getc(infile))!=EOF)
    {
	  ccount++;
      if ((in < ' ') || (in > '~'))
	    {
		  if ((asccount>=minlen) && newline)
		    putchar('\n');
		  asccount=0;
		} /* if */

	  else
	    {
		  if (++asccount <= minlen-1)
		    string[asccount-1]=in;
		  else if (asccount == minlen)
			{
		      fputs(string,stdout);
			  putchar(in);
			} /* else if */
		  else
		    putchar(in);

		}  /* else */
    } /* while */

  if (asccount && newline)
    putchar('\n');

  exit(0);
} /* main */
