+
+ fd_l = rset_open (info->rset_l, RSETF_SORT_SYSNO|RSETF_READ);
+ fd_r = rset_open (info->rset_r, RSETF_SORT_SYSNO|RSETF_READ);
+
+ more_l = rset_read(info->rset_l, fd_l, buf_l);
+ more_r = rset_read(info->rset_r, fd_r, buf_r);
+
+ while (more_l || more_r)
+ {
+ int cmp;
+ int score;
+
+ if (more_l && more_r)
+ cmp = (*info->cmp)(buf_l, buf_r);
+ else if (more_r)
+ cmp = 2;
+ else
+ cmp = -2;
+
+ if (cmp >= -1 && cmp <= 1)
+ more_l = rset_read (info->rset_l, fd_l, buf_l);
+ else if (cmp > 1)
+ {
+ more_r = rset_read (info->rset_r, fd_r, buf_r);
+ }
+ else
+ {
+ rset_score (info->rset_l, fd_l, &score);
+ key_add (info, buf_l, score == -1 ? 1 : score);
+ more_l = rset_read (info->rset_l, fd_l, buf_l);
+ }
+ }
+ rset_close (info->rset_l, fd_l);
+ rset_close (info->rset_r, fd_r);
+