private void userHelp (ArrayList < String > command)
  {
    String topic;

    if (command.size () > 1)
      {
	topic = command.get (1);
      }
    else
      {
	topic = "";
      }
    System.out.println ("");
    if (topic.equals (""))
      {
	System.out.
	  print ("alarm on|off..............turns audible alarm on/off\n");
	System.out.
	  print ("analyze...................analyze a game in progress\n");
	System.out.
	  print ("annotate..................annotate game [help].\n");
	System.out.print ("back n....................undo n moves\n");
	System.out.
	  print ("bench.....................runs performance benchmark.\n");
	System.out.print ("black.....................sets black to move.\n");
	System.out.print ("display...................displays the board\n");
	System.out.
	  print ("display <n>...............sets display options [help]\n");
	System.out.
	  print ("edit......................edit board position. [help]\n");
	System.out.print ("end.......................terminates program.\n");
	System.out.
	  print ("exit......................restores STDIN to keyboard.\n");
	System.out.
	  print
	  ("go........................initiates search (same as move).\n");
	System.out.print ("help [command]............displays help.\n");
	System.out.print ("history...................display game moves.\n");
	System.out.
	  print ("info......................displays program settings.\n");
	System.out.
	  print ("input <filename>..........sets STDIN to <filename>.\n");
	System.out.print ("log on|off................turn logging on/off.\n");
	System.out.print ("more...\n");
	NeutronUtil.getInput ();
	System.out.
	  print
	  ("move......................initiates search (same as go).\n");
	System.out.
	  print ("name......................sets opponent's name.\n");
	System.out.
	  print
	  ("new.......................initialize and start new game.\n");
	System.out.
	  print
	  ("noise n...................no status until n nodes searched.\n");
	System.out.
	  print
	  ("perf.[long]...............times the move generator/make_move.\n");
	System.out.
	  print
	  ("perft.....................tests the move generator/make_move.\n");
	System.out.
	  print ("ponder on|off.............toggle pondering off/on.\n");
	System.out.
	  print
	  ("read <filename>...........read moves in [from <filename>].\n");
	System.out.
	  print
	  ("reada <filename>..........read moves in [from <filename>].\n");
	System.out.
	  print
	  ("                          (appends to current game history.)\n");
	System.out.
	  print ("reset n...................reset game to move n.\n");
	System.out.print ("save <filename>.......saves game.\n");
	System.out.
	  print ("score.....................print evaluation of position.\n");
	System.out.
	  print ("sd n......................sets absolute search depth.\n");
	System.out.
	  print ("show book.................toggle book statistics.\n");
	System.out.
	  print ("st n......................sets absolute search time.\n");
	System.out.
	  print
	  ("test <file> [N]...........test a suite of problems. [help]\n");
	System.out.
	  print ("time......................time controls. [help]\n");
	System.out.
	  print
	  ("trace n...................display search tree below depth n.\n");
	System.out.print ("white.....................sets white to move.\n");
	System.out.println ();
	return;
      }
    if (topic.equals ("analyze"))
      {
	System.out.print ("analyze:\n");
	System.out.
	  print
	  ("the analyze command puts GnuTrax into a mode where it will\n");
	System.out.
	  print ("search forever in the current position. When a move is\n");
	System.out.
	  print ("entered, GnuTrax will make that move, switch sides, and\n");
	System.out.
	  print
	  ("again compute, printing analysis as it searches. You can\n");
	System.out.
	  print ("back up a move by entering \"back\" or you can back up\n");
	System.out.
	  print
	  ("several moves by entering \"back <n>\". Note that <n> is\n");
	System.out.
	  print
	  ("the number of moves, counting each player's move as one.\n");
	System.out.println ();
	return;
      }
    if (topic.equals ("annotate"))
      {
	System.out.print ("annotate:\n");
	System.out.
	  print
	  ("annotate <filename> <b|w|bw> <moves> <margin> <time> [n]\n");
	System.out.
	  print
	  ("where <filename> is the input file with game moves, while the\n");
	System.out.
	  print
	  ("output will be written to filename.can. b/w/bw indicates\n");
	System.out.
	  print
	  ("whether to annotate only the white side (w), the black side (b)\n");
	System.out.
	  print
	  ("or both (bw). <moves> indicates which moves to annotate. A single\n");
	System.out.
	  print
	  ("value says start at the indicated move and go through the\n");
	System.out.
	  print
	  ("entire game. A range (20-30) annotates the given range only.\n");
	System.out.
	  print
	  ("<margin> is the difference between the search value for the\n");
	System.out.
	  print
	  ("move played in the game, and the best move GnuTrax found,\n");
	System.out.
	  print
	  ("before a comment is generated. <time> is the time limit per\n");
	System.out.
	  print
	  ("move in seconds. If the optional \"<n>\" is appended, this\n");
	System.out.
	  print ("produces <n> best moves/scores/PV's, rather than just\n");
	System.out.
	  print
	  ("the very best move. It won't display any move that is worse\n");
	System.out.
	  print
	  ("than the actual game move played, but you can use \"-<n>\" to\n");
	System.out.
	  print
	  ("force GnuTrax to produce <n> PV's regardless of how bad they get.\n");
	System.out.println ();
	return;
      }
    if (topic.equals ("display"))
      {
	System.out.print ("display:\n");
	System.out.
	  print ("display changes   -> display variation when it changes.\n");
	System.out.
	  print
	  ("display extstats  -> display search extension statistics.\n");
	System.out.
	  print ("display hashstats -> display search hashing statistics.\n");
	System.out.
	  print ("display movenum   -> display move numbers in PV.\n");
	System.out.
	  print
	  ("display moves     -> display moves as they are searched.\n");
	System.out.
	  print ("display stats     -> display basic search statistics.\n");
	System.out.print ("display time      -> display time for moves.\n");
	System.out.
	  print
	  ("display variation -> display variation at end of iteration.\n");
	System.out.println ();
	return;
      }
    if (topic.equals ("edit"))
      {
	System.out.println ("edit help: not ready yet.");
	return;
      }
    if (topic.equals ("test"))
      {
	System.out.println ("test help: not ready yet.");
	return;
      }
    if (topic.equals ("time"))
      {
	System.out.print ("time:\n");
	System.out.
	  print
	  ("time is used to set the basic search timing controls. The general\n");
	System.out.print ("form of the command is as follows:\n");
	System.out.println ();
	System.out.
	  print ("      time nmoves/ntime/[nmoves/ntime]/[increment]\n");
	System.out.println ();
	System.out.
	  print
	  ("nmoves/ntime represents a traditional first time control when\n");
	System.out.
	  print
	  ("nmoves is an integer representing the number of moves and ntime\n");
	System.out.
	  print
	  ("is the total time allowed for these moves. The [optional]\n");
	System.out.
	  print
	  ("nmoves/ntime is a traditional secondary time control. Increment\n");
	System.out.
	  print
	  ("is a feature which emulates the fischer clock where <increment>\n");
	System.out.
	  print ("is added to the time left after each move is made.\n");
	System.out.println ();
	System.out.
	  print
	  ("as an alternative, nmoves can be \"sd\" which represents a sudden\n");
	System.out.
	  print
	  ("death time control of the remainder of the game played in ntime.\n");
	System.out.
	  print
	  ("The optional secondary time control can be a sudden-death time\n");
	System.out.print ("control, as in the following example:\n");
	System.out.println ();
	System.out.print ("        time 60/30/sd/30\n");
	System.out.println ();
	System.out.
	  print
	  ("this sets 60 moves in 30 minutes, then game in 30 additional\n");
	System.out.print ("minutes. An increment can be added if desired.\n");
	System.out.println ();
	return;
      }
    System.out.println ("No help found on topic:");
  }