home *** CD-ROM | disk | FTP | other *** search
- /*--------------------------------------
- *
- * fs - find string
- *
- * Usage: fs str files ....
- *
- * Description:
- * Finds the string "str" in the
- * named files. Ignores cases.
- * Gives line numbers "str" is found on.
- * Uses directed io, so one can use:
- * "fs str1 file |fs str2".
- *
- * Author: Dan Sunday
- * Date: 11-1-81
- *--------------------------------------*/
-
- #include "a:bdscio.h"
- #include "b:dio.h"
-
- FILE *infile;
- char inbuf [BUFSIZ],
- line [128];
-
-
- main (argc,argv) /* fs string file1 file2 ... */
- char **argv;
- begin
- int i,k,n,f;
- char *ap,**p,*pat;
-
- dioinit(&argc,argv);
- infile = inbuf;
-
- if (argc < 2)
- begin
- fprintf (4,"Usage: 'fs string file1 [file2 ...]'");
- dioflush();
- exit (ERROR);
- end
-
- p = argv + 1;
- pat = *p++;
- f = 1;
-
- if (argc==2)
- begin
- infile = 0;
- ap = "\0";
- getchar(); ungetch();
- goto StdIn;
- end
-
- while (++f < argc)
- begin
- ap = *p++;
- if (fopen (ap,infile) == ERROR)
- begin
- printf ("can't open %s\n",ap);
- dioflush();
- exit (ERROR);
- end
- StdIn:
- for (i=1;;++i)
- begin
- if (fgets (line,infile) == NULL)
- break;
- if (substr (pat,line))
- begin
- putchar('!');
- printf ("%s :%d: %s",
- ap, i, line);
- end
- end
- end
-
- dioflush();
- exit (OK);
- end
-
-
- substr (pat,str)
- char *pat,*str;
- begin
- int i,j,k,l;
- char *p,*q;
- i = 0;
- k = strlen (pat);
- l = strlen (str);
-
- while (i+k < l)
- begin
- p = pat + k;
- q = str + i + k;
- j = k;
-
- while (j--)
- if (*--p != toupper(*--q))
- break;
- else if (j==0) return TRUE;
- ++i;
- end
-
- return FALSE;
- end