234 lines
9.1 KiB
C
234 lines
9.1 KiB
C
|
/**********************************************************************
|
||
|
// FIND.H
|
||
|
//
|
||
|
// Copyright (c) 1992 - Microsoft Corp.
|
||
|
// All rights reserved.
|
||
|
// Microsoft Confidential
|
||
|
//
|
||
|
// Include file with #defines and prototypes for qgrep functions used
|
||
|
// by the Jaguar search engine.
|
||
|
**********************************************************************/
|
||
|
|
||
|
#include <setjmp.h>
|
||
|
|
||
|
//*********************************************************************
|
||
|
// Constant definitions.
|
||
|
//*********************************************************************
|
||
|
|
||
|
#if 0
|
||
|
typedef long (far pascal *FIND_CALLBACK)( int Func, unsigned uArg0,\
|
||
|
void far *pArg1, void far *pArg2,\
|
||
|
void far *pArg3 );
|
||
|
|
||
|
#define FLG_FIND_NOMATCH 0x0001 // Display non-matching lines
|
||
|
#define FLG_FIND_COUNT 0x0002 // Display on count of matching lines
|
||
|
#define FLG_FIND_LINENO 0x0004 // Display line numbers on output
|
||
|
#endif
|
||
|
|
||
|
#define FIND_FILE 0x0100 // Only searching for a file (EXCLUSIVE)
|
||
|
#define FIND_NOT 0x0200 // Searching for /NOT strings
|
||
|
|
||
|
|
||
|
#define BUFLEN 256 // Temporary buffer length
|
||
|
#define PATMAX 512 // Maximum parsed pattern length
|
||
|
|
||
|
#define MAXSTRLEN 128 // Maximum search string length
|
||
|
#define TRTABLEN 256 // Translation table length
|
||
|
// Total bytes in StringList array
|
||
|
#define STRING_LST_LEN ((TRTABLEN + 1) * sizeof(char *))
|
||
|
|
||
|
// #ifndef NOASM
|
||
|
// #define match exprmatch
|
||
|
// #endif
|
||
|
|
||
|
//*********************************************************************
|
||
|
// Pattern token types.
|
||
|
//*********************************************************************
|
||
|
|
||
|
#define T_END 0 // End of expression
|
||
|
#define T_STRING 1 // String to match
|
||
|
#define T_SINGLE 2 // Single character to match
|
||
|
#define T_CLASS 3 // Class to match
|
||
|
#define T_ANY 4 // Match any character
|
||
|
#define T_STAR 5 // *-expr
|
||
|
|
||
|
//*********************************************************************
|
||
|
//*********************************************************************
|
||
|
|
||
|
typedef struct stringnode
|
||
|
{
|
||
|
struct stringnode *s_alt; // List of alternates
|
||
|
struct stringnode *s_suf; // List of suffixes
|
||
|
int s_must; // Length of portion that must match
|
||
|
}
|
||
|
STRINGNODE; // String node
|
||
|
// Text field access macro
|
||
|
|
||
|
#define s_text(x) ( ((char *)(x)) + (sizeof( STRINGNODE ) + ((x)->s_must & 1)) )
|
||
|
|
||
|
//*********************************************************************
|
||
|
// Type definitions.
|
||
|
//*********************************************************************
|
||
|
|
||
|
typedef struct exprnode
|
||
|
{
|
||
|
struct exprnode *ex_next; // Next node in list
|
||
|
struct exprnode *ex_dummy; // Needed by freenode()
|
||
|
char *ex_pattern; // Pointer to pattern to match
|
||
|
}
|
||
|
EXPR; // Expression node
|
||
|
|
||
|
//*********************************************************************
|
||
|
// QGREP function prototypes
|
||
|
//*********************************************************************
|
||
|
|
||
|
extern void (*addstr)( char *s, int n );
|
||
|
extern char *(*find) ( char *buffer, char *bufend );
|
||
|
extern void (*flush1)( void );
|
||
|
extern int (*grep) ( char *startbuf, char *endbuf, char *name, int *first );
|
||
|
extern void (*write1)( char *buffer, int buflen );
|
||
|
|
||
|
int InitGrepInfo( char *pStrLst, char *pNotList, unsigned uOpts );
|
||
|
int FreeGrepBufs( void );
|
||
|
int InitGrepBufs( void );
|
||
|
int FileFindGrep( int fHandle, unsigned fFlags,
|
||
|
long (far pascal *AppCb)( int Func,
|
||
|
unsigned uArg0,
|
||
|
void far *pArg1,
|
||
|
unsigned long ulArg2 ) );
|
||
|
void addexpr ( char *e, int n );
|
||
|
void addstring ( char *s, int n );
|
||
|
int addstrings ( char *buffer, char *bufend, char *seplist, int *first );
|
||
|
void addtoken ( char *e, int n );
|
||
|
char *alloc ( unsigned size );
|
||
|
void bitset ( unsigned char *bitvec, int first, int last, int bitval );
|
||
|
int enumlist ( struct stringnode *node, int cchprev );
|
||
|
int enumstrings ( void );
|
||
|
int exprmatch ( char *s, char *p );
|
||
|
char *exprparse ( char *p, int *NewBufLen );
|
||
|
char *findall ( char *buffer, char *bufend );
|
||
|
char *findlist ( char *buffer, char *bufend );
|
||
|
char *findone ( char *buffer, char *bufend );
|
||
|
void freenode ( struct stringnode *x );
|
||
|
char *get1stcharset( char *e, unsigned char *bitvec );
|
||
|
int isexpr ( char *s, int n );
|
||
|
int istoken ( char *s, int n );
|
||
|
void maketd1 ( unsigned char *pch, int cch, int cchstart );
|
||
|
int match ( char *s, char *p );
|
||
|
void matchstrings( char *s1, char *s2, int len, int *nmatched,
|
||
|
int *leg );
|
||
|
STRINGNODE *newnode ( char *s, int n );
|
||
|
static int newstring ( unsigned char *s, int n );
|
||
|
char *NextEol ( char *pchChar, char *EndBuf );
|
||
|
int preveol ( char *s );
|
||
|
|
||
|
STRINGNODE *reallocnode( register STRINGNODE *node, char *s, int n );
|
||
|
char *simpleprefix( char *s, char **pp );
|
||
|
int strncspn ( char *s, char *t, int n );
|
||
|
int strnspn ( char *s, char *t, int n );
|
||
|
char *strnupr ( char *pch, int cch );
|
||
|
void SwapSrchTables( void );
|
||
|
int cmpicase ( char * buf1, char * buf2, unsigned int count );
|
||
|
|
||
|
char *findexpr ( char *buffer, char *bufend );
|
||
|
|
||
|
//*********************************************************************
|
||
|
// Bit flag definitions
|
||
|
//*********************************************************************
|
||
|
|
||
|
#define SHOWNAME 0x001 // Print filename
|
||
|
#define NAMEONLY 0x002 // Print filename only
|
||
|
#define LINENOS 0x004 // Print line numbers
|
||
|
#define BEGLINE 0x008 // Match at beginning of line
|
||
|
#define ENDLINE 0x010 // Match at end of line
|
||
|
#define DEBUG 0x020 // Print debugging output
|
||
|
#define TIMER 0x040 // Time execution
|
||
|
#define SEEKOFF 0x080 // Print seek offsets
|
||
|
#define ALLLINES 0x100 // Print all lines before/after match
|
||
|
#define COLNOS 0x200 // Show column numbers (if LINENOS)
|
||
|
#define CNTMATCH 0x400 // Show count of matching lines
|
||
|
#define NEWDISP 0x800
|
||
|
|
||
|
#ifndef TRUE
|
||
|
#define TRUE 1
|
||
|
#endif
|
||
|
|
||
|
#ifndef FALSE
|
||
|
#define FALSE 0
|
||
|
#endif
|
||
|
|
||
|
//*********************************************************************
|
||
|
// Miscellaneous constants.
|
||
|
//*********************************************************************
|
||
|
|
||
|
#define EOS ('\r') // End of string character
|
||
|
|
||
|
//*********************************************************************
|
||
|
// Data shared among source files.
|
||
|
//*********************************************************************
|
||
|
|
||
|
extern char *Target; // Buffer for srch string being added
|
||
|
extern int CaseSen; // Case-sensitivity flag
|
||
|
extern int Flags; // Flags
|
||
|
extern int StrCount; // String count
|
||
|
extern jmp_buf ErrorJmp; // Storage location for setjmp()
|
||
|
|
||
|
// All of the data below is located in DATA.ASM to allow swapping
|
||
|
// blocks of search data with a single memmove() call.
|
||
|
|
||
|
#define SWAP_LEN ((sizeof( int ) * 8) + (sizeof( char * ) * 4))
|
||
|
#define INIT_LEN (sizeof( int ) * 8)
|
||
|
|
||
|
// Storage for "string" search trees.
|
||
|
extern int DummyFirst;
|
||
|
extern int TblEntriesUsed; // Number of transtab entries used
|
||
|
extern int ExprEntriesUsed; // Number of expression strings used
|
||
|
extern int StrCount; // String count
|
||
|
extern int TargetLen; // Length of last string added
|
||
|
extern int MaxChar; // Max char value in srch string
|
||
|
extern int MinChar; // Min char value in srch string
|
||
|
extern int ShortStrLen; // Min string length added to list
|
||
|
extern char **ExprStrList; // Array of ptrs to srch expressions
|
||
|
extern STRINGNODE **StringList; // Array of ptrs to srch strings
|
||
|
extern unsigned char *td1; // Ptr to TD1 shift table
|
||
|
extern unsigned char *TransTable; // Allocated in grepmain()
|
||
|
|
||
|
extern int nDummyFirst;
|
||
|
extern int nTblEntriesUsed; // Number of transtab entries used
|
||
|
extern int nExprEntriesUsed; // Number of expression strings used
|
||
|
extern int nStrCount; // String count
|
||
|
extern int nTargetLen; // Length of last string added
|
||
|
extern unsigned nMaxChar; // Max char value in search string
|
||
|
extern unsigned nMinChar; // Min char value in srch string
|
||
|
extern int nShortStrLen; // Min string length added to list
|
||
|
extern char **nExprStrList; // Array of ptrs to srch expressions
|
||
|
extern STRINGNODE **nStringList; // Array of ptrs to srch strings
|
||
|
extern unsigned char *ntd1; // Ptr to TD1 shift table
|
||
|
extern unsigned char *nTransTable; // Allocated in grepmain()
|
||
|
|
||
|
|
||
|
extern unsigned InitialSearchData; // First word in area containing
|
||
|
// initial search values.
|
||
|
|
||
|
extern char *ReadBuf; // Ptr to buffer for file reads
|
||
|
extern char *Target; // Tmp buf for string being added
|
||
|
|
||
|
extern unsigned char *achcol; // Ptr to collate table
|
||
|
|
||
|
//*********************************************************************
|
||
|
// Added for purposes of integrating the message subsysstem
|
||
|
//*********************************************************************
|
||
|
|
||
|
struct sublistx
|
||
|
{
|
||
|
unsigned char size; // sublist size
|
||
|
unsigned char reserved; // reserved for future growth
|
||
|
unsigned far *value; // pointer to replaceable parm
|
||
|
unsigned char id; // type of replaceable parm
|
||
|
unsigned char Flags; // how parm is to be displayed
|
||
|
unsigned char max_width; // max width of replaceable field
|
||
|
unsigned char min_width; // min width of replaceable field
|
||
|
unsigned char pad_char; // pad character for replaceable field
|
||
|
};
|
||
|
|