2.11BSD/src/new/bm/MatchFound.c

#include <stdio.h>
#include "bm.h"
#include "Extern.h"
MatchFound(Desc, BuffPos, Buffer, BuffEnd)
struct PattDesc *Desc; /* state info about search for one string */
long BuffPos; /* offset of first char of buffer into the file being searched */
char *Buffer, /* pointer to the first character in the buffer */
	*BuffEnd; /* pointer to the last character in the buffer */
{
	char *MLineBegin, *MLineEnd;
	Desc->Success = 0;
	/* Start points to first character after a successful match */
	MLineBegin = MLineEnd = Desc->Start - 1;
	while(MLineBegin >=Buffer && *MLineBegin != '\n') --MLineBegin;
	++MLineBegin;
	while( MLineEnd <= BuffEnd && *MLineEnd != '\n') ++MLineEnd;
	if (MLineEnd > BuffEnd) --MLineEnd;
	/* fixed 25jun85 pdbain. suppress multiple matches of the same
	* pattern on one line */
	Desc->Start = MLineEnd + 1;
	/* check if exact match */
	if (xFlag && !( Desc->PatLen == (*MLineEnd != '\n' ? ((MLineEnd -
	MLineBegin) + 1) : (MLineEnd - MLineBegin))))
		return(0); /* failure */
	if (sFlag) return(1);
	if (cFlag) {
		++MatchCount;
		return(1);
	} /* if */
	PrintLine(BuffPos+(Desc->Start-Buffer),MLineBegin,MLineEnd);
	return(1);
} /* MatchFound */