1da2e3ebdSchin /***********************************************************************
2da2e3ebdSchin *                                                                      *
3da2e3ebdSchin *               This software is part of the ast package               *
4*b30d1939SAndy Fiddaman *          Copyright (c) 1985-2011 AT&T Intellectual Property          *
5da2e3ebdSchin *                      and is licensed under the                       *
6*b30d1939SAndy Fiddaman *                 Eclipse Public License, Version 1.0                  *
77c2fbfb3SApril Chin *                    by AT&T Intellectual Property                     *
8da2e3ebdSchin *                                                                      *
9da2e3ebdSchin *                A copy of the License is available at                 *
10*b30d1939SAndy Fiddaman *          http://www.eclipse.org/org/documents/epl-v10.html           *
11*b30d1939SAndy Fiddaman *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12da2e3ebdSchin *                                                                      *
13da2e3ebdSchin *              Information and Software Systems Research               *
14da2e3ebdSchin *                            AT&T Research                             *
15da2e3ebdSchin *                           Florham Park NJ                            *
16da2e3ebdSchin *                                                                      *
17da2e3ebdSchin *                 Glenn Fowler <gsf@research.att.com>                  *
18da2e3ebdSchin *                  David Korn <dgk@research.att.com>                   *
19da2e3ebdSchin *                   Phong Vo <kpv@research.att.com>                    *
20da2e3ebdSchin *                                                                      *
21da2e3ebdSchin ***********************************************************************/
22da2e3ebdSchin #pragma prototyped
23da2e3ebdSchin /*
24da2e3ebdSchin  * fast find private interface
25da2e3ebdSchin  */
26da2e3ebdSchin 
27da2e3ebdSchin #ifndef _FINDLIB_H
28da2e3ebdSchin #define _FINDLIB_H
29da2e3ebdSchin 
30da2e3ebdSchin #include <ast.h>
31da2e3ebdSchin #include <cdt.h>
32da2e3ebdSchin #include <ctype.h>
33da2e3ebdSchin #include <error.h>
34da2e3ebdSchin #include <ls.h>
35da2e3ebdSchin #include <regex.h>
36da2e3ebdSchin #include <vmalloc.h>
37da2e3ebdSchin 
38da2e3ebdSchin #define FF_old		1	/* old format - 7 bit bigram		*/
39da2e3ebdSchin #define FF_gnu		2	/* gnu 8 bit no bigram			*/
40da2e3ebdSchin #define FF_dir		3	/* FF_gnu, dirs have trailing /		*/
41da2e3ebdSchin #define FF_typ		4	/* FF_dir with types			*/
42da2e3ebdSchin 
43da2e3ebdSchin #define FF_gnu_magic	"LOCATE02"
44da2e3ebdSchin #define FF_dir_magic	"FIND-DIR-02"
45da2e3ebdSchin #define FF_typ_magic	"FIND-DIR-TYPE-03"
46da2e3ebdSchin 
47da2e3ebdSchin #define FF_ESC		0036
48da2e3ebdSchin #define FF_MAX		0200
49da2e3ebdSchin #define FF_MIN		0040
50da2e3ebdSchin #define FF_OFF		0016
51da2e3ebdSchin 
52da2e3ebdSchin #define FF_SET_TYPE(p,i)	((p)->decode.bigram1[((i)>>3)&((1<<CHAR_BIT)-1)]|=(1<<((i)&07)))
53da2e3ebdSchin #define FF_OK_TYPE(p,i)		(!(p)->types||((p)->decode.bigram1[((i)>>3)&((1<<CHAR_BIT)-1)]&(1<<((i)&07))))
54da2e3ebdSchin 
55da2e3ebdSchin typedef struct
56da2e3ebdSchin {
57da2e3ebdSchin 	char*		end;
58da2e3ebdSchin 	char*		type;
59da2e3ebdSchin 	char*		restore;
60da2e3ebdSchin 	int		count;
61da2e3ebdSchin 	int		found;
62da2e3ebdSchin 	int		ignorecase;
63da2e3ebdSchin 	int		match;
64da2e3ebdSchin 	int		peek;
65da2e3ebdSchin 	int		swap;
66da2e3ebdSchin 	regex_t		re;
67da2e3ebdSchin 	char		bigram1[(1<<(CHAR_BIT-1))];
68da2e3ebdSchin 	char		bigram2[(1<<(CHAR_BIT-1))];
69da2e3ebdSchin 	char		path[PATH_MAX];
70da2e3ebdSchin 	char		temp[PATH_MAX];
71da2e3ebdSchin 	char		pattern[1];
72da2e3ebdSchin } Decode_t;
73da2e3ebdSchin 
74da2e3ebdSchin typedef struct
75da2e3ebdSchin {
76da2e3ebdSchin 	Dtdisc_t	namedisc;
77da2e3ebdSchin 	Dtdisc_t	indexdisc;
78da2e3ebdSchin 	Dt_t*		namedict;
79da2e3ebdSchin 	Dt_t*		indexdict;
80da2e3ebdSchin 	int		prefix;
81da2e3ebdSchin 	unsigned char	bigram[2*FF_MAX];
82da2e3ebdSchin 	unsigned short	code[FF_MAX][FF_MAX];
83da2e3ebdSchin 	unsigned short	hits[USHRT_MAX+1];
84da2e3ebdSchin 	char		path[PATH_MAX];
85da2e3ebdSchin 	char		mark[PATH_MAX];
86da2e3ebdSchin 	char		file[PATH_MAX];
87da2e3ebdSchin 	char		temp[PATH_MAX];
88da2e3ebdSchin } Encode_t;
89da2e3ebdSchin 
90da2e3ebdSchin typedef union
91da2e3ebdSchin {
92da2e3ebdSchin 	Decode_t	code_decode;
93da2e3ebdSchin 	Encode_t	code_encode;
94da2e3ebdSchin } Code_t;
95da2e3ebdSchin 
96da2e3ebdSchin typedef struct
97da2e3ebdSchin {
98da2e3ebdSchin 	Dtlink_t	byname;
99da2e3ebdSchin 	Dtlink_t	byindex;
100da2e3ebdSchin 	unsigned long	index;
101da2e3ebdSchin 	char		name[1];
102da2e3ebdSchin } Type_t;
103da2e3ebdSchin 
104da2e3ebdSchin #define _FIND_PRIVATE_			\
105da2e3ebdSchin 	Finddisc_t*	disc;		\
106da2e3ebdSchin 	Vmalloc_t*	vm;		\
107da2e3ebdSchin 	char**		dirs;		\
108da2e3ebdSchin 	int*		lens;		\
109da2e3ebdSchin 	Sfio_t*		fp;		\
110da2e3ebdSchin 	Findverify_f	verifyf;	\
111da2e3ebdSchin 	int		generate;	\
112da2e3ebdSchin 	int		method;		\
113da2e3ebdSchin 	int		secure;		\
114da2e3ebdSchin 	int		types;		\
115da2e3ebdSchin 	int		verify;		\
116da2e3ebdSchin 	Code_t		code;
117da2e3ebdSchin 
118da2e3ebdSchin #define decode		code.code_decode
119da2e3ebdSchin #define encode		code.code_encode
120da2e3ebdSchin 
121da2e3ebdSchin #include <find.h>
122da2e3ebdSchin 
123da2e3ebdSchin #endif
124