:- object actuator.

actuator :-
    step_kernel <- script_threads.

:- end_object actuator.

:- object teller : [jsilib].

output(Value) :-
  get_window(Window),
  call(Window, clean, [test], _),
  output(Value, Window).

output(options(Function, Options, Count), Window) :-
  !,
  set_options(Window, Function, Options, Count).

output(field(List, Field), Window) :-
  !,
  show_list(Window, List, Field).

output(Value, Window) :-
  !,
  set_display(Window, Value).

set_display(Window, [Head|Rest]) :-
  !,
  atom_list_concat([Head|Rest], String),
  call(Window, display, [String], _).

set_display(Window, String) :-
  call(Window, display, [String], _).

set_term(Window, [H|T]) :-
  !,
  Term =.. [H|T],
  call(Window, display, [Term], _).

set_term(Window, S) :-
  call(Window, display, [S], _).

set_options(_Window, _Function, [], _I).

set_options(Window, Function, [H|T], I) :-
  I1 is I + 1,
  call(Window, Function, [H,I], _),
  set_options(Window, Function,T, I1).

show_list(_Window, [], _Field) :-
  !.

show_list(Window, [Value|Rest], Field) :-
  set_term(Window, Value),
  show_list(Window, Rest, Field).

:- end_object teller.
