Fix typo in license headers
[oweals/cde.git] / cde / lib / DtSearch / SearchE.h
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
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)
10  * any later version.
11  *
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
16  * details.
17  *
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
22  */
23 /*
24  *   COMPONENT_NAME: austext
25  *
26  *   FUNCTIONS: none
27  *
28  *   ORIGINS: 27
29  *
30  *
31  *   (C) COPYRIGHT International Business Machines Corp. 1991,1995
32  *   All Rights Reserved
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.
36  */
37 #ifndef _SearchE_h
38 #define _SearchE_h
39 /***************************** SearchE.h ******************************
40  * $XConsortium: SearchE.h /main/5 1996/08/12 13:16:47 cde-ibm $
41  * August 1991.
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.
46  * 
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.
52  * 
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.
57  *
58  * $Log$
59  * Revision 2.7  1996/03/20  19:11:21  miker
60  * Changed prototype of hilite_cleartext().
61  *
62  * Revision 2.6  1996/03/13  22:34:53  miker
63  * Changed char to UCHAR several places.
64  *
65  * Revision 2.5  1996/03/05  19:17:50  miker
66  * oe_unblob no longer converts to uppercase.
67  *
68  * Revision 2.4  1996/03/05  15:54:06  miker
69  * Minor changes to support yacc-based boolean search.
70  *
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.
79  *
80  * Revision 2.2  1995/10/25  22:35:45  miker
81  * Added prolog.
82  *
83  * Revision 2.1  1995/09/22  22:39:39  miker
84  * Freeze DtSearch 0.1, AusText 2.1.8
85  *
86  * Revision 1.1  1995/08/31  20:42:33  miker
87  * Initial revision
88  *
89  * The DtSearch return codes wrap around the OE return codes.
90  */
91 #include "SearchP.h"
92
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
99
100
101 /*-------------------- Request Codes ------------------------
102  * All Engine requests, in addition to input below, require valid
103  *     usrblk.userid
104  *     usrblk.request.
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'.
109  */
110
111 #define OE_INITIALIZE   1
112 /* does lotsa stuff--see the function.
113  * input:
114  *      .query =        AUSAPI_VERSION of UI code
115  *      .dblist =       data from user config file
116  *      .dblk =         data from user config file
117  * output:
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
121  */
122
123 #define OE_TEXT2FZKEY   2
124 /* converts problem description text to fzkey.
125  * input:
126  *      .query =        problem description text
127  *      .dblk =         desired database and db parameters
128  * output:
129  *      .fzkey =        inference from query text analysis
130  *      .retncode =     common retncodes + OE_BAD_QUERY
131  */
132
133 #define OE_SRCH_FZKEY   3
134 /* Converts fzkey to hitlist of dba's.
135  * Not available for databases without semantic dictionaries.
136  * input:
137  *      .fzkey =        database search vector
138  *      .dblk =         desired database and db parameters
139  * output:
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
145  */
146
147 #define OE_SRCH_STEMS   4
148 /* converts string of wordstems and booleans to
149  * hitlist of dba's and stems array.
150  * input:
151  *      .query =        text string of wordstems and booleans
152  *      .dblk =         desired database and db parameters
153  * output:
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
162  */
163
164 #define OE_SRCH_WORDS   5
165 /* converts string of exact words and booleans to
166  * hitlist of dba's and stems array.
167  * input:
168  *      .query =        text string of exact words and booleans
169  *      .dblk =         desired database and db parameters
170  * output:
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
179  */
180
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
186  */
187
188 #define OE_APPEND_NOTES  7
189 /* appends user's notes to record at current dba.
190  * input:
191  *      .query =        freeform text of append
192  *      .dba =          address of record to append
193  *      .dblk =         desired database and db parameters
194  * output:
195  *      .retncode =     common retncodes + OE_TIMEOUT, OE_DISABLED
196  */
197
198 #define OE_GETREC       8
199 /* retrieves record, cleartext, and notes for specified dba.
200  * Clears hitwords array, does not use or change stems array.
201  * input:
202  *      .dba =          address of record to retrieve
203  *      .dblk =         desired database and db parameters
204  * output:
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
212  */
213
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.
218  * input:
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
223  * output:
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
231  */
232
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.
237  * input:
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
242  * output:
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
250  */
251
252 #define OE_NEXT_DBA     11
253 /* advances dba to next valid b-tree address.  Wraps if necessary.
254  * input:
255  *      .dba =          current address of record
256  *      .dblk =         desired database and db parameters
257  * output:
258  *      .dba =          address of next record in b-tree
259  *      .retncode =     common retncodes + OE_WRAPPED
260  */
261
262 #define OE_PREV_DBA     12
263 /* retreats dba to previous valid b-tree address.
264  * Wraps if necessary.
265  * input:
266  *      .dba =          current address of record
267  *      .dblk =         desired database and db parameters
268  * output:
269  *      .dba =          address of previous record in b-tree
270  *      .retncode =     common retncodes + OE_WRAPPED
271  */
272
273 #define OE_RECKEY2DBA   13
274 /* converts an austext record key into a dba.  Wraps if not found.
275  * input:
276  *      .query =        desired record key
277  *      .dblk =         desired database and db parameters
278  * output:
279  *      .dba =          address of record found,
280  *                      or next avail address if not found
281  *      .retncode =     common retncodes + OE_WRAPPED
282  */
283
284 #define OE_MARK_DELETION  14
285 /* writes record id to an external file for
286  * possible later deletion by external program.
287  * input:
288  *      .query =        record key to be marked for deletion
289  *      .dblk =         database where record is located
290  * output:
291  *      .retncode =     common retncodes + OE_NOTAVAIL, OE_DISABLED
292  */
293
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.
302  * input:
303  *      .dba =          address of record to retrieve
304  *      .dblk =         desired database and db parameters
305  * output:
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
313  */
314
315 #define OE_DITTO2KWIC   16
316 #define OE_VALIDATE_PWD 17
317 #define OE_CHANGE_PWD   18
318 /* (These functions are obsolete) */
319
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)!
326  * input:
327  *      .query =        desired record key
328  *      .dblk =         desired database and db parameters
329  * output:
330  *      .dba =          address of record deleted
331  *                      THIS ADDRESS IS NO LONGER VALID!
332  *      .dbatab =       (undefined)
333  *      .dbacount =     1
334  *      .retncode =     common retncodes + OE_NOTAVAIL
335  */
336
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.
345  * input:
346  *      .dblk =         desired database and db parameters
347  *      .dbatab =       table of valid addresses to be deleted
348  *      .dbacount =     number of addresses on the table
349  * output:
350  *      .retncode =     common retncodes only
351  */
352
353 #define OE_ASSIST       21
354 #define OE_FINDSTR_REC  22
355 #define OE_FINDSTR_HITL 23
356 /* (These functions are obsolete) */
357
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.
363  * input:
364  *      .query =        natural language text string
365  *      .dblk =         desired database and db parameters
366  * output:
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
374  */
375
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.
380  * input:
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.
387  * output:
388  *      .hitwords =     array of words in cleartext to hilite
389  *      .hitwcount =    size of hitwords array
390  *      .retncode =     common retncodes + OE_NOTAVAIL, OE_BAD_QUERY
391  */
392
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
399  */
400
401 #define OE_KILL         9997
402 #define OE_PING         9998
403 #define OE_SHUTDOWN     9999
404 /* (These functions are obsolete) */
405
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.
411  */
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 */
420 #define OE_TIMEOUT      8
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 */
430
431
432 /****************************************/
433 /*                                      */
434 /*              OEFTAB                  */
435 /*                                      */
436 /****************************************/
437 /* Table used in load_ocf() oe_uninitialize() to allow overriding default
438  * locations of various files.  Complete discussion in .ocf documentation.
439  */
440 typedef struct
441         {
442         char    *id;                    /* keyword identifier */
443         char    **OEFptr;               /* addr of variable to change */
444         char    previously_specified;   /* bool ensures only one spec */
445         } OEFTAB;
446
447 /****************************************/
448 /*                                      */
449 /*              USRBLK                  */
450 /*                                      */
451 /****************************************/
452 typedef struct
453     {
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
458                                  * 'S' = Stems search
459                                  * 'Z' = Fzkey search
460                                  * 'N' = Navigator string (unpacked fzk) srch
461                                  * 'P' = Statistical (Probabilistic) search
462                                  */
463
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 */
474
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 */
490
491     int         request;
492     int         retncode;
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. */
503
504     DBLK        *dblist;        /* linked list of all databases */
505     DBLK        *dblk;          /* users curr database selection */
506
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 */
512
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 */
521
522     }    USRBLK;
523
524
525
526 /****************************************/
527 /*                                      */
528 /*              SAVEUSR                 */
529 /*                                      */
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.
537  */
538 typedef struct
539     {
540     time_t      start_time;
541     int         iterations;
542     int         vistano;
543     DtSrResult  *dittolist;
544     long        dittocount;
545     int         stemcount;
546     char        stems [DtSrMAX_STEMCOUNT] [DtSrMAXWIDTH_HWORD];
547     char        ktchars [MAX_KTCOUNT + 2];
548     char        *lastqry;
549     long        ktsum [MAX_KTCOUNT + 1];
550     }  SAVEUSR;
551
552
553 /*--------------- GLOBALS in oe.c, loadocf.c -------------------*/
554 extern char     **ausapi_dbnamesv;
555 extern int      ausapi_dbnamesc;
556 extern USRBLK   usrblk;
557
558 extern char     *global_memory_ptr;
559 extern OEFTAB   oef_table[];
560 extern SAVEUSR  saveusr;        /* (only one for now) */
561 extern int      shm_id;
562
563 extern int      OE_bmhtab_strlen [DtSrMAX_STEMCOUNT];
564 extern size_t   OE_bmhtables [DtSrMAX_STEMCOUNT] [MAX_BMHTAB];
565 extern int      OE_dbn;
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;
585
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.
589  */
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 */
596
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);
602 extern DtSrResult
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);
637
638 /***************************** SearchE.h ******************************/
639 #endif   /* _SearchE_h */