Scheme_Object* spark_fltk_group::array(int argc, Scheme_Object** argv) { DEFAULT_RET_INIT; Fl_Group* group = _get_fl_group(argc, argv, 0); if (group) { Fl_Widget** widgets = const_cast<Fl_Widget**>(group->array()); if (!widgets) { DEFAULT_RET_FINISH; } int i = 0; Fl_Widget* w = widgets[i]; std::vector<Fl_Widget*> w_vec; while (w) { w_vec.push_back(w); ++i; w = widgets[i]; } size_t sz = w_vec.size(); Scheme_Object** elems = new Scheme_Object*[sz]; for (size_t i=0; i<sz; ++i) { Scheme_Object* obj = NULL; Scheme_Object* tag = 0; MZ_GC_DECL_REG(2); MZ_GC_VAR_IN_REG(0, obj); MZ_GC_VAR_IN_REG(1, tag); MZ_GC_REG(); tag = scheme_make_integer(FL_WIDGET_TAG); obj = scheme_make_cptr(w_vec[i], tag); elems[i] = obj; MZ_GC_UNREG(); } _ret_ = scheme_build_list(sz, elems); delete[] elems; } DEFAULT_RET_FINISH; }