Windows2000/private/shell/shell32/shlgrep.h
2020-09-30 17:12:32 +02:00

216 lines
10 KiB
C

// Extracts from search.h and find.h
// *********************************************************************
// Macros for creating buffers based boundaried on sector sizes
// *********************************************************************
#define SECTORLEN (512) // Sector length
#define LG2SECTOR 10 // Log 2 sector length
#define FILBUFLEN (SECTORLEN*8) // File buffer length (4096 bytes)
#define SectorBased( x ) ((unsigned)(x) & (0xffff << LG2SECTOR))
// *********************************************************************
// FIND.H
// *********************************************************************
// *********************************************************************
// Constant definitions.
// *********************************************************************
#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(TCHAR *))
#define FLG_NOT 0x0001 // Apply inverse to next switch (/NOT)
#define FLG_DEFAULT 0x0002 // Processing default cmd string
#define FLG_REGULAR 0x0004 // Use regular expressions (/R)
#define FLG_CASE 0x0008 // Case sensitive searches (/C)
#define FLG_NOTSRCH 0x0010 // Match file not containing string
#define FLG_SRCHSUB 0x0020 // Search subdirectories (/S)
#define FLG_NOT_SRCHSUB 0x0040 // Explicid don't search subs (/NOT /S)
#define FLG_NOT_REGULAR 0x0080 // Expl. not on regular exprs (/NOT /RE)
#define FLG_NOT_CASE 0x0100 // Expl. not on case sense (/NOT /CS)
#define FLG_DIR_ENTER 0x1000 // Do callback on leaving subdirectory
#define FLG_DIR_LEAVE 0x2000 // Do callback on leaving subdirectory
#define FLG_GET_ACCESS 0x4000 // Always get access on matching files
// *********************************************************************
// 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
#define OK 0
// *********************************************************************
// *********************************************************************
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
typedef STRINGNODE * LPSTRINGNODE;
// Text field access macro
#define s_text(x) ( ((LPSTR)(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()
LPSTR ex_pattern; // Pointer to pattern to match
}
EXPR; // Expression node
typedef struct grepelements // Bad name, but...
{
// Variables for grep strings.
int TblEntriesUsed; // Number of transtab entries used
int ExprEntriesUsed; // Number of expression strings used.
int StrCount; // String count
int TargetLen; // Length of last string added
int MaxChar; // Max char value in search string
int MinChar; // Min char value in search string
int ShortStrLen; // Minimum string length added to list
LPSTR ExprStrList[TRTABLEN+1]; // Array of ptrs to search expressions
LPSTRINGNODE StringList[TRTABLEN+1]; // Array of ptrs to search strings
char td1[TRTABLEN]; // TD1 shift table
char TransTable[TRTABLEN]; // Allocated in grepmain()
} GREPELEMENTS;
typedef struct grepinfo
{
char ReadBuf[FILBUFLEN]; // Ptr to buffer for file reads
// strings.
char Target[MAXSTRLEN]; // Buffer to hold Max Strings.
// Variables for grep strings.
GREPELEMENTS ge; // Main Grep elements.
// Storage for /NOT "string" search trees.
GREPELEMENTS geNot;
// More values to control the search
int CaseSen; // Assume case-sensitivity
int Flags; // Global search flags
long FileLen; // Number of bytes in file
signed long LineNum; // Current line number
signed long MatchCnt; // Count of matching lines
// MatchCnt initialized in Qgrep()
void (*addstr) (struct grepinfo *, LPSTR , int);
LPSTR (*find) (struct grepinfo *, LPSTR , LPSTR );
int (*ncmp) ( LPCSTR , LPCSTR , int);
}
GREPINFO, * LPGREPINFO;
// *********************************************************************
// QGREP function prototypes
// *********************************************************************
LPVOID AllocThrow ( LPGREPINFO lpgi, long cb);
void addexpr ( LPGREPINFO lpgi, LPSTR e, int n );
void addstring ( LPGREPINFO lpgi,LPSTR s, int n );
int addstrings ( LPGREPINFO lpgi, LPSTR buffer, LPSTR bufend, LPSTR seplist, int *first );
void addtoken ( LPGREPINFO lpgi, LPSTR e, int n );
void bitset ( LPBYTE bitvec, int first, int last, int bitval );
int enumlist ( LPGREPINFO lpgi, struct stringnode *node, int cchprev );
int enumstrings ( LPGREPINFO lpgi );
int exprmatch ( LPGREPINFO lpgi, LPSTR s, LPSTR p );
LPSTR exprparse ( LPGREPINFO lpgi, LPSTR p, int *NewBufLen );
LPSTR findall ( LPGREPINFO lpgi, LPSTR buffer, LPSTR bufend );
LPSTR findlist ( LPGREPINFO lpgi, LPSTR buffer, LPSTR bufend );
LPSTR findone ( LPGREPINFO lpgi, LPSTR buffer, LPSTR bufend );
void freenode ( LPGREPINFO lpgi, struct stringnode *x );
LPSTR get1stcharset( LPGREPINFO lpgi, LPSTR e, LPBYTE bitvec );
int isexpr ( LPGREPINFO lpgi, LPSTR s, int n );
int istoken ( LPSTR s, int n );
void maketd1 ( LPGREPINFO, LPBYTE pch, int cch, int cchstart );
int match ( LPGREPINFO lpgi, LPSTR s, LPSTR p );
void matchstrings( LPGREPINFO lpgi, LPSTR s1, LPSTR s2,
int len, int *nmatched,
int *leg );
STRINGNODE FAR* newnode ( LPGREPINFO lpgi, LPSTR s, int n );
static int newstring ( LPGREPINFO lpgi, LPBYTE s, int n );
LPSTR NextEol ( LPSTR pchChar, LPSTR EndBuf );
int preveol ( LPSTR s );
STRINGNODE FAR* reallocnode( register STRINGNODE *node, LPSTR s, int n );
LPSTR simpleprefix( LPGREPINFO lpgi, LPSTR s, LPSTR *pp );
int strncspn ( LPSTR s, LPSTR t, int n );
int strnspn ( LPSTR s, LPSTR t, int n );
LPSTR strnupr ( LPSTR pch, int cch );
void SwapSrchTables( LPGREPINFO lpgi );
int cmpicase ( LPSTR buf1, LPSTR buf2, unsigned int count );
LPSTR findexpr ( LPGREPINFO lpgi, LPSTR buffer, LPSTR 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 DEBUGMSGS 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
// *********************************************************************
// Miscellaneous constants.
// *********************************************************************
#define EOS ('\r') // End of string character
// *********************************************************************
// Data shared among source files.
// *********************************************************************
BOOL WINAPI FFileContainsString(LPTSTR pszPathName, LPSTR pszStr);
LPGREPINFO InitGrepInfo( LPSTR pStrLst, LPSTR pNotList, unsigned uOpts );
int FileFindGrep( LPGREPINFO lpgi, HANDLE fh, unsigned fFlags,
long (far pascal *AppCb)( int Func,
unsigned uArg0,
void far *pArg1,
unsigned long ulArg2 ) );
LPGREPINFO InitGrepBufs( void );
int FreeGrepBufs(LPGREPINFO lpgi);
#define ASCII_LEN 256 // # of ASCII characters