14887Schin /*********************************************************************** 24887Schin * * 34887Schin * This software is part of the ast package * 4*12068SRoger.Faulkner@Oracle.COM * Copyright (c) 1985-2010 AT&T Intellectual Property * 54887Schin * and is licensed under the * 64887Schin * Common Public License, Version 1.0 * 78462SApril.Chin@Sun.COM * by AT&T Intellectual Property * 84887Schin * * 94887Schin * A copy of the License is available at * 104887Schin * http://www.opensource.org/licenses/cpl1.0.txt * 114887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 124887Schin * * 134887Schin * Information and Software Systems Research * 144887Schin * AT&T Research * 154887Schin * Florham Park NJ * 164887Schin * * 174887Schin * Glenn Fowler <gsf@research.att.com> * 184887Schin * David Korn <dgk@research.att.com> * 194887Schin * Phong Vo <kpv@research.att.com> * 204887Schin * * 214887Schin ***********************************************************************/ 224887Schin #pragma prototyped 234887Schin /* 244887Schin * fast find private interface 254887Schin */ 264887Schin 274887Schin #ifndef _FINDLIB_H 284887Schin #define _FINDLIB_H 294887Schin 304887Schin #include <ast.h> 314887Schin #include <cdt.h> 324887Schin #include <ctype.h> 334887Schin #include <error.h> 344887Schin #include <ls.h> 354887Schin #include <regex.h> 364887Schin #include <vmalloc.h> 374887Schin 384887Schin #define FF_old 1 /* old format - 7 bit bigram */ 394887Schin #define FF_gnu 2 /* gnu 8 bit no bigram */ 404887Schin #define FF_dir 3 /* FF_gnu, dirs have trailing / */ 414887Schin #define FF_typ 4 /* FF_dir with types */ 424887Schin 434887Schin #define FF_gnu_magic "LOCATE02" 444887Schin #define FF_dir_magic "FIND-DIR-02" 454887Schin #define FF_typ_magic "FIND-DIR-TYPE-03" 464887Schin 474887Schin #define FF_ESC 0036 484887Schin #define FF_MAX 0200 494887Schin #define FF_MIN 0040 504887Schin #define FF_OFF 0016 514887Schin 524887Schin #define FF_SET_TYPE(p,i) ((p)->decode.bigram1[((i)>>3)&((1<<CHAR_BIT)-1)]|=(1<<((i)&07))) 534887Schin #define FF_OK_TYPE(p,i) (!(p)->types||((p)->decode.bigram1[((i)>>3)&((1<<CHAR_BIT)-1)]&(1<<((i)&07)))) 544887Schin 554887Schin typedef struct 564887Schin { 574887Schin char* end; 584887Schin char* type; 594887Schin char* restore; 604887Schin int count; 614887Schin int found; 624887Schin int ignorecase; 634887Schin int match; 644887Schin int peek; 654887Schin int swap; 664887Schin regex_t re; 674887Schin char bigram1[(1<<(CHAR_BIT-1))]; 684887Schin char bigram2[(1<<(CHAR_BIT-1))]; 694887Schin char path[PATH_MAX]; 704887Schin char temp[PATH_MAX]; 714887Schin char pattern[1]; 724887Schin } Decode_t; 734887Schin 744887Schin typedef struct 754887Schin { 764887Schin Dtdisc_t namedisc; 774887Schin Dtdisc_t indexdisc; 784887Schin Dt_t* namedict; 794887Schin Dt_t* indexdict; 804887Schin int prefix; 814887Schin unsigned char bigram[2*FF_MAX]; 824887Schin unsigned short code[FF_MAX][FF_MAX]; 834887Schin unsigned short hits[USHRT_MAX+1]; 844887Schin char path[PATH_MAX]; 854887Schin char mark[PATH_MAX]; 864887Schin char file[PATH_MAX]; 874887Schin char temp[PATH_MAX]; 884887Schin } Encode_t; 894887Schin 904887Schin typedef union 914887Schin { 924887Schin Decode_t code_decode; 934887Schin Encode_t code_encode; 944887Schin } Code_t; 954887Schin 964887Schin typedef struct 974887Schin { 984887Schin Dtlink_t byname; 994887Schin Dtlink_t byindex; 1004887Schin unsigned long index; 1014887Schin char name[1]; 1024887Schin } Type_t; 1034887Schin 1044887Schin #define _FIND_PRIVATE_ \ 1054887Schin Finddisc_t* disc; \ 1064887Schin Vmalloc_t* vm; \ 1074887Schin char** dirs; \ 1084887Schin int* lens; \ 1094887Schin Sfio_t* fp; \ 1104887Schin Findverify_f verifyf; \ 1114887Schin int generate; \ 1124887Schin int method; \ 1134887Schin int secure; \ 1144887Schin int types; \ 1154887Schin int verify; \ 1164887Schin Code_t code; 1174887Schin 1184887Schin #define decode code.code_decode 1194887Schin #define encode code.code_encode 1204887Schin 1214887Schin #include <find.h> 1224887Schin 1234887Schin #endif 124