/*-------------------------------------- * * 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  .