/*
* CDE - Common Desktop Environment
*
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these libraries and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/*
* COMPONENT_NAME: austext
*
* FUNCTIONS:
*
* ORIGINS: 27
*
*
* (C) COPYRIGHT International Business Machines Corp. 1990,1995
* All Rights Reserved
* Licensed Materials - Property of IBM
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
#ifndef _SearchP_h
#define _SearchP_h
/************************ SearchP.h ********************************
* $XConsortium: SearchP.h /main/9 1996/10/12 16:10:00 cde-ibm $
* June 1990.
* Private header file for DtSearch/AusText used by
* both build tools and search engine.
* Derived from original IBM fuzzy.h.
*
* Hierarchies of DtSearch/AusText Search*.h #includes:
* Search.h is Dt/Aus public header, defines _XOPEN_SOURCE.
* SearchP.h is private Dt/Aus, includes Search.h.
* semantic.h is private Aus only, defines _ALL_SOURCE,
* includes SearchP.h.
* (Should be specified in place of SearchP.h).
* SearchE.h is private engine header Dt/Aus. Invokes either
* SearchP.h or semantic.h depending on whether DTSEARCH defined.
* Only one of the above should be specified. They should always
* be first include to get the _SOURCE defines right.
* DTSEARCH should be defined on compiler cmd line.
*
* $Log$
* Revision 2.11 1996/04/10 19:44:43 miker
* AusText 2.1.13, DtSearch 0.5. Documentation cleanup.
*
* Revision 2.10 1996/03/13 22:35:14 miker
* Added UCHAR definition. Changed char to UCHAR several places.
*
* Revision 2.9 1996/03/05 16:48:56 miker
* Add COMMENT_CHARS from lang.c.
*
* Revision 2.8 1996/03/05 15:58:57 miker
* Replace vewords with yacc-based boolean search.
*
* Revision 2.7 1996/02/01 16:26:06 miker
* AUSAPI_VERSION 2.1.11, DtSearch 0.3:
* Changed parsers to use character reading cofunctions.
*
* Revision 2.6 1995/12/27 15:51:36 miker
* Version 2.1.10: First GA release of AusBuild.
*
* Revision 2.5 1995/12/07 23:24:38 miker
* Version 2.1.9e: Freezing AusBuild version with
* everything except multiple source files dialog box.
*
* Revision 2.4 1995/10/25 22:29:29 miker
* Added prolog.
*
* Revision 2.3 1995/10/19 19:07:42 miker
* Changed AUSAPI_VERSION to 2.1.9 (but not yet released).
*
* Revision 2.2 1995/10/03 21:36:13 miker
* Added 'const' to strdup prototype for greater portability.
*
* Revision 2.1 1995/09/22 22:39:41 miker
* Freeze DtSearch 0.1, AusText 2.1.8
*
* Revision 1.3 1995/09/19 21:38:59 miker
* Removed debugging #defines.
*/
#include "Search.h" /* the "public" header file */
#include
/* for nl_catd below and all cat...() funcs */
#include
#include
#define AUSAPI_VERSION "2.1.13"
/* Format: "v.r.m", where v,r,m are integer substrings
* meaning version, revision, and mod respectively.
* Complete new version austomatically sets revision=1, mod=0.
* New revision within a version just sets mod=0.
* When mod=0, full string may be abbreviated to "v.r".
* Full string will contain no whitespace.
* AUSAPI_VERSION is compared to current versions of database
* schemas and client/server protocols by ausapi_init().
* By convention, AusText programs display AUSAPI_VERSION
* at the top of the main gui window and in usage statements.
*/
#define SCHEMA_VERSION "2.0"
/* Identifies when schema last changed.
* Same format as AUSAPI_VERSION, except only "v.r" substring used.
* To ensure compatibility, database programs must have v.r integers
* within the range between SCHEMA_VERSION and AUSAPI_VERSION.
* The 3rd integer, the 'mod' number, never matters.
*/
#define PROTOCOL_VERSION "2.1"
/* Identifies when protocol between ui and engine/ausapi
* last changed. Typical changes would be changes to major
* structures like usrblk, dblk, and socblk, or changes to
* the arguments for either ausapi or Opera_Engine calls.
* Only meaningful for client/server systems.
* Same format as AUSAPI_VERSION, except only "v.r" substring used.
* To ensure compatibility, clients must have v.r integers
* within the range between PROTOCOL_VERSION and AUSAPI_VERSION
* of the engine. The 3rd integer, the 'mod' number, never matters.
*/
/*------------- #define Compiler and related #defines ------------------
* #define TURBO_COMPILER...
* #define PS2AIX_COMPILER...
* #define AIX370_COMPILER...
* #define HP_COMPILER...
* #define _AIX...
* ... define one of the above at top of Search.h to provide
* structures and functions that are compiler dependent.
* Since the compiler definition must precede all other headers,
* the #include for Search.h must be the first statement of all source
* files.
*
* UCHAR corrects for compilers whose default char is signed.
*/
#define UCHAR unsigned char
#ifdef TURBO_COMPILER
#define LINT_ARGS /* establishes strong prototyping in vista */
#define ANSI /* allow multiple databases in vista */
#else
#define SINGLE_USER /* eliminate vista lockmgr */
#define UNIX /* used in vista.h and elsewhere */
#endif
/*----------------------- AUSTEXT.H ---------------------
* DBMS record/key structure and constant declarations.
* These represent the database schema formerly in austext.h
* and derived from austext.sch.
*/
typedef struct or_dbrec {
DtSrUINT32 or_dbflags;
DtSrUINT32 or_dbuflags;
DtSrINT32 or_reccount;
DtSrINT32 or_maxdba;
DtSrINT32 or_availd99;
DtSrINT32 or_unavaild99;
DtSrINT32 or_hufid;
DtSrINT32 or_dbsecmask;
char or_version[8];
char or_dbfill[50];
DtSrINT16 or_dbotype;
DtSrINT16 or_compflags;
DtSrINT16 or_dbaccess;
DtSrINT16 or_minwordsz;
DtSrINT16 or_maxwordsz;
DtSrINT16 or_recslots;
DtSrINT16 or_fzkeysz;
DtSrINT16 or_abstrsz;
DtSrINT16 or_language;
} DBREC;
struct or_dbmiscrec {
DtSrINT16 or_dbmisctype;
char or_dbmisc[1][106];
};
struct or_objrec {
DtSrUINT32 or_objflags;
DtSrUINT32 or_objuflags;
DtSrINT32 or_objsize;
DtSrINT32 or_objdate;
DtSrINT32 or_objsecmask;
char or_objkey[32];
char or_objfill[34];
DtSrINT16 or_objaccess;
DtSrINT16 or_objtype;
DtSrINT16 or_objcost;
DtSrINT16 or_objhdroffset;
DtSrINT16 or_objeureka;
};
struct or_miscrec {
DtSrINT16 or_misctype;
char or_misc[1][105];
};
struct or_blobrec {
DtSrINT16 or_bloblen;
char or_blob[234][1];
};
struct or_swordrec {
char or_swordkey[16];
DtSrINT32 or_swoffset;
DtSrINT32 or_swfree;
DtSrINT32 or_swaddrs;
};
struct or_lwordrec {
char or_lwordkey[40];
DtSrINT32 or_lwoffset;
DtSrINT32 or_lwfree;
DtSrINT32 or_lwaddrs;
};
struct or_hwordrec {
char or_hwordkey[134];
DtSrINT32 or_hwoffset;
DtSrINT32 or_hwfree;
DtSrINT32 or_hwaddrs;
};
/* File Id Constants */
#define OR_D00 0
#define OR_D01 1
#define OR_D21 2
#define OR_D22 3
#define OR_D23 4
#define OR_K00 5
#define OR_K01 6
#define OR_K21 7
#define OR_K22 8
#define OR_K23 9
/* Record Name Constants */
#define OR_DBREC 10000
#define OR_DBMISCREC 10001
#define OR_OBJREC 10002
#define OR_MISCREC 10003
#define OR_BLOBREC 10004
#define OR_SWORDREC 10005
#define OR_LWORDREC 10006
#define OR_HWORDREC 10007
/* Field Name Constants */
#define OR_DBFLAGS 0L
#define OR_DBUFLAGS 1L
#define OR_RECCOUNT 2L
#define OR_MAXDBA 3L
#define OR_AVAILD99 4L
#define OR_UNAVAILD99 5L
#define OR_HUFID 6L
#define OR_DBSECMASK 7L
#define OR_VERSION 8L
#define OR_DBFILL 9L
#define OR_DBOTYPE 10L
#define OR_COMPFLAGS 11L
#define OR_DBACCESS 12L
#define OR_MINWORDSZ 13L
#define OR_MAXWORDSZ 14L
#define OR_RECSLOTS 15L
#define OR_FZKEYSZ 16L
#define OR_ABSTRSZ 17L
#define OR_LANGUAGE 18L
#define OR_DBMISCTYPE 1000L
#define OR_DBMISC 1001L
#define OR_OBJFLAGS 2000L
#define OR_OBJUFLAGS 2001L
#define OR_OBJSIZE 2002L
#define OR_OBJDATE 2003L
#define OR_OBJSECMASK 2004L
#define OR_OBJKEY 2005L
#define OR_OBJFILL 2006L
#define OR_OBJACCESS 2007L
#define OR_OBJTYPE 2008L
#define OR_OBJCOST 2009L
#define OR_OBJHDROFFSET 2010L
#define OR_OBJEUREKA 2011L
#define OR_MISCTYPE 3000L
#define OR_MISC 3001L
#define OR_BLOBLEN 4000L
#define OR_BLOB 4001L
#define OR_SWORDKEY 5000L
#define OR_SWOFFSET 5001L
#define OR_SWFREE 5002L
#define OR_SWADDRS 5003L
#define OR_LWORDKEY 6000L
#define OR_LWOFFSET 6001L
#define OR_LWFREE 6002L
#define OR_LWADDRS 6003L
#define OR_HWORDKEY 7000L
#define OR_HWOFFSET 7001L
#define OR_HWFREE 7002L
#define OR_HWADDRS 7003L
/* Set Name Constants */
#define OR_DB_MISCS 20000
#define OR_OBJ_BLOBS 20001
#define OR_OBJ_MISCS 20002
/*----------------------- end AUSTEXT.H ---------------------*/
/*------------- DMACROS.H -------------------
* The following were formerly in dmacros.h.
* They provide macro enhancements to the
* DBMS function prototypes in vista.h.
* Each DBMS function is coded in a macro which includes
* a location string (usually module name + line number).
* The location string is printed whenever there is
* a user or system failure.
* Warning: These should not be coded naked within 'if-else' statements
* because the 'if' in the macros will interfere with the outside else.
*/
#define CMSTAT(s,a,b) if(d_cmstat(a,b) < S_OKAY) vista_abort(s)
#define CMTYPE(s,a,b,c) if(d_cmtype(a,b,c) < S_OKAY) vista_abort(s)
#define CONNECT(s,a,b) if(d_connect(a,b) < S_OKAY) vista_abort(s)
#define COSTAT(s,a,b) if(d_costat(a,b) < S_OKAY) vista_abort(s)
#define COTYPE(s,a,b,c) if(d_cotype(a,b,c) < S_OKAY) vista_abort(s)
#define CRGET(s,a,b) if(d_crget(a,b) < S_OKAY) vista_abort(s)
#define CRREAD(s,a,b,c) if(d_crread(a,b,c) < S_OKAY) vista_abort(s)
#define CRSET(s,a,b) if(d_crset(a,b) < S_OKAY) vista_abort(s)
#define CRSTAT(s,a) if(d_crstat(a) < S_OKAY) vista_abort(s)
#define CRTYPE(s,a,b) if(d_crtype(a,b) < S_OKAY) vista_abort(s)
#define CRWRITE(s,a,b,c) if(d_crwrite(a,b,c) < S_OKAY) vista_abort(s)
#define CSMGET(s,a,b,c) if(d_csmget(a,b,c) < S_OKAY) vista_abort(s)
#define CSMREAD(s,a,b,c,d) if(d_csmread(a,b,c,d) < S_OKAY) vista_abort(s)
#define CSMSET(s,a,b,c) if(d_csmset(a,b,c) < S_OKAY) vista_abort(s)
#define CSMWRITE(s,a,b,c,d) if(d_csmwrite(a,b,c,d) < S_OKAY) vista_abort(s)
#define CSOGET(s,a,b,c) if(d_csoget(a,b,c) < S_OKAY) vista_abort(s)
#define CSOREAD(s,a,b,c,d) if(d_csoread(a,b,c,d) < S_OKAY) vista_abort(s)
#define CSOSET(s,a,b,c) if(d_csoset(a,b,c) < S_OKAY) vista_abort(s)
#define CSOWRITE(s,a,b,c,d) if(d_csowrite(a,b,c,d) < S_OKAY) vista_abort(s)
#define CSSTAT(s,a,b) if(d_csstat(a,b) < S_OKAY) vista_abort(s)
#define CTBPATH(s,a) if(d_ctbpath(a) < S_OKAY) vista_abort(s)
#define CTSCM(s,a,b,c) if(d_ctscm(a,b,c) < S_OKAY) vista_abort(s)
#define CTSCO(s,a,b,c) if(d_ctsco(a,b,c) < S_OKAY) vista_abort(s)
#define CTSCR(s,a,b) if(d_ctscr(a,b) < S_OKAY) vista_abort(s)
#define DBDPATH(s,a) if(d_dbdpath(a) < S_OKAY) vista_abort(s)
#define DBFPATH(s,a) if(d_dbfpath(a) < S_OKAY) vista_abort(s)
#define DBLOG(s,a) if(d_dblog(a) < S_OKAY) vista_abort(s)
#define DBTAF(s,a) if(d_dbtaf(a) < S_OKAY) vista_abort(s)
#define DBUSERID(s,a) if(d_dbuserid(a) < S_OKAY) vista_abort(s)
#define DECODE_DBA(s,a,b,c) if(d_decode_dba(a,b,c) < S_OKAY) vista_abort(s)
#define DELETE(s,a) if(d_delete(a) < S_OKAY) vista_abort(s)
#define DESTROY(s,a) if(d_desoy(a) < S_OKAY) vista_abort(s)
#define DISCON(s,a,b) if(d_discon(a,b) < S_OKAY) vista_abort(s)
#define DISDEL(s,a) if(d_disdel(a) < S_OKAY) vista_abort(s)
#define ENCODE_DBA(s,a,b,c) if(d_encode_dba(a,b,c) < S_OKAY) vista_abort(s)
#define FILLNEW(s,a,b,c) if(d_fillnew(a,b,c) < S_OKAY) vista_abort(s)
#define FINDCO(s,a,b) if(d_findco(a,b) < S_OKAY) vista_abort(s)
#define FINDFM(s,a,b) if(d_findfm(a,b) < S_OKAY) vista_abort(s)
#define FINDLM(s,a,b) if(d_findlm(a,b) < S_OKAY) vista_abort(s)
#define FINDNM(s,a,b) if(d_findnm(a,b) < S_OKAY) vista_abort(s)
#define FINDPM(s,a,b) if(d_findpm(a,b) < S_OKAY) vista_abort(s)
#define FREEALL(s) if(d_freeall() < S_OKAY) vista_abort(s)
#define GTSCM(s,a,b,c) if(d_gtscm(a,b,c) < S_OKAY) vista_abort(s)
#define GTSCO(s,a,b,c) if(d_gtsco(a,b,c) < S_OKAY) vista_abort(s)
#define GTSCR(s,a,b) if(d_gtscr(a,b) < S_OKAY) vista_abort(s)
#define GTSCS(s,a,b,c) if(d_gtscs(a,b,c) < S_OKAY) vista_abort(s)
#define INITFILE(s,a,b) if(d_initfile(a,b) < S_OKAY) vista_abort(s)
#define INITIALIZE(s,a) if(d_initialize(a) < S_OKAY) vista_abort(s)
#define ISMEMBER(s,a,b) if(d_ismember(a,b) < S_OKAY) vista_abort(s)
#define ISOWNER(s,a,b) if(d_isowner(a,b) < S_OKAY) vista_abort(s)
#define KEYDEL(s,a,b) if(d_keydel(a,b) < S_OKAY) vista_abort(s)
#define KEYEXIST(s,a,b) if(d_keyexist(a,b) < S_OKAY) vista_abort(s)
#define KEYFIND(s,a,b,c) if(d_keyfind(a,b,c) < S_OKAY) vista_abort(s)
#define KEYFREE(s,a,b) if(d_keyfree(a,b) < S_OKAY) vista_abort(s)
#define KEYFRST(s,a,b) if(d_keyfrst(a,b) < S_OKAY) vista_abort(s)
#define KEYLAST(s,a,b) if(d_keylast(a,b) < S_OKAY) vista_abort(s)
#define KEYLOCK(s,a,b,c) if(d_keylock(a,b,c) < S_OKAY) vista_abort(s)
#define KEYLSTAT(s,a,b,c) if(d_keylstat(a,b,c) < S_OKAY) vista_abort(s)
#define KEYNEXT(s,a,b) if(d_keynext(a,b) < S_OKAY) vista_abort(s)
#define KEYPREV(s,a,b) if(d_keyprev(a,b) < S_OKAY) vista_abort(s)
#define KEYREAD(s,a) if(d_keyread(a) < S_OKAY) vista_abort(s)
#define KEYSTORE(s,a,b) if(d_keystore(a,b) < S_OKAY) vista_abort(s)
#define LOCK(s,a,b,c) if(d_lock(a,b,c) < S_OKAY) vista_abort(s)
#define MAKENEW(s,a,b) if(d_makenew(a,b) < S_OKAY) vista_abort(s)
#define MAPCHAR(s,a,b,c,d) if(d_mapchar(a,b,c,d) < S_OKAY) vista_abort(s)
#define MEMBERS(s,a,b,c) if(d_members(a,b,c) < S_OKAY) vista_abort(s)
#define OFF_OPT(s,a) if(d_off_opt(a) < S_OKAY) vista_abort(s)
#define ON_OPT(s,a) if(d_on_opt(a) < S_OKAY) vista_abort(s)
#define OPEN(s,a,b) if(d_open(a,b) < S_OKAY) vista_abort(s)
#define RDCURR(s,a,b) if(d_rdcurr(a,b) < S_OKAY) vista_abort(s)
#define RECFREE(s,a,b) if(d_recfree(a,b) < S_OKAY) vista_abort(s)
#define RECFRST(s,a,b) if(d_recfrst(a,b) < S_OKAY) vista_abort(s)
#define RECLAST(s,a,b) if(d_reclast(a,b) < S_OKAY) vista_abort(s)
#define RECLOCK(s,a,b,c) if(d_reclock(a,b,c) < S_OKAY) vista_abort(s)
#define RECLSTAT(s,a,b,c) if(d_reclstat(a,b,c) < S_OKAY) vista_abort(s)
#define RECNEXT(s,a) if(d_recnext(a) < S_OKAY) vista_abort(s)
#define RECOVER(s,a) if(d_recover(a) < S_OKAY) vista_abort(s)
#define RECPREV(s,a) if(d_recprev(a) < S_OKAY) vista_abort(s)
#define RECREAD(s,a,b) if(d_recread(a,b) < S_OKAY) vista_abort(s)
#define RECSET(s,a,b) if(d_recset(a,b) < S_OKAY) vista_abort(s)
#define RECSTAT(s,a,b,c) if(d_recstat(a,b,c) < S_OKAY) vista_abort(s)
#define RECWRITE(s,a,b) if(d_recwrite(a,b) < S_OKAY) vista_abort(s)
#define RENFILE(s,a,b,c) if(d_renfile(a,b,c) < S_OKAY) vista_abort(s)
#define RLBCLR(s,a) if(d_rlbclr(a) < S_OKAY) vista_abort(s)
#define RLBSET(s,a) if(d_rlbset(a) < S_OKAY) vista_abort(s)
#define RLBTST(s,a) if(d_rlbtst(a) < S_OKAY) vista_abort(s)
#define SETDB(s,a) if(d_setdb(a) < S_OKAY) vista_abort(s)
#define SETFILES(s,a) if(d_setfiles(a) < S_OKAY) vista_abort(s)
#define SETFREE(s,a,b) if(d_setfree(a,b) < S_OKAY) vista_abort(s)
#define SETLOCK(s,a,b,c) if(d_setlock(a,b,c) < S_OKAY) vista_abort(s)
#define SETLSTAT(s,a,b,c) if(d_setlstat(a,b,c) < S_OKAY) vista_abort(s)
#define SETMM(s,a,b,c) if(d_setmm(a,b,c) < S_OKAY) vista_abort(s)
#define SETMO(s,a,b,c) if(d_setmo(a,b,c) < S_OKAY) vista_abort(s)
#define SETMR(s,a,b) if(d_setmr(a,b) < S_OKAY) vista_abort(s)
#define SETOM(s,a,b,c) if(d_setom(a,b,c) < S_OKAY) vista_abort(s)
#define SETOO(s,a,b,c) if(d_setoo(a,b,c) < S_OKAY) vista_abort(s)
#define SETOR(s,a,b) if(d_setor(a,b) < S_OKAY) vista_abort(s)
#define SETPAGES(s,a,b) if(d_setpages(a,b) < S_OKAY) vista_abort(s)
#define SETRM(s,a,b) if(d_setrm(a,b) < S_OKAY) vista_abort(s)
#define SETRO(s,a,b) if(d_setro(a,b) < S_OKAY) vista_abort(s)
#define STSCM(s,a,b,c) if(d_stscm(a,b,c) < S_OKAY) vista_abort(s)
#define STSCO(s,a,b,c) if(d_stsco(a,b,c) < S_OKAY) vista_abort(s)
#define STSCR(s,a,b) if(d_stscr(a,b) < S_OKAY) vista_abort(s)
#define STSCS(s,a,b,c) if(d_stscs(a,b,c) < S_OKAY) vista_abort(s)
#define TIMEOUT(s,a) if(d_timeout(a) < S_OKAY) vista_abort(s)
#define TRABORT(s) if(d_trabort() < S_OKAY) vista_abort(s)
#define TRBEGIN(s,a) if(d_trbegin(a) < S_OKAY) vista_abort(s)
#define TREND(s) if(d_trend() < S_OKAY) vista_abort(s)
#define UTSCM(s,a,b,c) if(d_utscm(a,b,c) < S_OKAY) vista_abort(s)
#define UTSCO(s,a,b,c) if(d_utsco(a,b,c) < S_OKAY) vista_abort(s)
#define UTSCR(s,a,b) if(d_utscr(a,b) < S_OKAY) vista_abort(s)
#define UTSCS(s,a,b,c) if(d_utscs(a,b,c) < S_OKAY) vista_abort(s)
#define WRCURR(s,a) if(d_wrcurr(a) < S_OKAY) vista_abort(s)
/*------------- end DMACROS.H -------------------*/
/*------------- COMPILER DEPENDENT CONSTANTS -------------------*/
#ifdef TURBO_COMPILER
#define FNAME_NULL "nul"
#define LOCAL_SLASH 92 /* ascii back slash char (\) */
#endif
#ifdef UNIX
#define FNAME_NULL "/dev/null"
#define LOCAL_SLASH 47 /* ascii forward slash char (/) */
#endif
/*------------ COMPILER INDEPENDENT CONSTANTS -------------------*/
#define CACHE_SIZE 64 /* used in vista d_setpages() function */
#define COMMENT_CHARS "#*$!\n" /* identify comment lines in AusText files */
#define CTRL_Z 26
#define DIT_FINDSTR 1L /* DITTO.flags: retained aft FINDSTR srch */
#define DIT_STOP 2L /* DITTO.flags: node where user pushed stop */
#define END_RETAIN_PAGE 11 /* VT = marks end of RETAIN page */
/***#define END_RETAIN_REC '\f'****/
#define EXT_CHARTYPE ".chr" /* user definable wildcards (from LOADCHR) */
#define EXT_CANDI ".can" /* candidate dictionary words format */
#define EXT_CONFIG ".ocf" /* standard opera configuration file */
#define EXT_DTBS ".d99" /* inverted index file for dbase addrs */
#define EXT_FZKEY ".fzk" /* output of all opera text anal pgms */
#define EXT_HANDEL ".han" /* standard handel profile file format */
#define EXT_HUFFCODE ".huf" /* huffman encode tree (from HUFFCODE) */
#define EXT_HDECODE ".c" /* huffman decode tree (from HUFFCODE) */
#define EXT_INCLIST ".inc" /* "include" list file name extension */
#define EXT_LIST ".lst" /* standard wordlist format: 1 word/line */
#define EXT_SCHEMA ".sch" /* vista database schema format */
#define EXT_STOPLIST ".stp" /* standard stop list format */
#define EXT_SURVEY ".sur" /* standard survey file format */
#define EXT_TEMP ".tmp" /* any kind of temporary file */
#define EXT_TEXT ".txt" /* freeform ascii text format */
#define EXT_USRNOTES ".not" /* user notes flatfile format */
#define ETXDELIM "\f\n" /* default end-of-text (ETX) delim str */
#define FNAME_AUDIT "opaudit.lst"
#define FNAME_AUSCAT "austools.cat" /* Austools msgs catalog */
#define FNAME_AUSTEXT_TUTORIAL "austext.tut"
#define FNAME_CONFIRM_LIST "todscrd.lst" /* Shankar/Tomita files */
#define FNAME_DISCARD_DATA "shdscrd.lst" /* OEF_discard */
#define FNAME_DTSRCAT "dtsearch" /* DtSearch msgs catalog */
#define FNAME_HUFFCODE_TAB "ophuf.huf" /* huffman encode table */
#define FNAME_MUIRES "mui.res" /* motif class resources file */
#define FNAME_NOTES_BAC "usrnotes.not"
#define FNAME_NOTES_SEM "usrnotes.sem"
#define FNAME_ORIGSTOP "orig.stp"
#define FNAME_README "readme.txt"
#define FNAME_SITECONFIG "dtsearch.ocf"
#define FNAME_SITENEWS "sitenews.txt"
#define MINWIDTH_TOKEN 2 /* default smallest word/stem allowed */
#define MAX_BMHTAB 256 /* max alphabet size in bmstrstr tables */
#define MAX_ETXDELIM 100 /* max size of ETX delim string */
#define MAX_KTCOUNT 64 /* max number of keytypes */
#define MAXWIDTH_LWORD 40 /* = sizeof(or_lwordrec.or_lwordkey) */
#define MAXWIDTH_SWORD 16 /* = sizeof(or_swordrec.or_swordkey) */
#define NULLDATESTR "0/0/0~0:0"
#define NUM_HOLES 256 /* array size for defragmentation */
#define OBJDATESTR "%02d/%02d/%02d~%02d:%02d"
#define PRODNAME "DtSearch"
#define PWDMASKSZ 20
#define SCREEN_WIDTH 80 /* max len text line in online OPERA pgms */
#define STEM_CH 15 /* Ctrl-O stemmed word prefix character */
/*--------------- BYTE SWAP DECLARATIONS ------------
* The default database record format is the data ordering
* for big endian machines (most significant byte first),
* also known as "network" order. For non big_endian platforms,
* all compiles should include the BYTE_SWAP define.
* SWABDIR is direction of io to indicate correct byte swap function.
* HTON is host to network, internal memory to external database file.
* NTOH is network to host, file to memory.
* Actual host_to_network functions defined in
* which is not yet standardized.
*/
/* JET - Update 12/21/2021 - no need to define (or not) BYTE_SWAP
* anymore as we can determine that via autotools (for the code).
* Elsewhere, we can just use the systems hto*()/nto*() routines
* regardless.
*/
typedef enum {HTON=1, NTOH} SWABDIR;
extern void swab_dbrec (struct or_dbrec *rec, SWABDIR direction);
extern void swab_objrec (struct or_objrec *rec, SWABDIR direction);
#define HTONL(x) x = htonl(x)
#define HTONS(x) x = htons(x)
#define NTOHL(x) x = ntohl(x)
#define NTOHS(x) x = ntohs(x)
/*--------------- TESKEY PARSE CHARACTER TYPES ------------
* Used in langmap.c for linguistic parsing modules.
* Low order byte reserved for uppercase image of character
* as locale independent replacement for toupper() and strupr().
*/
#define CONCORDABLE 0x4000 /* alpha, numeric: inside word */
#define OPT_CONCORD 0x2000 /* "./-": maybe inside word, maybe outside */
#define NON_CONCORD 0x1000 /* space, punctuation, etc: outside word */
#define VOWEL 0x0800 /* concordable subtype: aeiou */
#define CONSONANT 0x0400 /* concordable subtype: all alpha - vowels */
#define NUMERAL 0x0200 /* concordable subtype: 0-9 */
#define WHITESPACE 0x0100 /* locale indep replacement for isspace() */
/*--------------- SCHEMA CONSTANTS ----------------
* Associated with fields in database schema (austext.h)
* and in DITTO structures.
* Values 20000 - 29999 reserved for custom user applic in all cardinal ints.
* ORA_ retrieval access location cardinal integers in or_access.
* ORC_ compression id bit switches in or_compflags.
* ORD_ bit switches in or_dbflags.
* (ORO_ bit switches in or_objflags
* renamed to DtSrFlxxx and moved to Search.h)
* ORM_ type cardinal integers in or_misctype.
* (ORT_ object type (or_objtype, or_dbotype, DITTO)
* renamed to DtSrObj... and moved to Search.h)
* (ORL_ language id cardinal integers in or_language
* renamed to DtSrLa... and moved to Search.h)
*/
#define ORA_VARIES 0 /* object accessibility unspec at curr lvl */
#define ORA_NOTAVAIL 1 /* obj not directly accessible from engine */
#define ORA_BLOB 2 /* obj stored in blob recs */
#define ORA_REFBLOB 3 /* svr ref (filename of object) in blob */
#define ORA_REFKEY 4 /* svr ref in or_objkey */
#define ORA_REFHUGEKEY 5 /* svr ref in 'huge' key (misc) rec */
#define ORA_REFABSTR 6 /* svr ref in abstract (misc rec) */
#define ORA_CREFBLOB 13 /* clt ref (filename of object) in blob */
#define ORA_CREFKEY 14 /* clt ref in or_objkey */
#define ORA_CREFABSTR 16 /* clt ref in abstract (misc rec) */
#define ORC_COMPBLOB (1<<0) /* blobs are compressed */
#define ORC_COMPABSTR (1<<1) /* abstracts are compressed */
#define ORD_XWORDS (1L<<0) /* inverted index includes exact words */
#define ORD_XSTEMS (1L<<1) /* inverted index includes word stems */
#define ORD_USEHUGEKEYS (1L<<4) /* all direct user access via huge keys */
#define ORD_NOMARKDEL (1L<<8) /* permanently disables mark-for-deletion */
#define ORD_NONOTES (1L<<9) /* permanently disables user notes */
#define ORD_WIDECHAR (1L<<10) /* text is multibyte or wide chars */
#define ORO_DELETE (1L<<0) /* obj is marked for deletion */
#define ORO_OLDNOTES (1L<<1) /* obj has old style usernotes in misc rec */
#define ORM_FZKABS 1 /* fzkey[fzkeysz] + abstract[abstrsz] */
#define ORM_HUGEKEY 2 /* optional 'huge' key */
#define ORM_OLDNOTES 3 /* old style user notes */
#define ORM_KEYTYPE 4 /* database keytype rec (KEYTYPE struct) */
/*------------------------- MACROS ---------------------------*/
/* (Use offsetof() in stddef.h to replace my old OFFSET macro) */
#define NULLORSTR(str) ((str)?str:CATGETS(dtsearch_catd,1,1,""))
#define NUMARRAY(arr) ((sizeof(arr) / sizeof(arr[0])))
/****************************************/
/* */
/* LLIST */
/* */
/****************************************/
typedef struct llist_tag {
struct llist_tag *link;
void *data;
} LLIST;
/****************************************/
/* */
/* FREE_SPACE_STR */
/* */
/****************************************/
/* 'holes' structure used for dynamic defragmentation */
typedef struct holes_str {
DtSrINT32 hole_size;
DtSrINT32 offset;
} FREE_SPACE_STR;
/****************************************/
/* */
/* FILE_HEADER */
/* */
/****************************************/
/* 'holes' structure used for dynamic defragmentation */
typedef struct fl_head {
DtSrINT32 hole_count [2];
FREE_SPACE_STR hole_array [2] [NUM_HOLES];
} FILE_HEADER;
/****************************************/
/* */
/* CMPLL, sort_llist, compare_llist */
/* */
/****************************************/
/* Generic LLIST structure typically used for 'lines' of text,
* as in ausapi.msglist and usrblk.msgs, and binary blobs.
* See structure typedef below for blob list structure.
* LLISTs can be sorted by calling sort_llist().
* The compare function is stored in global pointer 'compare_llist'
* prior to calling the sort function.
*/
typedef int (*CMPLL) (LLIST *left, LLIST *right);
/****************************************/
/* */
/* READCFP */
/* */
/****************************************/
/* Pointer to a function that takes a void
* pointer and returns a C char (1 octet).
* Used by linguistic parsers as a character reading cofunction.
* When parser is reading from a file stream as in dtsrindex,
* usual cofunction is readchar_ftext(). When parser is reading
* from a text string as in queries, the usual cofunction
* is readchar_string() which just accesses next char in string.
*/
typedef UCHAR (*READCFP) (void *);
/********************************************************/
/* */
/* WORDTREE */
/* */
/********************************************************/
/* A generic structure for creating binary trees of words
* from stoplists, include-lists, etc.
*/
typedef struct _bintree_tag {
struct _bintree_tag *rlink; /* ptr to right node */
struct _bintree_tag *llink; /* ptr to left node */
int len; /* length of word */
void *word;
} WORDTREE;
/************************************************/
/* */
/* PARG */
/* */
/************************************************/
/* Single argument for first parser call for a text block */
typedef struct {
void *dblk; /* dblk is (DBLK *) */
FILE *ftext; /* Text file being parsed in dtsrindex */
void *string; /* Query or other string being parsed */
void *etxdelim; /* End of text (ETX) delimiter string */
long *offsetp; /* where parser stores word offset */
long flags;
#define PA_INDEXING 0x0001 /* parse for indexing purposes (dtsrindex) */
#define PA_HILITING 0x0002 /* parse for hiliting purposes */
#define PA_MSGS 0x0004 /* explain parse failures with msgs */
void *extra; /* reserved for generic use by parsers */
} PARG;
/********************************************************/
/* */
/* DBLK */
/* */
/********************************************************/
/* One element of a linked list of universal information
* about all databases accessible,
* to an online search engine instance, chained off of
* the global OE_dblist. It is also used individually
* by offline build tools to store database data.
* It contains pointers to linguistic processors and data structures,
* data derived from the site configuration file,
* data derived and used by the DBMS,
* and some fields reflecting recommended initial user choices.
* Changes here should also be reflected in initblks.c,
* austext.sch, initausd.c, and in oeinit.c.
*/
typedef struct dblk_tag
{
struct dblk_tag *link; /* ptr to next dblk in list */
char name [11]; /* 1 - 8 char dictionary name */
char is_selected; /* bool: initial gui selection status */
char *label; /* database description/label string for UI */
long flags;
char *path; /* where to find all database files */
FILE *syofile; /* symptom offset (ranges) d97 file */
FILE *syifile; /* symptom index d98 file */
void *ranges; /* contents of syofile read into ram */
FILE *iifile; /* inverted words index d99 file */
time_t iimtime; /* last time d99 was modified */
int vistano; /* vista database number */
int ktcount; /* number of nodes in keytypes array */
DtSrKeytype *keytypes; /* record types in this database */
DBREC dbrec; /* copy of database's dbrec record */
void *zblk; /* used only for semantic processing */
/*----- Huffman Compression -----*/
time_t hufid; /* tree identification atom */
int hufroot; /* index to inverted tree root (array bottom) */
int *huftree; /* beginning of huffman tree array */
/*----- Language Fields -----*/
char *fname_stp; /* name of stoplist file */
char *fname_inc; /* name of include-list file */
char *fname_sfx; /* name of suffixes file */
int *charmap; /* parse/stem table for char set */
WORDTREE *stoplist; /* root of stoplist tree */
WORDTREE *inclist; /* root of include-list tree */
char *(*lstrupr) (char *string, struct dblk_tag *dblk);
char *(*parser) (PARG *parg);
void *parse_extra; /* eg additional word trees */
char *(*stemmer) (char *wordin, struct dblk_tag *dblk);
long stem_flags; /* stemmer options */
void *stem_extra; /* eg suffix tables */
void *lang_extra; /* additional language dependent data */
long lang_flags; /* language dependent switches */
#define LF_DUP_STP 0x0001 /* duplicate stop list */
#define LF_DUP_INC 0x0002 /* duplicate include list */
#define LF_DUP_SFX 0x0004 /* duplicate suffixes list */
/*----- User Search Parameters -----*/
int maxhits; /* max # hits to be returned from searches */
void *resuser; /* reserved for private use by users */
} DBLK;
/*------------------------- GLOBALS -------------------------*/
/* DtSearchExit (austext_exit) and DtSearchExitUser (austext_exit_user)
* are in ausexit.c too but are "public" in DtSearch (defined in Search.h).
*/
extern char *aa_argv0; /* globals.c */
extern int aa_maxhits; /* aajoint.c */
extern FILE *aa_stderr; /* globals.c */
extern int ascii_charmap[]; /* langmap.c */
extern LLIST *ausapi_msglist; /* globals.c */
extern void (*austext_exit_first) (int); /* ausexit.c */
extern void (*austext_exit_dbms) (int); /* ausexit.c */
extern void (*austext_exit_comm) (int); /* ausexit.c */
extern void (*austext_exit_endwin) (int); /* ausexit.c */
extern void (*austext_exit_mem) (int); /* ausexit.c */
extern void (*austext_exit_last) (int); /* ausexit.c */
extern void (*austext_exit_user) (int); /* ausexit.c */
extern nl_catd austools_catd; /* globals.c */
extern CMPLL compare_llist;
extern nl_catd dtsearch_catd; /* globals.c */
extern unsigned long
duprec_hashsize; /* isduprec.c */
extern int latin_charmap[]; /* langmap.c */
/*------------------------ FUNCTION PROTOTYPES ------------------------*/
extern void add_free_space(FREE_SPACE_STR *del_rec, FILE_HEADER *flh);
extern void append_ext (char *buffer, int buflen,
char *fname, char *fext);
extern int austext_dopen (
char *dbname,
char *dbpath,
char *d2xpath,
int cache_size,
DBREC *bufptr);
extern void *austext_malloc (size_t size, char *location, void *ignored);
extern char *bmhcore (
UCHAR *text,
size_t txtlen,
UCHAR *pattern,
size_t patlen,
size_t *bmhtable);
extern void bmhtable_build (
UCHAR *pattern,
size_t patlen,
size_t *bmhtable);
extern char *bmstrstr (
UCHAR *text,
size_t txtlen,
UCHAR *pattern,
size_t patlen);
extern int clean_wrap (char *string, int linelen);
extern LLIST *cutnode_llist (LLIST *node, LLIST **llistp);
extern void (*dberr_exit)(int exitcode); /* defaults to exit() */
extern void delete_whitespace (char *linebuf);
extern void discard_to_ETX (PARG *parg);
extern int endstroke (int c);
extern void put_new_word(struct or_hwordrec *recbuf, int vistano);
extern FREE_SPACE_STR
*find_free_space (DtSrINT32 req_size, FILE_HEADER *flh);
extern void free_llist (LLIST **llhead);
extern int fread_d99_header (FILE_HEADER *flh, FILE *fp);
extern int fwrite_d99_header (FILE_HEADER *flh, FILE *fp);
extern char *get_email_addr (void);
extern char *getnews (char *fname, int use_copyr);
extern void hc_decode (UCHAR *input_bitstring, UCHAR *output_charbuf,
int outbuf_size, time_t encode_id);
extern int hc_encode (struct or_blobrec *targ, UCHAR *src,
int srclen, int force_flush);
extern void init_header (FILE *fp, FILE_HEADER *flh);
extern int is_compatible_version (char *callers_vers, char *local_vers);
extern int is_concordable (char *word, int *charmap);
extern int is_duprec (char *recid);
extern int is_objdatestr (char *string, DtSrObjdate *objdptr);
extern int is_objdatetm (struct tm *objdatetm);
extern void join_llists (LLIST **mainlist, LLIST **sublist);
extern char *jpn_parser (PARG *parg);
extern int load_custom_language (DBLK *dblk, DBLK *dblist);
extern int load_jpn_language (DBLK *dblk, DBLK *dblist);
extern int load_language (DBLK *dblk, DBLK *dblist);
extern int load_wordtree (
WORDTREE **treetop,
DBLK *dblk,
char *fname,
int do_teskey_test);
extern char *null_stemmer (char *word, DBLK *dblk);
extern char *null_lstrupr (char *string, DBLK *dblk);
extern char *objdate2fzkstr (DtSrObjdate objdate);
extern struct tm
*objdate2tm (DtSrObjdate objdate);
extern int objdate_in_range (DtSrObjdate recdate,
DtSrObjdate date1, DtSrObjdate date2);
extern int offline_kbhit (void);
extern int open_dblk (DBLK **dblist, int numpages, int debugging);
extern LLIST *pop_llist (LLIST **llistp);
extern void print_dbrec (char *dbname, struct or_dbrec *dbrec);
extern int quit_escape(void);
extern UCHAR readchar_ftext (PARG *parg);
extern UCHAR readchar_string (UCHAR *string);
extern char *remove_spaces (char *string);
extern void replace_ext (char *buffer, int buflen,
char *fname, char *fext);
extern LLIST *sort_llist (LLIST *list_header);
extern char *teskey_parser (PARG *parg);
extern DtSrObjdate
tm2objdate (struct tm *tmptr);
#if !defined(__linux__)
#ifndef _ALL_SOURCE
extern char *strdup (const char *s);
#endif
#endif
extern void toggle_insert (void);
extern void unload_custom_language (DBLK *dblk);
extern void unload_language (DBLK *dblk);
extern void vista_abort (char *location);
extern char *vista_msg (char *location);
/************************ SearchP.h ********************************/
#endif /* _SearchP_h */