:- package(gui). :- package(guibuilder). main(Applet, _) :- gui(Applet, border, [ 'North' / label(_, 'Welcome to the Machine'), 'Center' / text_area(OutputWindow, 16, 60), 'South' / text_field(InputWindow, 60) ** action(evaluate(InputWindow)) ]), textComponent_setEditable(OutputWindow,false), textArea_getOutputStream(OutputWindow, Output), set_output(Output), set_error(Output). evaluate(InputWindow) :- textComponent_getText(InputWindow, Text), parse_atom(Text, Goal, [variable_names(VarList)]), '_break.evaluate'(Goal, VarList), fail. evaluate(InputWindow) :- textComponent_setText(InputWindow, ''). '_break.evaluate'(Goal, VarList) :- catch(Goal, error(E,I), '_break.show_error'(E,I)), '_break.answer'(VarList), !. '_break.evaluate'(_, _) :- '_break.result'(no). '_break.answer'(L) :- member(V=X,L), nl, write(V), write('\t= '), writeq(X), flush_output, fail. '_break.answer'(_) :- '_break.result'(yes). '_break.result'(Result) :- nl, println([Result]), flush_output. '_break.show_error'(Error, Impl) :- println(['** error: ', quoted(Error)]), member(Term, Impl), println(['>> ', quoted(Term)]), flush_output, fail.