2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these libraries and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
24 * COMPONENT_NAME: austext
31 * (C) COPYRIGHT International Business Machines Corp. 1991,1995
33 * Licensed Materials - Property of IBM
34 * US Government Users Restricted Rights - Use, duplication or
35 * disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
39 /***************************** SearchE.h ******************************
40 * $XConsortium: SearchE.h /main/5 1996/08/12 13:16:47 cde-ibm $
42 * Header file for online DtSearch Engine (OE.C etc).
43 * SearchE.h was formerly called oe.h (Opera Engine).
44 * The old OE engine is pretty much invisible now, having
45 * been surrounded by the ausapi/DtSearch interface.
47 * The main data structure for passing and receiving arguments
48 * between the callers and the engine is USRBLK which is
49 * the only argument in the Opera_Engine() call.
50 * The actual input and output arguments in the USRBLK for each
51 * function are described below with the function description.
53 * All OE_functions pass a return code
54 * to the caller. OE_OK = successful completion,
55 * anything else may be partial completion/success or failure.
56 * Return code mnemonics are also defined below.
59 * Revision 2.7 1996/03/20 19:11:21 miker
60 * Changed prototype of hilite_cleartext().
62 * Revision 2.6 1996/03/13 22:34:53 miker
63 * Changed char to UCHAR several places.
65 * Revision 2.5 1996/03/05 19:17:50 miker
66 * oe_unblob no longer converts to uppercase.
68 * Revision 2.4 1996/03/05 15:54:06 miker
69 * Minor changes to support yacc-based boolean search.
71 * Revision 2.3 1996/02/01 16:14:38 miker
72 * Obsoleted requests OE_DITTO2KWIC, OE_VALIDATE_PWD, OE_CHANGE_PWD,
73 * OE_FINDSTR_REC, OE_FINDSTR_HITL, OE_ASSIST, OE_KILL.
74 * Restored OE_PING as the official "null" function.
75 * Added USRDBG_HILITE and USRDBG_PARSE.
76 * Replaced STRKIND, OE_kind_of_stems, and oe_stems_to_hitwords
77 * with hilite_cleartext. Deleted oe_ditto2kwic, oe_findstr_hitl.
78 * Deleted usrblk.kwiclen.
80 * Revision 2.2 1995/10/25 22:35:45 miker
83 * Revision 2.1 1995/09/22 22:39:39 miker
84 * Freeze DtSearch 0.1, AusText 2.1.8
86 * Revision 1.1 1995/08/31 20:42:33 miker
89 * The DtSearch return codes wrap around the OE return codes.
93 #define AUDIT_FORMAT "UID=%-8s TIME=%s ELAP=%-3ld DB=%-8s HITS=%-5ld "
94 #define AUDIT_WHOWHEN "UID=%-8s TIME=%s"
95 #define DISCARD_FORMAT "%s\t\"%s\"\t%s\t%s\n"
96 #define HARDCOPY_SCRIPT "opprt.bat"
97 #define MAX_HITWCOUNT 200 /* max number hitwords that can be hilited */
98 #define WORDS_HITLIMIT 300000L
101 /*-------------------- Request Codes ------------------------
102 * All Engine requests, in addition to input below, require valid
105 * All Engine requests, in addition to output below,
106 * may return ausapi_msglist.
107 * There is no zero request code.
108 * See list of return codes for the ones that are marked 'common retncodes'.
111 #define OE_INITIALIZE 1
112 /* does lotsa stuff--see the function.
114 * .query = AUSAPI_VERSION of UI code
115 * .dblist = data from user config file
116 * .dblk = data from user config file
118 * .dblist = modified after load of site config file
119 * .dblk = modified after load of site config file
120 * .retncode = OE_OK, OE_NOTAVAIL, OE_ABORT
123 #define OE_TEXT2FZKEY 2
124 /* converts problem description text to fzkey.
126 * .query = problem description text
127 * .dblk = desired database and db parameters
129 * .fzkey = inference from query text analysis
130 * .retncode = common retncodes + OE_BAD_QUERY
133 #define OE_SRCH_FZKEY 3
134 /* Converts fzkey to hitlist of dba's.
135 * Not available for databases without semantic dictionaries.
137 * .fzkey = database search vector
138 * .dblk = desired database and db parameters
140 * .workproc = function to be called until !OE_SEARCHING
141 * .dittolist = hitlist sorted by proximity
142 * .dittocount = # of nodes on dittolist
143 * .retncode = common retncodes + OE_SEARCHING, OE_NOTAVAIL,
144 * OE_USER_STOP, OE_SYSTEM_STOP, OE_BAD_QUERY
147 #define OE_SRCH_STEMS 4
148 /* converts string of wordstems and booleans to
149 * hitlist of dba's and stems array.
151 * .query = text string of wordstems and booleans
152 * .dblk = desired database and db parameters
154 * .fzkey = (value undefined)
155 * .workproc = function to be called until !OE_SEARCHING
156 * .dittolist = hitlist
157 * .dittocount = # of nodes on dittolist
158 * .stems = array of stems for hiliting in text of hits
159 * .stemcount = size of 'stems' array
160 * .retncode = common retncodes + OE_BAD_QUERY, OE_SEARCHING,
161 * OE_NOTAVAIL, OE_USER_STOP
164 #define OE_SRCH_WORDS 5
165 /* converts string of exact words and booleans to
166 * hitlist of dba's and stems array.
168 * .query = text string of exact words and booleans
169 * .dblk = desired database and db parameters
171 * .fzkey = (value undefined)
172 * .workproc = function to be called until !OE_SEARCHING
173 * .dittolist = hitlist
174 * .dittocount = # of nodes on dittolist
175 * .stems = array of words for hiliting in text of hits
176 * .stemcount = size of 'stems' array
177 * .retncode = common retncodes + OE_BAD_QUERY, OE_SEARCHING,
178 * OE_NOTAVAIL, OE_USER_STOP
181 #define OE_STOP_SRCH 6
182 /* sets global switch to cancel search work procedure.
183 * workproc actually cancels itself after reading switch.
184 * input: .request = OE_STOP_SEARCH
185 * output: .retncode = 'common retncodes' only
188 #define OE_APPEND_NOTES 7
189 /* appends user's notes to record at current dba.
191 * .query = freeform text of append
192 * .dba = address of record to append
193 * .dblk = desired database and db parameters
195 * .retncode = common retncodes + OE_TIMEOUT, OE_DISABLED
199 /* retrieves record, cleartext, and notes for specified dba.
200 * Clears hitwords array, does not use or change stems array.
202 * .dba = address of record to retrieve
203 * .dblk = desired database and db parameters
205 * .objrec = austext record itself, as is from vista
206 * .cleartext = NULL or uncompressed text string
207 * .clearlen = 0 or size of cleartext
208 * .hitwords = array pointer cleared to NULL
209 * .hitwcount = size of hitwords array set to 0
210 * .notes = NULL, or list of notes records, as is
211 * .retncode = common retncodes + OE_NOTAVAIL
214 #define OE_GETREC_STEMS 9
215 /* retrieves record, cleartext, notes, and hitwords
216 * array for specified dba and stems (from OE_SRCH_STEMS).
217 * If no text in repository, equivalent to OE_GETREC.
219 * .dba = address of record to retrieve
220 * .stems = array of word stems to hilite
221 * .stemcount = size of stems array
222 * .dblk = desired database and db parameters
224 * .objrec = austext record itself, as is from vista
225 * .cleartext = NULL or uncompressed text string
226 * .clearlen = 0 or size of cleartext
227 * .hitwords = NULL or array of words in cleartext to hilite
228 * .hitwcount = 0 or size of hitwords array
229 * .notes = NULL, or list of notes records, as is
230 * .retncode = common retncodes + OE_NOTAVAIL
233 #define OE_GETREC_WORDS 10
234 /* retrieves record, cleartext, notes, and hitwords
235 * array for specified dba and stems array (from OE_SRCH_WORDS).
236 * If no text in repository, equivalent to OE_GETREC.
238 * .dba = address of record to retrieve
239 * .stems = array of exact words to hilite
240 * .stemcount = size of stems array
241 * .dblk = desired database and db parameters
243 * .objrec = austext record itself, as is from vista
244 * .cleartext = NULL or uncompressed text string
245 * .clearlen = 0 or size of cleartext
246 * .hitwords = NULL or array of words in cleartext to hilite
247 * .hitwcount = 0 or size of hitwords array
248 * .notes = NULL, or list of notes records, as is
249 * .retncode = common retncodes + OE_NOTAVAIL
252 #define OE_NEXT_DBA 11
253 /* advances dba to next valid b-tree address. Wraps if necessary.
255 * .dba = current address of record
256 * .dblk = desired database and db parameters
258 * .dba = address of next record in b-tree
259 * .retncode = common retncodes + OE_WRAPPED
262 #define OE_PREV_DBA 12
263 /* retreats dba to previous valid b-tree address.
264 * Wraps if necessary.
266 * .dba = current address of record
267 * .dblk = desired database and db parameters
269 * .dba = address of previous record in b-tree
270 * .retncode = common retncodes + OE_WRAPPED
273 #define OE_RECKEY2DBA 13
274 /* converts an austext record key into a dba. Wraps if not found.
276 * .query = desired record key
277 * .dblk = desired database and db parameters
279 * .dba = address of record found,
280 * or next avail address if not found
281 * .retncode = common retncodes + OE_WRAPPED
284 #define OE_MARK_DELETION 14
285 /* writes record id to an external file for
286 * possible later deletion by external program.
288 * .query = record key to be marked for deletion
289 * .dblk = database where record is located
291 * .retncode = common retncodes + OE_NOTAVAIL, OE_DISABLED
294 #define OE_GETREC_DIC 15
295 /* THIS FUNCTION IS NO LONGER SUPPORTED.
296 * IF RECEIVED BY ENGINE, IT IS TREATED EXACTLY AS OE_GETREC.
297 * Retrieves record, cleartext, notes, and hitwords
298 * array for specified dba. Hitwords are not derived from the
299 * stems array; they are all the cleartext words that are in
300 * the dictionary. (Compare to OE_GETREC_WORDS and OE_GETREC_STEMS).
301 * If no text in repository, equivalent to OE_GETREC.
303 * .dba = address of record to retrieve
304 * .dblk = desired database and db parameters
306 * .objrec = austext record itself, as is from vista
307 * .cleartext = NULL or uncompressed text string
308 * .clearlen = 0 or size of cleartext
309 * .hitwords = NULL or array of words in cleartext to hilite
310 * .hitwcount = 0 or size of hitwords array
311 * .notes = NULL, or list of notes records, as is
312 * .retncode = common retncodes + OE_NOTAVAIL
315 #define OE_DITTO2KWIC 16
316 #define OE_VALIDATE_PWD 17
317 #define OE_CHANGE_PWD 18
318 /* (These functions are obsolete) */
320 #define OE_DELETE_RECID 19
321 /* Deletes header record, all text, user notes,
322 * and word/stems references for specified record.
323 * Currently can only be called from offline program
324 * when all online austext users have been logged off.
325 * THIS FUNCTION IS <<<VERY>>> SLOW (about 15 min on large dbase)!
327 * .query = desired record key
328 * .dblk = desired database and db parameters
330 * .dba = address of record deleted
331 * THIS ADDRESS IS NO LONGER VALID!
332 * .dbatab = (undefined)
334 * .retncode = common retncodes + OE_NOTAVAIL
337 #define OE_DELETE_BATCH 20
338 /* Deletes header records, all text, user notes,
339 * and word/stems references for all records in a
340 * datbase address table. Currently can only be called
341 * from offline program when all online austext users
342 * have been logged off. This function is the preferred
343 * deletion method because it is faster than deleting
344 * single records at a time. Addresses not found are ignored.
346 * .dblk = desired database and db parameters
347 * .dbatab = table of valid addresses to be deleted
348 * .dbacount = number of addresses on the table
350 * .retncode = common retncodes only
354 #define OE_FINDSTR_REC 22
355 #define OE_FINDSTR_HITL 23
356 /* (These functions are obsolete) */
358 #define OE_SRCH_STATISTICAL 24
359 /* Converts string of natural language text to
360 * hitlist of dba's and stems array. Uses stems only,
361 * no booleans, all words are ORed together. Hitlist sorted
362 * based on statistics of included word stems.
364 * .query = natural language text string
365 * .dblk = desired database and db parameters
367 * .stems = array of stems for hiliting in text of hits
368 * .stemcount = size of 'stems' array (up to max allowed)
369 * .workproc = function to be called until !OE_SEARCHING
370 * .dittolist = hitlist
371 * .dittocount = # of nodes on dittolist
372 * .retncode = common retncodes + OE_BAD_QUERY, OE_SEARCHING,
373 * OE_NOTAVAIL, OE_USER_STOP
376 #define OE_HILITE_STEMS 25
377 /* Creates a hitwords array for hiliting using the text
378 * in cleartext (however it may have been obtained),
379 * and the stems array from the last search.
381 * .cleartext = text to be hilited
382 * .clearlen = size of cleartext
383 * .stems = array of words or stems to hilite
384 * .stemcount = size of stems array
385 * .search_type = 'W', 'P' or 'S', indicating type of
386 * search that generated stems array.
388 * .hitwords = array of words in cleartext to hilite
389 * .hitwcount = size of hitwords array
390 * .retncode = common retncodes + OE_NOTAVAIL, OE_BAD_QUERY
393 #define OE_GET_EXPIRE 26
394 /* Returns in 'dba' field the expiration date of OE as a timestamp.
395 * Zero means no expiration date. Overlays previous value in dba.
396 * input: .request = OE_GET_EXPIRE
397 * output: .dba = unix timestamp of expiration date or 0
398 * .retncode = common retncodes only
403 #define OE_SHUTDOWN 9999
404 /* (These functions are obsolete) */
406 /*-------------------- Return Codes ------------------------
407 * The return codes marked 'common retncodes' are OE_OK, OE_NOOP, OE_REINIT,
408 * and OE_ABORT, and can be returned by almost all functions.
409 * OE_BAD_QUERY will be returned for any unknown function request.
410 * There is no zero return code.
412 #define OE_OK 1 /* normal successful completion */
413 #define OE_REINIT 2 /* request canceled: OE reinitialized
414 * databases so UI's dba's may be bad */
415 #define OE_SEARCHING 3 /* keep calling workproc */
416 #define OE_BAD_DBLK 4
417 #define OE_BAD_REQUEST 5 /* invalid request field */
418 #define OE_BAD_QUERY 6 /* invalid query or other input fld */
419 #define OE_NOTAVAIL 7 /* no record, hits, function disabled */
421 #define OE_WRAPPED 9 /* got next item instead of reqstd item */
422 #define OE_SYSTEM_STOP 10 /* error: search canceled by OE */
423 #define OE_BAD_PASSWD 11 /* invalid password */
424 #define OE_BAD_HITLIST 12 /* invalid hitlist */
425 #define OE_DISABLED 13 /* requested function disabled at this site */
426 #define OE_USER_STOP 14 /* search canceled by user */
427 #define OE_BAD_COMM 15 /* request canceled by comm layer */
428 #define OE_NOOP 888 /* No Operation, nothing done */
429 #define OE_ABORT 999 /* fatal OE error, OE permanently disabled */
432 /****************************************/
436 /****************************************/
437 /* Table used in load_ocf() oe_uninitialize() to allow overriding default
438 * locations of various files. Complete discussion in .ocf documentation.
442 char *id; /* keyword identifier */
443 char **OEFptr; /* addr of variable to change */
444 char previously_specified; /* bool ensures only one spec */
447 /****************************************/
451 /****************************************/
454 char userid [10]; /* 1 - 8 alphanumeric char */
455 int search_type; /* single char = curr search type.
456 * 'T' = Semantic Text search
457 * 'W' = Exact Words search
460 * 'N' = Navigator string (unpacked fzk) srch
461 * 'P' = Statistical (Probabilistic) search
464 long flags; /* bit switches... */
465 #define USR_BIT_1 0x0001L /* (reserved) */
466 #define USR_NO_ITERATE 0x0002L /* override iterations in workprocs */
467 #define USR_STOPSRCH 0x0004L /* the "stop" button, cancels workproc */
468 #define USR_MAXMIN 0x0008L /* symdif() algorithm = fuzzy max min */
469 #define USR_OBJDATES 0x0010L /* restrict hitlists to objdate ranges */
470 #define USR_KWIC_ABSTR 0x0020L /* retn KeyWord In Context for abstract */
471 #define USR_NO_INFOMSGS 0x0040L /* do not retn information-only msgs to UI */
472 #define USR_MAXHITS_MSG 0x0080L /* show # hits each keytype if sum > maxhits */
473 #define USR_SORT_WHITL 0x0100L /* sort word/stem hitlists by semantics */
475 long debug; /* Nonproduction bit switches */
476 #define USRDBG_RARE 0x0001L /* 1 Misc initialzatn trace msgs */
477 #define USRDBG_SRCHCMPL 0x0002L /* 2 trace ui search_completed functions */
478 #define USRDBG_RETRVL 0x0004L /* 4 trace record retrieval funcs */
479 #define USRDBG_ITERATE 0x0008L /* 8 forces iteration on all iterable cmds */
480 #define USRDBG_UTIL 0x0010L /* 16 trace misc utility functions */
481 #define USRDBG_MEDPRMPT 0x0020L /* 32 Prints prompt of medley sockets cmds */
482 #define USRDBG_HITLIST 0x0040L /* 64 print hitlists after searches */
483 #define USRDBG_SYMP 0x0080L /* 128 trace symptom search funcs */
484 #define USRDBG_DELETE 0x0100L /* 256 trace record deletion functions */
485 #define USRDBG_RPC 0x0200L /* 512 trace RPC communications funcs */
486 #define USRDBG_VERBOSE 0x0400L /* 1024 verbose debugging: iterative details */
487 #define USRDBG_HILITE 0x0800L /* 2048 trace hiliting functions */
488 #define USRDBG_PARSE 0x1000L /* 4096 trace linguistic parse/stem funcs */
489 #define USRDBG_BOOL 0x2000L /* 8192 trace boolean parse funcs */
493 char *query; /* input data for text searches */
494 DtSrObjdate objdate1; /* only retn hit objects >= (after) date1 */
495 DtSrObjdate objdate2; /* only retn hit objects <= (before) date2 */
496 DB_ADDR dba; /* for direct dba reads */
497 DB_ADDR *dbatab; /* array of dba's for batch deletes */
498 int dbacount; /* # of dba's in dbatab */
499 void (*workproc) (void);
500 /* (1) If single tasking (iterative), OE places ptr to work
501 procedure. (2) If multitasking (no iterations), UI places
502 ptr of func to call when OE's spawned subtask is done. */
504 DBLK *dblist; /* linked list of all databases */
505 DBLK *dblk; /* users curr database selection */
507 DtSrResult *dittolist; /* hitlist retnd from various searches */
508 long dittocount; /* # of items on hitlist */
509 int stemcount; /* # of wordstems in 'stems' array */
510 char stems [DtSrMAX_STEMCOUNT] [DtSrMAXWIDTH_HWORD];
511 /* for hiliting words in text records */
513 struct or_objrec objrec; /* austext record buffer */
514 char *abstrbuf; /* buf to hold abstracts */
515 int abstrbufsz; /* maximum abstract size all databases */
516 char *cleartext; /* decompressed austext record text */
517 long clearlen; /* size of cleartext in bytes */
518 LLIST *notes; /* uncompressed, right out of vista */
519 DtSrHitword *hitwords; /* array of hit words inside cleartext */
520 long hitwcount; /* number of elements in hitwords array */
526 /****************************************/
530 /****************************************/
531 /* The following data is saved between calls of the workprocs.
532 * In a future msg passing protocol where there may be multiple UIs
533 * per OE, this data would be maintained in a list of structures,
534 * one for each currently active search (UI only passes user id name
535 * in iterative calls, OE searches list to match curr status).
536 * But for now, this will have to do.
543 DtSrResult *dittolist;
546 char stems [DtSrMAX_STEMCOUNT] [DtSrMAXWIDTH_HWORD];
547 char ktchars [MAX_KTCOUNT + 2];
549 long ktsum [MAX_KTCOUNT + 1];
553 /*--------------- GLOBALS in oe.c, loadocf.c -------------------*/
554 extern char **ausapi_dbnamesv;
555 extern int ausapi_dbnamesc;
556 extern USRBLK usrblk;
558 extern char *global_memory_ptr;
559 extern OEFTAB oef_table[];
560 extern SAVEUSR saveusr; /* (only one for now) */
563 extern int OE_bmhtab_strlen [DtSrMAX_STEMCOUNT];
564 extern size_t OE_bmhtables [DtSrMAX_STEMCOUNT] [MAX_BMHTAB];
566 extern int OE_enable_markdel;
567 extern int OE_enable_usernotes;
568 extern time_t *OE_expiration;
569 extern int OE_fastdecode;
570 extern char *OE_fileio;
571 extern long OE_flags;
572 #define OE_AUDIT 1L /* enables audit file logging */
573 #define OE_INITOK (1L<<1) /* ensures first reqst was INITIALIZE */
574 #define OE_PERMERR (1L<<2) /* disables engine on fatal errors */
575 #define OE_NO_ITERATE (1L<<3) /* override iterations in workprocs */
576 extern char *OE_inittab_dir; /* local dir of server daemon */
577 extern long OE_objsize;
578 extern char *OE_prodname;
579 extern int OE_search_type;
580 extern char *OE_server_dir; /* local dir of server daemon */
581 extern char *OE_sitecnfg_fname;
582 extern time_t OE_sitecnfg_mtime;
583 extern int OE_uppercase_keys;
584 extern long OE_words_hitlimit;
586 /* Global pointers to formerly hardcoded path/file names.
587 * The comment names the #define constant under which the
588 * filename is/was specified in either fuzzy.h or oe.h.
590 extern char *OEF_audit; /* FNAME_AUDIT */
591 extern char *OEF_discard; /* FNAME_DISCARD_DATA */
592 extern char *OEF_news; /* FNAME_SITENEWS */
593 extern char *OEF_notesnot; /* FNAME_NOTES_BAC */
594 extern char *OEF_notessem; /* FNAME_NOTES_SEM */
595 extern char *OEF_readme; /* FNAME_README */
597 /*---------------- FUNCTION PROTOTYPES ----------------------*/
598 extern char *calloe_getrec (char *dbname, DB_ADDR dba,
599 LLIST **global_msglist);
600 extern long calloe_hilite (char *cleartext, DtSrHitword *hitwords,
601 LLIST **global_msglist);
603 *calloe_search (char *qry, char *dbname,
604 int search_type, LLIST **global_msglist);
605 extern int call_output_script (char *shellcmd, char *text);
606 extern void clear_hitwords (void);
607 extern void clear_usrblk_record (void);
608 extern void dummy_workproc (void);
609 extern char *ensure_end_slash (char *charbuf);
610 extern void fasthuf (UCHAR *input_bitstring, UCHAR *output_charbuf,
611 int outbuf_size, time_t encode_id);
612 extern char *get_hitlist_text (int maxlen);
613 extern long hilite_cleartext (int parse_type, char *stems, int stemcount);
614 extern int load_ocf (void);
615 extern char *nowstring (time_t *now);
616 extern void oe_initialize (void);
617 extern int oe_unblob (LLIST *bloblist);
618 extern void oe_write_audit_rec (long numhits);
619 extern void Opera_Engine (void);
620 extern void print_dittolist (DtSrResult *dittolist, char *label);
621 extern void print_stems (int stemcount, void *stems, char *locstr);
622 extern void print_usrblk_record (char *label);
623 extern void release_shm_mem (void);
624 extern char *retncode_str (int num);
625 extern void symptom_search (void);
626 extern int ve_append_notes (void);
627 extern void ve_browse_dba (int direction);
628 extern LLIST *ve_getblobs (DtSrINT32 dba, int vistano);
629 extern int ve_getrec_dba (LLIST **bloblist);
630 extern int ve_initialize (void);
631 extern void ve_ditto (void);
632 extern DtSrINT32 ve_reckey2dba (void);
633 extern void ve_statistical (void);
634 extern void ve_stem_search (void);
635 extern void ve_word_search (void);
636 extern void ve_shutdown (void);
638 /***************************** SearchE.h ******************************/
639 #endif /* _SearchE_h */