/***********************************************************************\ Filename: thesmisc.h \***********************************************************************/ #ifndef SC_THESMISC #define SC_THESMISC #ifndef _PROXLIB #include "proxlib.h" #endif #ifndef SC_SCDEF #include "scdef.h" #endif #ifndef SC_THES #include "thes.h" #endif /* flags set in control nibble of a meaning */ /* if corresponding lists are present */ /* HAS_SYN is not defined because it is always true */ #define HAS_CMP 0x10 #define HAS_REL 0x20 #define HAS_CON 0x40 #define HAS_ANT 0x80 /* general parameters and flags */ #define MAXINDEX 2048 /* max length of thes bin index */ #define LASTLIST 0x800000L /* set for last meaning of a word */ #define LASTMEAN 0x780000L /* set for last entry of a meaning */ #define LEXBITS 0x07FFFFL /* mask for lexicon address bits */ #define OVERFLOW 0x10000L /* 64K */ #define CODEFLD 8 #define CODEBITS 0x000FFL #define BINBITS 0x1FF00L #define IBINHDR 32 /* size of the i-bin headers */ #define INDFLD 14 #define INDFLAG 0x2000 #define INDBITS 0x1FFF #define MEANFLD 4 #define MEANBITS 0x000F #define MBINBITS 0x1FF0 #define DIRBITS 0x1FFFFL #define BLKBITS 0xFE00L #define WORDFLD 9 #define WORDBITS 0x001FFL #define POSBITS 0xF #define LISTFLD 4 #define LISTBITS 0xF0 #define LISTMAX 0xF #define HS_VERB 0x08000000L #define HS_NOUN 0x10000000L #define HS_INF 0x20000000L #define HS_SEEN 0x40000000L #define HS_SKIP 0x80000000L #define INFCODE 1 #define UNFCODE 0 #define UNFSEP '/' #define INFSEP '\016' #define binnum(whash) (((whash) & BINBITS) >> CODEFLD) #define codeval(whash) ((whash) & CODEBITS) #define indval(indhash) ((indhash) & INDBITS) #define meannum(mhash) ((mhash) & MEANBITS) #define meanbin(mhash) (((mhash) & MBINBITS) >> MEANFLD) #define eofind(mhash) (((mhash) & INDFLAG) == INDFLAG) #define wordno(dirhash) ((dirhash) & WORDBITS) #define blkno(dirhash) (((dirhash) & BLKBITS) >> WORDFLD) #define isset(hval,bval) (((hval) & (bval)) == (bval)) /* this defines the mode in which only the exceptions that go from */ /* inflection to root is found */ #define UNF_IR 0xFF /* function declarations */ long thesbit(); #define MAXREF 6 /* macros to test controls */ #define thunftst() (Thqcontrol & TH_INFPOS) #define thinftst(mi,ui) ((mi)>=(ui)) #define thpostst(pos) (Thqcontrol & (1 << pos)) /* structure to hold information about an unflectable ending */ typedef struct { char *en_end; /* the ending */ short en_len; /* length of ending */ short en_class; /* which class the ending falls into */ short en_pos; /* part of speech of unflected form */ short en_rel; /* how the root and inflection are related */ } END; extern short Thesprod; /* product type */ extern short Theswrev; /* word list type used */ extern short Thesnibin; /* size of ibin index table */ extern short Thesniadd; /* size of ioverflow add table */ extern short Thesnmbin; /* size of mbin index table */ extern short Thesnmadd; /* size of moverflow add table */ extern short Theslcode; /* length of longest huffman code */ extern short Thesnchars; /* number of entries in Thesxlate */ extern short Thesstrsiz; /* max. length of the lists */ extern short Thesmaxdef; /* length of longest definition */ extern short Thesmaxhash; /* max. number of words in the lists */ extern short Thesnumstr; /* no. of encoded words in the definitions */ extern short Thestotstr; /* */ extern short Thesdirfld; /* length of the direct hashes */ extern short Thesposfld; /* length of the POS field */ extern char *Theshuffstr; extern char **Theshuffind; /* thesaurus tables */ extern unsigned *Thesibin; /* thesaurus ibin index tables */ extern unsigned *Thesiadd; /* ioverflow add table */ extern unsigned *Thesmbin; /* thesaurus ibin index tables */ extern unsigned *Thesmadd; /* ioverflow add table */ extern unsigned *Thescnttab; /* counts for each huffman code */ extern char *Thesxlate; /* huffman translation table */ extern long Thesidata; /* offset to indirect table data */ extern long Thesmdata; /* offset to meaning data */ /* thesaurus information and control fields */ extern long Thqcontrol; /* thesaurus access control */ extern long Thqdesc; /* hash value for the query */ extern long Thqcuraddr; /* current address */ extern int Thqnstrarr; /* string array size */ extern int Thqtblind; /* index to the descriptor table */ extern int Thqendtab; /* */ extern short Thqstate; /* thesaurus access state */ extern char Thqcount; /* count of meanings in Thqmean */ extern char Thqspecial; /* if the query is a special */ extern char Thqphrase; /* if the query is a phrase */ extern char Thqquery[LONGWORD]; /* query word, after doflags */ extern char Thqunfquery[LONGWORD]; /* unflected word(s) */ extern char *Thqmultunf[MAXUNF]; /* pointer(s) to unflected word(s) */ extern short Thqunfindex[MAXUNF]; /* index of unflected meanings */ extern short Thqunfpos[MAXUNF]; /* part of speech from unflection */ extern short Thqnumdesc[MAXUNF]; /* */ extern long Thqworddesc[MAXUNF]; /* hash value for the unflections */ extern END *Thqstage[MAXUNF]; /* unflection stage entries */ extern int Thqindtab[MAXMEAN * 2]; /* indirect pointer table */ extern long Thqaddr[MAXMEAN]; /* address of the meanings */ /* memory to hold one meaning of a word looked up in thesaurus */ extern char Thmpos; /* part of speech number */ extern char Thmmeanno; /* meaning number in thesaurus */ extern char Thmcount[MAXLISTS]; /* count for each list */ extern char **Thmlist[MAXLISTS]; /* headers to NULL terminated lists */ extern char **Thmstrarr; /* pointers to the words in the lists */ extern char *Thmstrings; /* thesaurus strings */ extern char *Thmstrend; extern char *Thmsentinel; extern int Thmhstart[MAXLISTS]; extern long *Thmhashes; /* pointer to hashes */ #endif