148 int r, filter_ptr = 0;
150 static char *filter_buf = NULL;
151 static int filter_size = 0;
154 const char *elementSetName = NULL;
157 if (
p->comp &&
p->comp->which == Z_RecordComp_simple &&
158 p->comp->u.simple->which == Z_ElementSetNames_generic)
159 elementSetName =
p->comp->u.simple->u.generic;
164 if (!strcmp(elementSetName,
"R"))
170 else if (!strcmp(elementSetName,
"H"))
178 if (filter_ptr + 4096 >= filter_size)
182 filter_size = 2*filter_size + 8192;
183 nb = (
char *) xmalloc(filter_size);
186 memcpy(nb, filter_buf, filter_ptr);
191 if (make_header && filter_ptr == 0)
195 yaz_snprintf(filter_buf, 50,
"Rank: %d\n",
p->score);
196 filter_ptr = strlen(filter_buf);
198 yaz_snprintf(filter_buf + filter_ptr, 50,
"Local Number: " ZINT_FORMAT "\n",
200 filter_ptr = strlen(filter_buf);
203 yaz_snprintf(filter_buf + filter_ptr, 200,
"Filename: %s\n",
p->fname);
204 filter_ptr = strlen(filter_buf);
206 strcpy(filter_buf+filter_ptr++,
"\n");
215 filter_buf[filter_ptr] =
'\0';
218 if (!strcmp(elementSetName,
"B"))
220 if (!strcmp(elementSetName,
"M"))
225 char *
p = filter_buf;
228 while (++i <= no_lines && (
p = strchr(
p,
'\n')))
233 filter_ptr =
p-filter_buf;
236 p->output_format = yaz_oid_recsyn_sutrs;
237 p->rec_buf = filter_buf;
238 p->rec_len = filter_ptr;
static void filter_destroy(void *clientData)
static void * filter_init(Res res, RecType recType)
static struct buf_info * buf_open(struct recExtractCtrl *p)
static struct recType filter_type
static void buf_close(struct buf_info *fi)
static int buf_getchar(struct filter_info *tinfo, struct buf_info *fi, char *dst)
static ZEBRA_RES filter_config(void *clientData, Res res, const char *args)