* Sebastian Hammer, Adam Dickmeiss
*
* $Log: zrpn.c,v $
- * Revision 1.96 1999-09-23 10:05:05 adam
+ * Revision 1.98 1999-11-30 13:48:04 adam
+ * Improved installation. Updated for inclusion of YAZ header files.
+ *
+ * Revision 1.97 1999/10/14 14:33:50 adam
+ * Added truncation 5=106.
+ *
+ * Revision 1.96 1999/09/23 10:05:05 adam
* Implemented structure=105 searching.
*
* Revision 1.95 1999/09/07 07:19:21 adam
#ifdef TERM_COUNT
int *term_no;
#endif
- ISAM_P *isam_p_buf;
+ ISAMS_P *isam_p_buf;
int isam_p_size;
int isam_p_indx;
ZebraHandle zh;
{
if (p->isam_p_indx == p->isam_p_size)
{
- ISAM_P *new_isam_p_buf;
+ ISAMS_P *new_isam_p_buf;
#ifdef TERM_COUNT
int *new_term_no;
#endif
p->isam_p_size = 2*p->isam_p_size + 100;
- new_isam_p_buf = (ISAM_P *) xmalloc (sizeof(*new_isam_p_buf) *
+ new_isam_p_buf = (ISAMS_P *) xmalloc (sizeof(*new_isam_p_buf) *
p->isam_p_size);
if (p->isam_p_buf)
{
return i;
}
-/* term_105: handle term, where trunc=Process # and ! and right trunc */
+/* term_105/106: handle term, where trunc=Process # and ! and right trunc */
static int term_105 (ZebraMaps zebra_maps, int reg_type,
const char **src, char *dst, int space_split,
- char *dst_term)
+ char *dst_term, int right_truncate)
{
const char *s0, *s1;
const char **map;
}
}
}
- dst[i++] = '.';
- dst[i++] = '*';
+ if (right_truncate)
+ {
+ dst[i++] = '.';
+ dst[i++] = '*';
+ }
dst[i] = '\0';
dst_term[j++] = '\0';
case 105: /* process * and ! in term */
term_dict[j++] = '(';
if (!term_105 (zh->zebra_maps, reg_type,
- &termp, term_dict + j, space_split, term_dst))
+ &termp, term_dict + j, space_split, term_dst, 1))
+ return 0;
+ strcat (term_dict, ")");
+ r = dict_lookup_grep (zh->dict, term_dict, 0, grep_info,
+ &max_pos, 0, grep_handle);
+ if (r)
+ logf (LOG_WARN, "dict_lookup_grep err, trunc=*/!: %d", r);
+ break;
+ case 106: /* process * and ! in term */
+ term_dict[j++] = '(';
+ if (!term_105 (zh->zebra_maps, reg_type,
+ &termp, term_dict + j, space_split, term_dst, 0))
return 0;
strcat (term_dict, ")");
r = dict_lookup_grep (zh->dict, term_dict, 0, grep_info,
struct scan_info_entry {
char *term;
- ISAM_P isam_p;
+ ISAMS_P isam_p;
};
struct scan_info {
scan_info->list[idx].term = (char *)
odr_malloc (scan_info->odr, strlen(name + len_prefix)+1);
strcpy (scan_info->list[idx].term, name + len_prefix);
- assert (*info == sizeof(ISAM_P));
- memcpy (&scan_info->list[idx].isam_p, info+1, sizeof(ISAM_P));
+ assert (*info == sizeof(ISAMS_P));
+ memcpy (&scan_info->list[idx].isam_p, info+1, sizeof(ISAMS_P));
return 0;
}