1: #include <stdio.h>
   2: #include <sys/types.h>
   3: #include <sys/file.h>
   4: #include <strings.h>
   5: #include "bm.h"
   6: #include "Extern.h"
   7: main(argc,argv)
   8: int argc;
   9: char *argv[];
  10: {
  11:     /* test driver for grep based on Boyer-Moore algorithm */
  12:     char BigBuff[MAXBUFF + 3];
  13:     /*
  14: 	* We leave one extra character at the beginning and end of the buffer,
  15: 	* but don't tell Execute about it. This is so when someone is
  16: 	* scanning the buffer and scans past the end (or beginning)
  17: 	* we are still technically in the buffer (picky, but there ARE
  18: 	* machines which would complain).  We then leave an *additional*
  19: 	* free byte at the begining so we can pass an even address to Execute
  20: 	* (on some machines, odd address I/O can *COMPLETELY* destroy any
  21: 	* speed benefits of bm).
  22: 	*/
  23:     int ret = 1, /* return code from Execute */
  24:         NotFound = 0, /* non-zero if file not readable */
  25:         NFiles,
  26:         NPats; /* number of patterns to search for */
  27:     char i,
  28:         *FlagPtr,
  29:         **OptPtr; /* used to scan command line */
  30:     int TextFile /* file to search */;
  31:     struct PattDesc *DescVec[MAXPATS];
  32: 
  33:     --argc;
  34:     OptPtr = argv + 1;
  35:     while ( argc && **OptPtr == '-') {
  36:         FlagPtr = *OptPtr + 1;
  37:         while (*FlagPtr) {
  38:             switch (*FlagPtr) {
  39:                 case 'c': cFlag = 1; break;
  40:                 case 'e': eFlag = 1;
  41:                     /* get the patterns from next arg */
  42:                     NPats = MkDescVec(DescVec,*++OptPtr);
  43:                     --argc;
  44:                     break;
  45:                 case 'f': fFlag = 1;
  46:                     /* read the patterns from a file */
  47:                     NPats = GetPatFile(*++OptPtr,DescVec);
  48:                     --argc;
  49:                     break;
  50:                 case 'l': lFlag = 1; break;
  51:                 case 'n': nFlag = 1; break;
  52:                 case 's': sFlag = 1; break;
  53:                 case 'x': xFlag = 1; break;
  54:                 case 'h': hFlag = 1; break;
  55:                 default:
  56:                     fprintf(stderr,
  57:                     "bm: invalid option: -%c \n",
  58:                     *FlagPtr);
  59:                     PutUsage();
  60:                     exit(2);
  61:             } /* switch */
  62:             ++FlagPtr;
  63:         } /* while */
  64:         ++OptPtr; --argc;
  65:     } /* while */
  66:     /* OptPtr now points to patterns */
  67:     if (!fFlag && !eFlag) {
  68:         if (!argc) {
  69:             fprintf(stderr,"bm: no pattern specified\n");
  70:             PutUsage();
  71:             exit(2);
  72:         } else
  73:             NPats = MkDescVec(DescVec,*OptPtr);
  74:         ++OptPtr; --argc;
  75:     }
  76:     /* OptPtr now points to first file */
  77:     NFiles = argc;
  78:     if (!NFiles)
  79:         ret &= Execute(DescVec,NPats,0,BigBuff+2);
  80:     else while (argc--) {
  81:         if ((NFiles > 1) || lFlag) FileName = *OptPtr;
  82:         if ((TextFile = open(*OptPtr,O_RDONLY,0)) < 0) {
  83:             fprintf(stderr,"bm: can't open %s\n",*OptPtr);
  84:             NotFound++;
  85:         } else {
  86:             ret &= Execute(DescVec,NPats,TextFile,BigBuff+2);
  87:             if (sFlag && !ret)
  88:                 exit(0);
  89:             close(TextFile);
  90:         } /* if */
  91:         ++OptPtr;
  92:     } /* while */
  93:     if (cFlag) printf("%d\n",MatchCount);
  94:     exit(NotFound ? 2 : ret);
  95: } /* main */

Defined functions

main defined in line 7; never used
Last modified: 1994-01-01
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2749
Valid CSS Valid XHTML 1.0 Strict