da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner* Copyright (c) 1985-2010 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* http://www.opensource.org/licenses/cpl1.0.txt *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Glenn Fowler <gsf@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Phong Vo <kpv@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#pragma prototyped
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * fast find private interface
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef _FINDLIB_H
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define _FINDLIB_H
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <ast.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <cdt.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <ctype.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <error.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <ls.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <regex.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <vmalloc.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_old 1 /* old format - 7 bit bigram */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_gnu 2 /* gnu 8 bit no bigram */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_dir 3 /* FF_gnu, dirs have trailing / */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_typ 4 /* FF_dir with types */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_gnu_magic "LOCATE02"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_dir_magic "FIND-DIR-02"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_typ_magic "FIND-DIR-TYPE-03"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_ESC 0036
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_MAX 0200
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_MIN 0040
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_OFF 0016
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_SET_TYPE(p,i) ((p)->decode.bigram1[((i)>>3)&((1<<CHAR_BIT)-1)]|=(1<<((i)&07)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define FF_OK_TYPE(p,i) (!(p)->types||((p)->decode.bigram1[((i)>>3)&((1<<CHAR_BIT)-1)]&(1<<((i)&07))))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* end;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* type;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* restore;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int count;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int found;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int ignorecase;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int match;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int peek;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int swap;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin regex_t re;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char bigram1[(1<<(CHAR_BIT-1))];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char bigram2[(1<<(CHAR_BIT-1))];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char path[PATH_MAX];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char temp[PATH_MAX];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char pattern[1];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin} Decode_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dtdisc_t namedisc;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dtdisc_t indexdisc;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dt_t* namedict;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dt_t* indexdict;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int prefix;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned char bigram[2*FF_MAX];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned short code[FF_MAX][FF_MAX];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned short hits[USHRT_MAX+1];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char path[PATH_MAX];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char mark[PATH_MAX];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char file[PATH_MAX];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char temp[PATH_MAX];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin} Encode_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef union
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Decode_t code_decode;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Encode_t code_encode;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin} Code_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dtlink_t byname;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dtlink_t byindex;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned long index;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char name[1];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin} Type_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define _FIND_PRIVATE_ \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Finddisc_t* disc; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Vmalloc_t* vm; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char** dirs; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int* lens; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Sfio_t* fp; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Findverify_f verifyf; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int generate; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int method; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int secure; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int types; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int verify; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Code_t code;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define decode code.code_decode
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define encode code.code_encode
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <find.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif