+#if RSBETWEEN_DEBUG
+ yaz_log(log_level,"btw: which: %d", which);
+#endif
+ if (which==WHICH_L)
+ {
+ p->depth++;
+#if RSBETWEEN_DEBUG
+ yaz_log(log_level,"btw: read start tag. d=%d",p->depth);
+#endif
+ memcpy(p->startbuf,buf,info->key_size);
+ p->startbufok=1;
+ checkattr(rfd); /* in case we already saw the attr here */
+ }
+ else if (which==WHICH_R)
+ {
+ if (p->depth == p->attrdepth)
+ p->attrdepth=0; /* ending the tag with attr match */
+ p->depth--;
+#if RSBETWEEN_DEBUG
+ yaz_log(log_level,"btw: read end tag. d=%d ad=%d",
+ p->depth, p->attrdepth);
+#endif
+ }
+ else if (which==WHICH_A)
+ {
+#if RSBETWEEN_DEBUG
+ yaz_log(log_level,"btw: read attr");
+#endif
+ memcpy(p->attrbuf,buf,info->key_size);
+ p->attrbufok=1;
+ checkattr(rfd); /* in case the start tag came first */
+ }
+ else
+ { /* mut be a real hit */
+ if (p->depth && p->attrdepth)
+ {
+ p->hits++;
+#if RSBETWEEN_DEBUG
+ yaz_log(log_level,"btw: got a hit h=%d d=%d ad=%d t=%d+%d",
+ p->hits,p->depth,p->attrdepth,
+ info->rset_m->no_rset_terms,thisterm);
+#endif
+ *term= info->rset_m->no_rset_terms + thisterm;
+ return 1; /* everything else is in place already */
+ } else
+ {
+#if RSBETWEEN_DEBUG
+ yaz_log(log_level, "btw: Ignoring hit. h=%d d=%d ad=%d",
+ p->hits,p->depth,p->attrdepth);
+#endif
+ }
+ }
+ } /* while read */
+
+ return 0;
+
+} /* r_read */