/*
EXAMPLE SOURCE CODE FOR GREP FILTER
Grep2Msg.C
Copyright (c) 1990, 1991 Borland International, Inc.
All rights reserved.
Grep2Msg - Message filter from Turbo Grep to Turbo C++ IDE message window
This filter accepts input through the standard input stream, converts
it and outputs it to the standard output stream. The streams are linked
through pipes, such that the input stream is the output from GREP, and
the output stream is connected to the message window of the Turbo C++ IDE.
This filter is invoked through the Turbo C++ IDE transfer mechanism as
grep <commands> | grep2msg | TC IDE
Compile using Turbo C++ in the LARGE memory model
tcc -ml grep2msg
*/
#include <dir.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <alloc.h>
#include <io.h>
#include <dos.h>
#include "filter.h"
#define TRUE 1
#define FALSE 0
char NewFileText[] = "File ";
unsigned BufSize,CurBufLen;
char *InBuffer,
*OutBuffer,
*CurInPtr,
*CurOutPtr,
*LinePtr;
char Line[133];
long int InOff;
char EndMark;
int NoLines;
/************************************************************************
Function : NextChar
Parameters: None
Returns : next character in input buffer or 0 for end of file
Input from the standard input stream is buffered in a global buffer InBuffer
which is allocated in function main. NextChar function will return
the next character in the buffer, reading from the input stream when the
buffer becomes empty.
************************************************************************/
char NextChar(void)
{
if (CurInPtr < InBuffer+CurBufLen) /* if buffer is not empty */
{
return *(CurInPtr++); /* return next information */
}
else
{
CurInPtr = InBuffer; /* reset pointer to front of buffer */
lseek(0,InOff,0); /* seek to the next section for read */
InOff += BufSize; /* increment pointer to next block */
if ((CurBufLen = read(0,InBuffer,BufSize)) !=0)
return NextChar(); /* recursive call returns first
character in buffer after read */
return 0; /* return 0 on end of file */
}
}
/*************************************************************************
Function : flushOut
Parameters: Size The number of characters to be written out
Returns : nothing
Strings to be sent to the message window are placed in a buffer called
OutBuffer. A call to this function will write Size bytes to the
standard output stream and reset the output buffer pointer to the
beginning of the buffer. Any additional information in the buffer is
thus lost.
**************************************************************************/
void flushOut(unsigned Size)
{
if (Size != 0) /* don't flush an empty buffer */
{
CurOutPtr = OutBuffer; /* reset pointer to beginning of buffer */
lseek(1,0,2); /* seek output stream to end */
write(1,OutBuffer,Size); /* write out Size bytes */
}
}
/**************************************************************************
Function : Put
Parameters: S pointer to a string of characters
Len length of the string of characters
Returns : Nothing.
Put places bytes into OutBuffer so they may be later flushed out into the
standard output stream using flushOut.
*************************************************************************/
void Put(char *S,int Len)
{
int i;
for (i = 0; i < Len; i++)
{
*CurOutPtr++ = S[i]; /* place byte in buffer */
if (CurOutPtr >= OutBuffer+BufSize) /* if buffer overflows */
flushOut(BufSize); /* flush to the stream */
}
}
0 comments:
Post a Comment