2 * COMPONENT_NAME: austext
4 * FUNCTIONS: fillnew_wordrec
12 * (C) COPYRIGHT International Business Machines Corp. 1993,1995
14 * Licensed Materials - Property of IBM
15 * US Government Users Restricted Rights - Use, duplication or
16 * disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
18 /********************* VSTFUNCT.C **********************************
19 * $XConsortium: vstfunct.c /main/6 1996/08/12 13:20:01 cde-ibm $
20 * Performs vista KEYFIND, RECREAD, RECWRITE, and FILLNEW functions
21 * on word database files without caller having to know
22 * whether word is short, long, or huge.
23 * Remember: all word lengths are 1 byte shorter than the field size,
24 * plus 1 byte for the terminating \0.
27 * Revision 2.2 1995/10/26 14:12:32 miker
30 * Revision 2.1 1995/09/22 22:23:13 miker
31 * Freeze DtSearch 0.1, AusText 2.1.8
33 * Revision 1.3 1995/09/05 19:34:07 miker
34 * Minor name changes for DtSearch.
39 #define PROGNAME "VSTFUNCT"
41 static struct or_swordrec Swordbuf;
42 static struct or_lwordrec Lwordbuf;
45 /************************/
49 /************************/
50 /* Sets vista "curr record" to correct word record.
51 * Usually performed prior to vista read or write function.
52 * CALLER MUST CHECK DB_STATUS.
54 void find_keyword (char *cur_word, int vista_num)
59 len = strlen (cur_word);
60 if (len < sizeof (Swordbuf.or_swordkey))
61 keyfield = OR_SWORDKEY;
62 else if (len < sizeof (Lwordbuf.or_lwordkey))
63 keyfield = OR_LWORDKEY;
65 keyfield = OR_HWORDKEY;
66 KEYFIND (PROGNAME "24", keyfield, cur_word, vista_num);
68 } /* find_keyword() */
72 /********************************/
76 /********************************/
77 /* Performs vista RECREAD on curr word record.
78 * CALLER SHOULD CHECK DB_STATUS.
80 void read_wordstr (struct or_hwordrec * glob_word, int vista_num)
84 len = strlen (glob_word->or_hwordkey);
85 if (len < sizeof (Swordbuf.or_swordkey)) {
86 RECREAD (PROGNAME "61", &Swordbuf, vista_num);
87 if (db_status != S_OKAY)
89 strncpy (glob_word->or_hwordkey, Swordbuf.or_swordkey,
91 glob_word->or_hwordkey[DtSrMAXWIDTH_HWORD - 1] = 0;
92 glob_word->or_hwoffset = ntohl (Swordbuf.or_swoffset);
93 glob_word->or_hwfree = ntohl (Swordbuf.or_swfree);
94 glob_word->or_hwaddrs = ntohl (Swordbuf.or_swaddrs);
96 else if (len < sizeof (Lwordbuf.or_lwordkey)) {
97 RECREAD (PROGNAME "69", &Lwordbuf, vista_num);
98 if (db_status != S_OKAY)
100 strncpy (glob_word->or_hwordkey, Lwordbuf.or_lwordkey,
102 glob_word->or_hwordkey[DtSrMAXWIDTH_HWORD - 1] = 0;
103 glob_word->or_hwoffset = ntohl (Lwordbuf.or_lwoffset);
104 glob_word->or_hwfree = ntohl (Lwordbuf.or_lwfree);
105 glob_word->or_hwaddrs = ntohl (Lwordbuf.or_lwaddrs);
108 RECREAD (PROGNAME "78", glob_word, vista_num);
109 glob_word->or_hwordkey[DtSrMAXWIDTH_HWORD - 1] = 0;
110 NTOHL (glob_word->or_hwoffset);
111 NTOHL (glob_word->or_hwfree);
112 NTOHL (glob_word->or_hwaddrs);
115 } /* read_wordstr() */
118 /********************************/
122 /********************************/
123 /* performs vista RECWRITE on curr word record.
124 * CALLER MUST CHECK DB_STATUS.
126 void write_wordstr (struct or_hwordrec * glob_word, int vista_num)
130 len = strlen (glob_word->or_hwordkey);
132 if (len < sizeof (Swordbuf.or_swordkey)) {
133 strcpy (Swordbuf.or_swordkey, glob_word->or_hwordkey);
134 Swordbuf.or_swoffset = htonl (glob_word->or_hwoffset);
135 Swordbuf.or_swfree = htonl (glob_word->or_hwfree);
136 Swordbuf.or_swaddrs = htonl (glob_word->or_hwaddrs);
137 RECWRITE (PROGNAME "102", &Swordbuf, vista_num);
139 else if (len < sizeof (Lwordbuf.or_lwordkey)) {
140 strcpy (Lwordbuf.or_lwordkey, glob_word->or_hwordkey);
141 Lwordbuf.or_lwoffset = htonl (glob_word->or_hwoffset);
142 Lwordbuf.or_lwfree = htonl (glob_word->or_hwfree);
143 Lwordbuf.or_lwaddrs = htonl (glob_word->or_hwaddrs);
144 RECWRITE (PROGNAME "111", &Lwordbuf,
148 if (len >= DtSrMAXWIDTH_HWORD) {
149 printf ("\n" PROGNAME "124 Program Error Abort, "
150 "word too long:\n '%s'\n",
151 glob_word->or_hwordkey);
154 HTONL (glob_word->or_hwoffset);
155 HTONL (glob_word->or_hwfree);
156 HTONL (glob_word->or_hwaddrs);
157 RECWRITE (PROGNAME "115", glob_word, vista_num);
158 NTOHL (glob_word->or_hwoffset);
159 NTOHL (glob_word->or_hwfree);
160 NTOHL (glob_word->or_hwaddrs);
163 } /* write_wordstr() */
166 /****************************************/
168 /* fillnew_wordrec */
170 /****************************************/
171 /* The input record is always a word in a 'huge' structure.
172 * This function performs vista FILLNEW on that word,
173 * but into correct sized word rec.
174 * Formerly this function was called put_new_word().
175 * CALLER MUST CHECK DB_STATUS.
177 void fillnew_wordrec (struct or_hwordrec * glob_word, int vista_num)
181 len = strlen (glob_word->or_hwordkey);
182 if (len < sizeof (Swordbuf.or_swordkey)) {
183 strcpy (Swordbuf.or_swordkey, glob_word->or_hwordkey);
184 Swordbuf.or_swoffset = htonl (glob_word->or_hwoffset);
185 Swordbuf.or_swfree = htonl (glob_word->or_hwfree);
186 Swordbuf.or_swaddrs = htonl (glob_word->or_hwaddrs);
187 FILLNEW (PROGNAME "137", OR_SWORDREC, &Swordbuf, vista_num);
189 else if (len < sizeof (Lwordbuf.or_lwordkey)) {
190 strcpy (Lwordbuf.or_lwordkey, glob_word->or_hwordkey);
191 Lwordbuf.or_lwoffset = htonl (glob_word->or_hwoffset);
192 Lwordbuf.or_lwfree = htonl (glob_word->or_hwfree);
193 Lwordbuf.or_lwaddrs = htonl (glob_word->or_hwaddrs);
194 FILLNEW (PROGNAME "147", OR_LWORDREC, &Lwordbuf, vista_num);
197 if (len >= DtSrMAXWIDTH_HWORD) {
198 printf ("\n" PROGNAME "168 Program Error Abort, "
199 "word too long:\n '%s'\n",
200 glob_word->or_hwordkey);
203 HTONL (glob_word->or_hwoffset);
204 HTONL (glob_word->or_hwfree);
205 HTONL (glob_word->or_hwaddrs);
206 FILLNEW (PROGNAME "151", OR_HWORDREC, glob_word, vista_num);
207 NTOHL (glob_word->or_hwoffset);
208 NTOHL (glob_word->or_hwfree);
209 NTOHL (glob_word->or_hwaddrs);
212 } /* fillnew_wordrec() */
214 /********************* VSTFUNCT.C **********************************/