* Sebastian Hammer, Adam Dickmeiss
*
* $Log: pquery.c,v $
- * Revision 1.1 1995-05-22 15:31:49 adam
+ * Revision 1.7 1995-09-29 17:12:36 quinn
+ * Smallish
+ *
+ * Revision 1.6 1995/09/27 15:03:03 quinn
+ * Modified function heads & prototypes.
+ *
+ * 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).
*
*/
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)
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
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);
+}
+