#define x_tree_do_all(a, O, o, b, c) if (a && a->O && ((XT *)a->O)->td) for(b = x_tree_do_all_first((XT *)a->O, (void *)&c, x_offset(c, O)); b; b = x_tree_do_all_next(b, (void *)&c, x_offset(c, O), x_offset(c, o)))
#define x_tree_up(a, o, b, c) if (a) for(b = a->o, c = a; b; b = (b->u) ? *(Xt **)((char *)(b->u->d) + x_offset(a, o)) : 0, b ? (c = b->d) : 0)
#endif
#ifdef X_DPTR_TO_PTR
#define x_tree_od_all(a, O, o, b, c) if (a && a->O && ((XT *)a->O)->td) for(b = x_tree_do_all_last ((XT *)a->O, (void *)&c, x_offset(c, O)); b; b = x_tree_do_all_prev(b, (void *)&c, x_offset(c, O), x_offset(c, o)))
#define x_list_do_all(a, O, o, b, c) if (a && a->O && ((XL *)a->O)->f) for(b = x_list_do_all_first((XL *)a->O, (void *)&c, x_offset(c, O)); b; b = x_list_do_all_next(b, (void *)&c, x_offset(c, O), x_offset(c, o)))
#define x_list_od_all(a, O, o, b, c) if (a && a->O && ((XL *)a->O)->l) for(b = x_list_do_all_last ((XL *)a->O, (void *)&c, x_offset(c, O)); b; b = x_list_do_all_prev(b, (void *)&c, x_offset(c, O), x_offset(c, o)))
#else
#define x_tree_up(a, o, b, c) if (a) for(b = a->o, c = a; b; b = (b->u) ? (Xt *)((char *)(b->u->d) + x_offset(a, o)) : 0, b ? (c = b->d) : 0)
#define x_tree_do_all(a, O, o, b, c) if (a && a->O.td) for(b = x_tree_do_all_first(&a->O, (void *)&c, x_offset(c, O)); b; b = x_tree_do_all_next(b, (void *)&c, x_offset(c, O), x_offset(c, o)))
#define x_tree_od_all(a, O, o, b, c) if (a && a->O.td) for(b = x_tree_do_all_last (&a->O, (void *)&c, x_offset(c, O)); b; b = x_tree_do_all_prev(b, (void *)&c, x_offset(c, O), x_offset(c, o)))
#define x_list_do_all(a, O, o, b, c) if (a && a->O.f) for(b = x_list_do_all_first(&a->O, (void *)&c, x_offset(c, O)); b; b = x_list_do_all_next(b, (void *)&c, x_offset(c, O), x_offset(c, o)))
#define x_list_od_all(a, O, o, b, c) if (a && a->O.l) for(b = x_list_do_all_last (&a->O, (void *)&c, x_offset(c, O)); b; b = x_list_do_all_prev(b, (void *)&c, x_offset(c, O), x_offset(c, o)))
#endif
#define x_vector_do(a,b,c) if (a) for(b = 0, c = a->d[b]; b < a->count; ++b, c = a->d[b])
#define x_vector_od(a,b,c) if (a) for(b = a->count - 1, c = a->d[b]; b >= 0; --b, c = a->d[b])