public static object[] tour(object graph, List<string> ns, Dictionary<string, string> aliases)
 {
     Guide guide = new Guide();
     AtomBox outbox = new AtomBox();
     ListBox collection = new ListBox();
     Dictionary<object, object> symtab = new Dictionary<object, object>();
     add_namespace_directives(ns, aliases, collection);
     ConstructSiteseer construct = new ConstructSiteseer(outbox, collection, ns, symtab, aliases);
     guide.tour(graph, construct);
     return ((object[])outbox.value);
 }
        public bool view_part(Site site, out ISiteseer new_siteseer)
        {
            m_count++;

            if (site.type != null) {
                object[] attrib = site.type.GetCustomAttributes(typeof(LiteralFieldAttribute), true);

                if (attrib.Length > 0) {
                    FieldInfo fi = site.type.GetField(((LiteralFieldAttribute)attrib[0]).field);

                    if (fi != null) {
                        m_collection.put(fi.GetValue(site.value));
                        new_siteseer = null;
                        return true;
                    }
                }
            }

            if (Literal.is_atom_type(site.value)) {

                new_siteseer = null;

                if (site.value is Symbol) {
                    m_collection.put(new Cons(Abbrev.quote, new Cons(site.value)));
                } else /*if (site.value != null)*/ {
                    object[] sitelist = m_parent_type.GetCustomAttributes(typeof(SiteListAttribute), false);

                    if (sitelist.Length > 0 || site.value != null) m_collection.put(site.value);
                }

                return true;
            } else {
                if (site.type != null) {
                    object[] attrib = site.type.GetCustomAttributes(typeof(RepresentativeFieldAttribute), true);

                    FieldInfo fi;

                    if (attrib.Length > 0) {
                        fi = site.type.GetField(((RepresentativeFieldAttribute)attrib[0]).field);

                        if (fi != null) {
                            object name = fi.GetValue(site.value);

                            if (name != null) {
                                object sym;
                                bool was_defined = m_symtab.TryGetValue(name, out sym);

                                if (was_defined) {
                                    if (sym == site.value) {
                                        m_collection.put(name);
                                        new_siteseer = null;
                                        return true;
                                    } else {
                                        throw new Exception();
                                    }
                                } else {
                                    m_symtab.Add(name, site.value);
                                }
                            }
                        }
                    }

                    if (site.value is object[]) {
                        ListBox list = new ListBox();
                        new_siteseer = new ConstructSiteseer(m_collection, list, m_ns, m_symtab, m_aliases);
                        return true;
                    } else if (site.value is Cons) {
                        m_collection.put(site.value);
                        new_siteseer = null;
                        return true;
                    } else {
                        object[] sitelist = m_parent_type.GetCustomAttributes(typeof(SiteListAttribute), false);

                        string name = resolve(site.type.Namespace, site.type.FullName, site.type.Name);

                        if (site.name != null && sitelist.Length == 0)
                            name = String.Format("{0}#{1}", name, site.name);

                        ProperListBox list = new ProperListBox();
                        ((IBox)list).put(Symbol.get_symbol(name));
                        new_siteseer = new ConstructSiteseer(m_collection, list, m_ns, m_symtab, m_aliases);
                        return true;
                    }
                } else {
                    new_siteseer = null;
                    return true;
                }
            }
        }