public void writeInformation(Description d, int categoryID, HUD UI) {
    super.writeInformation(d, categoryID, UI) ;
    if (categoryID != 3 || ! structure.intact()) return ;
    final Venue archives = this ;
    //
    //  List the various research categories.
    d.append("Information Categories:\n  ") ;
    for (final int n : CAT_IDS) {
      d.append(new Description.Link(CAT_NAMES[n]) {
        public void whenClicked() { lastSkillCat = n ; }
      }) ;
      d.append(" ") ;
    }
    d.append("\n") ;
    
    for (final Skill skill : SKILL_CATS[lastSkillCat]) {
      final Item match = Item.withReference(DATALINKS, skill) ;
      
      d.append("\n  "+skill.name) ;
      if (stocks.hasItem(match)) {
        d.append(" Installed") ;
      }
      else if (stocks.hasOrderFor(match)) {
        d.append(" Ordered") ;
      }
      else d.append(new Description.Link(" Install") {
        public void whenClicked() {
          stocks.addSpecialOrder(new Manufacture(
            null, archives, CIRCUITRY_TO_DATALINKS,
            Item.withQuality(match, Rand.index(3))
          )) ;
        }
      }) ;
    }
  }