anchor.diff:                      tr(
                         [tag(td, ["valign=top"], ChessTable),
                          tag(td, ["valign=top"],
  -                           game_history(GameID, FullHistory))]));
  +                           game_history(Step, GameID, FullHistory))]));
              true -> ChessTable
           end ++
           html_page_footer([]).
  
positive.code: 
  cell(Board, C, R) -> element(C, element(8 - R + 1, Board)).
  
  game_history(GameID, History) ->
      tag(table, ["cellpadding=0", "cellspacing=0", "border=0"],
          game_history(1, integer_to_list(GameID), History)).
  game_history(N, GameID, [PlyW, PlyB | Tail]) ->
      ghc(
        N, game_history_itemlink(GameID, (N - 1) * 2 + 1, PlyW) ++
            "..." ++
            game_history_itemlink(GameID, (N - 1) * 2 + 2, PlyB)) ++
          game_history(N + 1, GameID, Tail);
  game_history(N, GameID, [PlyW]) ->
      ghc(N, game_history_itemlink(GameID, (N - 1) * 2 + 1, PlyW));
  game_history(_, _, _) -> "".
  ghc(N, String) ->
      tr(
        [td(tt(integer_to_list(N) ++ ".&nbsp;")),
         td(tag(nobr, String))]).
  game_history_itemlink(GameID, Step, Ply) ->
      StrStep =
          if is_integer(Step) ->
                  "&step=" ++ integer_to_list(Step);
             true -> ""
          end,
      {Coords, Comment} =
          case Ply of
              {Coords0, Meta} ->
  
negative.code:       a,
        ["title='" ++ Comment ++ "'",
         "href='/?goto=" ++ ?SECTION_GAME ++
             "&game=" ++ GameID ++
             "&step=" ++ integer_to_list(Step) ++ "'"],
        tt(if CurStep == Step -> b(Coords);
              true -> Coords
           end)) ++
          case Comment of
              [_ | _] -> tag(sup, "*");
              _ -> ""
  