:-compile('MazeController').
%------------------------------------------------------------------------------
make(FileName):-
    open(FileName,read,Stream),
    make_facts(Stream,0,0,Squares),
    close(Stream),
    controller:assert_squares(Squares),
    write('/*----'),
    nl,
    controller:draw_maze([]),
    write('----*/'),
    nl,
    print_squares(Squares).
%------------------------------------------------------------------------------
print_squares([]).

print_squares([FirstSquare|RestOfSquares]):-
    write(FirstSquare),
    write('.'),
    nl,
    print_squares(RestOfSquares).
%------------------------------------------------------------------------------
make_facts(Stream,_,_,[]):-
    at_eof(Stream),
    !.

make_facts(Stream,X,Y,Squares):-
    iso:get_char(Stream,Char),
    deal_with_char(Char,X,Y,NewX,NewY,CharSquares),
    make_facts(Stream,NewX,NewY,RestOfSquares),
    append(CharSquares,RestOfSquares,Squares).
%------------------------------------------------------------------------------
deal_with_char(' ',X,Y,NewX,Y,[square(X,Y,unknown)]):-
    !,
    NewX is X + 1.

deal_with_char('E',X,Y,NewX,Y,[square(X,Y,entrance)]):-
    !,
    NewX is X + 1.

deal_with_char('X',X,Y,NewX,Y,[square(X,Y,exit)]):-
    !,
    NewX is X + 1.

deal_with_char('W',X,Y,NewX,Y,[]):-
    !,
    NewX is X + 1.

deal_with_char('\n',_,Y,0,NewY,[]):-
    NewY is Y + 1.
%------------------------------------------------------------------------------
