#include int btree_next(BTREE * B, void **key, void **data) { int q; if (B->N <= 0) return 0; /* if rewound, start at root and go all the way to the left */ if (B->cur == 0) B->cur = 1; /* go to the right */ else B->cur = B->node[B->cur].right; if (B->cur == 0) /* no more */ return 0; if (B->cur < 0) /* thread. stop here */ B->cur = -(B->cur); else /* go all the way left */ while ((q = B->node[B->cur].left)) B->cur = q; *key = B->node[B->cur].key; *data = B->node[B->cur].data; return 1; }