home *** CD-ROM | disk | FTP | other *** search
- /* Program to exercise buffer-search routines in Listings 1 & 3.
- (Must be modified to put copy of pattern as sentinel at end of the
- search buffer in order to be used with Listing 4.) */
-
- #include <stdio.h>
- #include <string.h>
- #include <fcntl.h>
-
- #define DISPLAY_LENGTH 40
- #define BUFFER_SIZE 0x8000
-
- extern unsigned char * FindString(unsigned char *, unsigned int,
- unsigned char *, unsigned int);
- void main(void);
-
- void main() {
- unsigned char TempBuffer[DISPLAY_LENGTH+1];
- unsigned char Filename[150], Pattern[150], *MatchPtr, *TestBuffer;
- int Handle;
- unsigned int WorkingLength;
-
- printf("File to search:");
- gets(Filename);
- printf("Pattern for which to search:");
- gets(Pattern);
-
- if ( (Handle = open(Filename, O_RDONLY | O_BINARY)) == -1 ) {
- printf("Can't open file: %s\n", Filename); exit(1);
- }
- /* Get memory in which to buffer the data */
- if ( (TestBuffer=(unsigned char *)malloc(BUFFER_SIZE+1)) == NULL) {
- printf("Can't get enough memory\n"); exit(1);
- }
- /* Process a BUFFER_SIZE chunk */
- if ( (int)(WorkingLength =
- read(Handle, TestBuffer, BUFFER_SIZE)) == -1 ) {
- printf("Error reading file %s\n", Filename); exit(1);
- }
- TestBuffer[WorkingLength] = 0; /* 0-terminate buffer for printf */
- /* Search for the pattern and report the results */
- if ((MatchPtr = FindString(TestBuffer, WorkingLength, Pattern,
- (unsigned int) strlen(Pattern))) == NULL) {
- /* Pattern wasn't found */
- printf("\"%s\" not found\n", Pattern);
- } else {
- /* Pattern was found. Zero-terminate TempBuffer; strncpy
- won't do it if DISPLAY_LENGTH characters are copied */
- TempBuffer[DISPLAY_LENGTH] = 0;
- printf("\"%s\" found. Next %d characters at match:\n\"%s\"\n",
- Pattern, DISPLAY_LENGTH,
- strncpy(TempBuffer, MatchPtr, DISPLAY_LENGTH));
- }
- exit(0);
- }