X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fpquery.c;h=1df0a8b5c6ea8c4ff9cf15d1819f9ab9d9925f22;hb=9e1a8a0a598aef894f59fa8abe3ccb144a5294a8;hp=40e243df30d1ecf2d6132a7e704eafea56ed9fd7;hpb=8bc8803d672b7ecf182a0bb691885d37cf2a8160;p=yaz-moved-to-github.git diff --git a/util/pquery.c b/util/pquery.c index 40e243d..1df0a8b 100644 --- a/util/pquery.c +++ b/util/pquery.c @@ -4,7 +4,19 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: pquery.c,v $ - * Revision 1.1 1995-05-22 15:31:49 adam + * Revision 1.5 1995-06-15 12:31:02 quinn + * *** empty log message *** + * + * Revision 1.4 1995/06/15 07:45:19 quinn + * Moving to v3. + * + * Revision 1.3 1995/06/14 11:06:35 adam + * Bug fix: Attributes wasn't interpreted correctly! + * + * Revision 1.2 1995/05/26 08:56:11 adam + * New function: p_query_scan. + * + * Revision 1.1 1995/05/22 15:31:49 adam * New function, p_query_rpn, to convert from prefix (ascii) to rpn (asn). * */ @@ -77,9 +89,10 @@ static int query_token (const char **qptr, const char **lex_buf, int *lex_len) return 't'; } -static void lex (void) +static int lex (void) { - query_look = query_token (&query_buf, &query_lex_buf, &query_lex_len); + return query_look = + query_token (&query_buf, &query_lex_buf, &query_lex_len); } static Z_AttributesPlusTerm *rpn_term (ODR o, int num_attr, int *attr_list) @@ -96,14 +109,25 @@ static Z_AttributesPlusTerm *rpn_term (ODR o, int num_attr, int *attr_list) if (num_attr) { int i; + int *attr_tmp; + zapt->attributeList = odr_malloc (o, num_attr * sizeof(*zapt->attributeList)); + + attr_tmp = odr_malloc (o, num_attr * 2 * sizeof(int)); + memcpy (attr_tmp, attr_list, num_attr * 2 * sizeof(int)); for (i = 0; i < num_attr; i++) { zapt->attributeList[i] = odr_malloc (o,sizeof(**zapt->attributeList)); - zapt->attributeList[i]->attributeType = &attr_list[2*i]; - zapt->attributeList[i]->attributeValue = &attr_list[2*i+1]; + zapt->attributeList[i]->attributeType = &attr_tmp[2*i]; +#ifdef Z_95 + zapt->attributeList[i]->attributeSet = 0; + zapt->attributeList[i]->which = Z_AttributeValue_numeric; + zapt->attributeList[i]->value.numeric = &attr_tmp[2*i+1]; +#else + zapt->attributeList[i]->attributeValue = &attr_tmp[2*i+1]; +#endif } } else @@ -235,3 +259,29 @@ Z_RPNQuery *p_query_rpn (ODR o, const char *qbuf) return zq; } +Z_AttributesPlusTerm *p_query_scan (ODR o, const char *qbuf) +{ + int attr_list[1024]; + int num_attr = 0; + int max_attr = 512; + const char *cp; + + query_buf = qbuf; + while (lex() == 'l') + { + lex (); + if (!query_look) + return NULL; + if (!(cp = strchr (query_lex_buf, '='))) + return NULL; + if (num_attr >= max_attr) + return NULL; + attr_list[2*num_attr] = atoi (query_lex_buf); + attr_list[2*num_attr+1] = atoi (cp+1); + num_attr++; + } + if (!query_look) + return NULL; + return rpn_term (o, num_attr, attr_list); +} +