home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / compsrcs / apple2 / 37 < prev    next >
Encoding:
Text File  |  1990-12-02  |  3.2 KB  |  179 lines

  1. Path: wuarchive!usc!rutgers!aramis.rutgers.edu!paul.rutgers.edu!yoko.rutgers.edu!jac
  2. From: jac@yoko.rutgers.edu (Jonathan A. Chandross)
  3. Newsgroups: comp.sources.apple2
  4. Subject: v001SRC013:  fgrep (Fixed String Pattern Matcher)
  5. Message-ID: <Dec.1.16.48.25.1990.24678@yoko.rutgers.edu>
  6. Date: 1 Dec 90 21:48:26 GMT
  7. Organization: Rutgers Univ., New Brunswick, N.J.
  8. Lines: 168
  9. Approved: jac@paul.rutgers.edu
  10.  
  11.  
  12. Submitted-by: NONE
  13. Posting-number: Volume 1, Source:13
  14. Archive-name: util/fgrep
  15. Architecture: ANY_2
  16. Version-number: 1.00
  17.  
  18. This program is a fixed string pattern matcher (i.e. no regular
  19. expressions).
  20.  
  21. Enjoy.
  22.  
  23. =fgrep.c
  24. -/*
  25. - *
  26. - * fgrep.c
  27. - *
  28. - * Fast pattern matcher for fixed strings (no regular expressions).
  29. - *
  30. - * Usage:
  31. - *     fgrep [-nx] pattern [file_1] [file_2] [file_3] [...]
  32. - *
  33. - *     Options:
  34. - *        -x    print lines that do not patch pattern
  35. - *        -n    print out line number
  36. - *
  37. - *     If no file is specified, fgrep reads from standard in.
  38. - *
  39. - * Contributed Anonymously.  Written: November 1983
  40. - *
  41. - * Version 1.00
  42. - *
  43. - */
  44. -
  45. -#include "stdio.h"
  46. -
  47. -#define TRUE  1
  48. -#define FALSE 0
  49. -#define MAXLINE 256
  50. -#define BLANK ' '
  51. -#define TAB   '\t'
  52. -#define NL    '\n'
  53. -#define EOS   '\0'
  54. -
  55. -int numbering, except, files ;
  56. -char *fname ;
  57. -
  58. -main(argc, argv)
  59. -int argc ;
  60. -char *argv[] ;
  61. -{
  62. -    char *s, *pattern ;
  63. -    FILE *input ;
  64. -
  65. -
  66. -    numbering = except = files = FALSE ;
  67. -
  68. -    while( --argc>0 && **++argv == '-' )
  69. -        for( s=&argv[0][1] ; *s != EOS ; s++ )
  70. -            switch( *s ) {
  71. -                case 'n':
  72. -                    numbering = TRUE ;
  73. -                    break ;
  74. -                case 'x':
  75. -                    except = TRUE ;
  76. -                    break ;
  77. -                default:
  78. -                    fprintf(stderr, "fgrep: unknown option %c\n", *s ) ;
  79. -                    argc = -1 ;
  80. -                    break ;
  81. -            }
  82. -
  83. -    if( argc <= 0 ) {
  84. -        fprintf(stderr, "usage: fgrep [-nx] pattern [files]\n");
  85. -        exit(1) ;
  86. -    }
  87. -
  88. -    pattern = *argv ;
  89. -    argc-- ; argv++ ;
  90. -
  91. -    if( argc > 1 )
  92. -        files = TRUE ;
  93. -
  94. -    if( argc == 0 )
  95. -        fgrep( stdin, pattern ) ;
  96. -
  97. -    else
  98. -        for( ; argc>0 ; argc--,argv++)
  99. -            if( (input=fopen(*argv,"r")) == NULL ) {
  100. -                fprintf(stderr, "fgrep: can't open %s\n", *argv) ;
  101. -                exit(1) ;
  102. -            }
  103. -            else {
  104. -                fname = *argv ;
  105. -                fgrep(input, pattern) ;
  106. -                fclose( input ) ;
  107. -            }
  108. -
  109. -    exit(0) ;
  110. -
  111. -} /* end main */
  112. -
  113. -/* fgrep - match pattern to file */
  114. -
  115. -fgrep( in, pat )
  116. -FILE *in ;
  117. -char *pat ;
  118. -{
  119. -    char line[ MAXLINE ], *fgets() ;
  120. -    int lines ;
  121. -
  122. -
  123. -    lines = 0 ;
  124. -    while( fgets(line, MAXLINE, in) != NULL ) {
  125. -        lines++ ;
  126. -        if( (match(line, pat) >= 0) != except ) {
  127. -            if( files )
  128. -                printf("%s: ", fname ) ;
  129. -            if( numbering )
  130. -                printf("%d: ", lines ) ;
  131. -            printf("%s", line ) ;
  132. -        }
  133. -    }
  134. -
  135. -} /* end fgrep */
  136. -
  137. -/* match - return index of pattern */
  138. -
  139. -match( subject, pattern )
  140. -char *subject, *pattern ;
  141. -{
  142. -    char *s, *p, *ss ;
  143. -
  144. -    for( s=subject ; *s != EOS ; s++ ) {
  145. -        for( ss=s, p=pattern ; *p != EOS && *p == *ss ; p++, ss++ )
  146. -                ;
  147. -        if( *p == EOS )
  148. -            return s - subject ;
  149. -    }
  150. -
  151. -    return -1 ;
  152. -
  153. -} /* end match */
  154. -
  155. -/* fgets - read a line from a file. */
  156. -
  157. -char *fgets(line, maxline, input)
  158. -char *line ;
  159. -int maxline ;
  160. -FILE *input ;
  161. -{
  162. -    int c ;
  163. -    char *start_line ;
  164. -
  165. -    start_line = line;
  166. -
  167. -    while( --maxline>0 && (c=agetc(input)) != EOF )
  168. -        if( (*line++ = c) == NL )
  169. -            break ;
  170. -
  171. -    *line = 0 ;
  172. -    if( c == EOF && line == start_line )
  173. -        return(NULL) ;
  174. -    return(line) ;
  175. -}
  176. -
  177. -
  178. + END OF ARCHIVE
  179.