1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00
cde/cde/lib/DtSearch/vstfunct.c
2012-03-10 18:58:32 +00:00

236 lines
7.3 KiB
C

/*
* 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 librararies 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: fillnew_wordrec
* find_keyword
* read_wordstr
* write_wordstr
*
* ORIGINS: 27
*
*
* (C) COPYRIGHT International Business Machines Corp. 1993,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.
*/
/********************* VSTFUNCT.C **********************************
* $XConsortium: vstfunct.c /main/6 1996/08/12 13:20:01 cde-ibm $
* Performs vista KEYFIND, RECREAD, RECWRITE, and FILLNEW functions
* on word database files without caller having to know
* whether word is short, long, or huge.
* Remember: all word lengths are 1 byte shorter than the field size,
* plus 1 byte for the terminating \0.
*
* $Log$
* Revision 2.2 1995/10/26 14:12:32 miker
* Added prolog.
*
* Revision 2.1 1995/09/22 22:23:13 miker
* Freeze DtSearch 0.1, AusText 2.1.8
*
* Revision 1.3 1995/09/05 19:34:07 miker
* Minor name changes for DtSearch.
*/
#include "SearchP.h"
#include "vista.h"
#define PROGNAME "VSTFUNCT"
static struct or_swordrec Swordbuf;
static struct or_lwordrec Lwordbuf;
/************************/
/* */
/* find_keyword */
/* */
/************************/
/* Sets vista "curr record" to correct word record.
* Usually performed prior to vista read or write function.
* CALLER MUST CHECK DB_STATUS.
*/
void find_keyword (char *cur_word, int vista_num)
{
static size_t len;
static long keyfield;
len = strlen (cur_word);
if (len < sizeof (Swordbuf.or_swordkey))
keyfield = OR_SWORDKEY;
else if (len < sizeof (Lwordbuf.or_lwordkey))
keyfield = OR_LWORDKEY;
else
keyfield = OR_HWORDKEY;
KEYFIND (PROGNAME "24", keyfield, cur_word, vista_num);
return;
} /* find_keyword() */
/********************************/
/* */
/* read_wordstr */
/* */
/********************************/
/* Performs vista RECREAD on curr word record.
* CALLER SHOULD CHECK DB_STATUS.
*/
void read_wordstr (struct or_hwordrec * glob_word, int vista_num)
{
static size_t len;
len = strlen (glob_word->or_hwordkey);
if (len < sizeof (Swordbuf.or_swordkey)) {
RECREAD (PROGNAME "61", &Swordbuf, vista_num);
if (db_status != S_OKAY)
return;
strncpy (glob_word->or_hwordkey, Swordbuf.or_swordkey,
DtSrMAXWIDTH_HWORD);
glob_word->or_hwordkey[DtSrMAXWIDTH_HWORD - 1] = 0;
glob_word->or_hwoffset = ntohl (Swordbuf.or_swoffset);
glob_word->or_hwfree = ntohl (Swordbuf.or_swfree);
glob_word->or_hwaddrs = ntohl (Swordbuf.or_swaddrs);
}
else if (len < sizeof (Lwordbuf.or_lwordkey)) {
RECREAD (PROGNAME "69", &Lwordbuf, vista_num);
if (db_status != S_OKAY)
return;
strncpy (glob_word->or_hwordkey, Lwordbuf.or_lwordkey,
DtSrMAXWIDTH_HWORD);
glob_word->or_hwordkey[DtSrMAXWIDTH_HWORD - 1] = 0;
glob_word->or_hwoffset = ntohl (Lwordbuf.or_lwoffset);
glob_word->or_hwfree = ntohl (Lwordbuf.or_lwfree);
glob_word->or_hwaddrs = ntohl (Lwordbuf.or_lwaddrs);
}
else {
RECREAD (PROGNAME "78", glob_word, vista_num);
glob_word->or_hwordkey[DtSrMAXWIDTH_HWORD - 1] = 0;
NTOHL (glob_word->or_hwoffset);
NTOHL (glob_word->or_hwfree);
NTOHL (glob_word->or_hwaddrs);
}
return;
} /* read_wordstr() */
/********************************/
/* */
/* write_wordstr */
/* */
/********************************/
/* performs vista RECWRITE on curr word record.
* CALLER MUST CHECK DB_STATUS.
*/
void write_wordstr (struct or_hwordrec * glob_word, int vista_num)
{
static size_t len;
len = strlen (glob_word->or_hwordkey);
if (len < sizeof (Swordbuf.or_swordkey)) {
strcpy (Swordbuf.or_swordkey, glob_word->or_hwordkey);
Swordbuf.or_swoffset = htonl (glob_word->or_hwoffset);
Swordbuf.or_swfree = htonl (glob_word->or_hwfree);
Swordbuf.or_swaddrs = htonl (glob_word->or_hwaddrs);
RECWRITE (PROGNAME "102", &Swordbuf, vista_num);
}
else if (len < sizeof (Lwordbuf.or_lwordkey)) {
strcpy (Lwordbuf.or_lwordkey, glob_word->or_hwordkey);
Lwordbuf.or_lwoffset = htonl (glob_word->or_hwoffset);
Lwordbuf.or_lwfree = htonl (glob_word->or_hwfree);
Lwordbuf.or_lwaddrs = htonl (glob_word->or_hwaddrs);
RECWRITE (PROGNAME "111", &Lwordbuf,
vista_num);
}
else {
if (len >= DtSrMAXWIDTH_HWORD) {
printf ("\n" PROGNAME "124 Program Error Abort, "
"word too long:\n '%s'\n",
glob_word->or_hwordkey);
DtSearchExit (24);
}
HTONL (glob_word->or_hwoffset);
HTONL (glob_word->or_hwfree);
HTONL (glob_word->or_hwaddrs);
RECWRITE (PROGNAME "115", glob_word, vista_num);
NTOHL (glob_word->or_hwoffset);
NTOHL (glob_word->or_hwfree);
NTOHL (glob_word->or_hwaddrs);
}
return;
} /* write_wordstr() */
/****************************************/
/* */
/* fillnew_wordrec */
/* */
/****************************************/
/* The input record is always a word in a 'huge' structure.
* This function performs vista FILLNEW on that word,
* but into correct sized word rec.
* Formerly this function was called put_new_word().
* CALLER MUST CHECK DB_STATUS.
*/
void fillnew_wordrec (struct or_hwordrec * glob_word, int vista_num)
{
static size_t len;
len = strlen (glob_word->or_hwordkey);
if (len < sizeof (Swordbuf.or_swordkey)) {
strcpy (Swordbuf.or_swordkey, glob_word->or_hwordkey);
Swordbuf.or_swoffset = htonl (glob_word->or_hwoffset);
Swordbuf.or_swfree = htonl (glob_word->or_hwfree);
Swordbuf.or_swaddrs = htonl (glob_word->or_hwaddrs);
FILLNEW (PROGNAME "137", OR_SWORDREC, &Swordbuf, vista_num);
}
else if (len < sizeof (Lwordbuf.or_lwordkey)) {
strcpy (Lwordbuf.or_lwordkey, glob_word->or_hwordkey);
Lwordbuf.or_lwoffset = htonl (glob_word->or_hwoffset);
Lwordbuf.or_lwfree = htonl (glob_word->or_hwfree);
Lwordbuf.or_lwaddrs = htonl (glob_word->or_hwaddrs);
FILLNEW (PROGNAME "147", OR_LWORDREC, &Lwordbuf, vista_num);
}
else {
if (len >= DtSrMAXWIDTH_HWORD) {
printf ("\n" PROGNAME "168 Program Error Abort, "
"word too long:\n '%s'\n",
glob_word->or_hwordkey);
DtSearchExit (68);
}
HTONL (glob_word->or_hwoffset);
HTONL (glob_word->or_hwfree);
HTONL (glob_word->or_hwaddrs);
FILLNEW (PROGNAME "151", OR_HWORDREC, glob_word, vista_num);
NTOHL (glob_word->or_hwoffset);
NTOHL (glob_word->or_hwfree);
NTOHL (glob_word->or_hwaddrs);
}
return;
} /* fillnew_wordrec() */
/********************* VSTFUNCT.C **********************************/