anchor.diff:  %% low level tools
   %% ----------------------------------------------------------------------
   
  +is_en_passant([_ | _] = History, {C2, R2} = OppPawnCoord) ->
  +    [A, B, C, D] = lists:last(History),
  +    case crd_dec(C, D) of
  +        OppPawnCoord ->
  +            case crd_dec(A, B) of
  +                {C2, R1} when abs(abs(R1) - abs(R2)) == 2 ->
  +                    true;
  +                _ -> false
  +            end;
  +        _ -> false
  +    end;
  +is_en_passant(_, _) -> false.
  +
   is_empty_or_enemy(Table, MyColor, Coord) ->
       case cell(Table, Coord) of
           ?empty -> Coord;
  
positive.code:               end
        end, [{C, R} || C <- ?seq_1_8, R <- ?seq_1_8]).
  
  whereis_my_king(Table, MyColor) ->
      whereis_my_king(
        Table, MyColor,
        [{C, R} || C <- ?seq_1_8, R <- ?seq_1_8]).
  whereis_my_king(Table, MyColor, [H | Tail]) ->
      case cell(Table, H) of
          {MyColor, ?king} -> H;
          _ -> whereis_my_king(Table, MyColor, Tail)
      end.
  
  cell(Table, {C, R})
    when R >= 1 andalso R =< 8 andalso
  
negative.code:         {_, ?king} -> throw({error, cannot_take_king});
          _ -> ok
      end,
      Possible = possible(Table, C1, MyColor, Figure, History),
      echessd_log:debug(
        "Fig ~w from ~s can move to: ~9999p",
  