1da2e3ebdSchin /*********************************************************************** 2da2e3ebdSchin * * 3da2e3ebdSchin * This software is part of the ast package * 4*3e14f97fSRoger A. Faulkner * Copyright (c) 1985-2010 AT&T Intellectual Property * 5da2e3ebdSchin * and is licensed under the * 6da2e3ebdSchin * Common Public License, Version 1.0 * 77c2fbfb3SApril Chin * by AT&T Intellectual Property * 8da2e3ebdSchin * * 9da2e3ebdSchin * A copy of the License is available at * 10da2e3ebdSchin * http://www.opensource.org/licenses/cpl1.0.txt * 11da2e3ebdSchin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 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