home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 21 / CD_ASCQ_21_040595.iso / dos / prg / c / freedos3 / source / jh_utils / find.c < prev    next >
C/C++ Source or Header  |  1995-01-07  |  3KB  |  110 lines

  1. /*
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.  
  7.    This program is distributed in the hope that it will be useful,
  8.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.    GNU General Public License for more details.
  11.  
  12.    You should have received a copy of the GNU General Public License
  13.    along with this program; if not, write to the Free Software
  14.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  15.    */
  16.  
  17. /************************************************************************
  18.  * This program locates a string in a text file and prints those lines
  19.  * that contain the string.  Multiple files are clearly separated.
  20.  *
  21.  * Author: James Hall
  22.  */
  23.  
  24. #include <stdio.h>
  25. #include <string.h>
  26. #include <ctype.h>
  27. #include "getopt.h"
  28. #include "freedos.h"
  29.  
  30.  
  31. void usage (void);
  32.  
  33.  
  34. main (int argc, char **argv)
  35. {
  36.  
  37.   int c, i, iNot = FALSE, iCount = FALSE, iNum = FALSE, iIgnore = FALSE;
  38.   char szBuf[MAX_STR];
  39.   FILE *p;
  40.  
  41.   /* Scan the command line */
  42.  
  43.   while ((c = getopt (argc, argv, "cCiInNvV?")) != EOF)
  44.     {
  45.       switch (c)
  46.     {
  47.     case 'c':
  48.     case 'C':        /* Count */
  49.       iCount = TRUE;
  50.       break;
  51.     case 'i':
  52.     case 'I':        /* Ignore */
  53.       iIgnore = TRUE;
  54.       break;
  55.     case 'n':
  56.     case 'N':        /* Number */
  57.       iNum = TRUE;
  58.       break;
  59.     case 'v':
  60.     case 'V':        /* Not with */
  61.       iNot = TRUE;
  62.       break;
  63.     default:
  64.       usage ();
  65.       break;
  66.     }
  67.     }
  68.  
  69.   /* Get the string */
  70.  
  71.   if ((c = optind) >= argc)
  72.     usage ();
  73.  
  74.   else
  75.     strcpy (szBuf, argv[c++]);
  76.  
  77.   /* Read the files */
  78.  
  79.   if ((argc - c) == 0)
  80.     ffind (szBuf, stdin, iNot, iCount, iNum, iIgnore);
  81.  
  82.   for (i = c; i < argc; i++)
  83.     {
  84.       if ((p = fopen (argv[i], "r")) != NULL)
  85.     {
  86.       printf ("=================== %s\n", argv[i]);
  87.       ffind (szBuf, p, iNot, iCount, iNum, iIgnore);
  88.       fclose (p);
  89.     }
  90.  
  91.       else
  92.     fprintf (stderr, "Could not open %s\n", argv[i]);
  93.     }
  94.  
  95.   exit (0);
  96. }
  97.  
  98.  
  99. void 
  100. usage (void)
  101. {
  102.   printp ("FIND", "Prints all lines of a file that contain a string.");
  103.   printu ("FIND", "[/C] [/I] [/N] [/V] \"string\" [file..]");
  104.   printo ("/C", "Count the number of occurrences of the string");
  105.   printo ("/I", "Ignore case");
  106.   printo ("/N", "Number the displayed lines, starting with 1");
  107.   printo ("/V", "Just print the lines that don\'t contain the string");
  108.   exit (1);
  109. }
  110.