% Demonstration on how to use the GTK-server with Gnu PROLOG by FIFO. % Tested with Gnu PROLOG 1.2.16 on Slackware Linux 10. % % July 24, 2004 by Peter van Eerten. % % Run with gprolog. Compile with 'gplc demo.pl'. % Revised for GTK-server 1.2 October 7, 2004 % Revised for GTK-server 1.3 December 6, 2004 % Revised for GTK-server 2.0.6 at december 17, 2005 :-initialization(start). start:- init(Pid), main, leave(Pid). init(Pid):- % Start server in FIFO mode exec('gtk-server -fifo=/tmp/demo -detach', _, _, _, Pid), % Wait for initialize sleep(1). % Communicate with the GTK-server api(Txt, Result):- % Open Named Pipe open('/tmp/demo', write, Pout), % Write string to pipe write(Pout, Txt), % Close pipe close(Pout), % Open again for reading open('/tmp/demo', read, Pin), % Read info read_token(Pin, Result), % Close pipe close(Pin). % This is the concatenate predicate cat([], _). cat([H|T], Stream):- write(Stream, H), cat(T, Stream). % Concatenate list and communicate gtk(List, Result):- open_output_atom_stream(Stream), cat(List, Stream), close_output_atom_stream(Stream, Text), api(Text, Result). % The GUI definition starts here main:- % Initialize GTK gtk(['gtk_init NULL NULL'], _), % Define window gtk(['gtk_window_new 0'], Win), gtk(['gtk_window_set_title ', Win, ' "GTK-server with FIFO"'], _), gtk(['gtk_widget_set_usize ', Win, ' 350 200'], _), % Define Table gtk(['gtk_table_new 10 10 1'], Table), gtk(['gtk_container_add ', Win, ' ', Table], _), % Define button gtk(['gtk_button_new_with_label "Button label"'], Button), gtk(['gtk_table_attach_defaults ', Table, ' ', Button, ' 5 9 5 9'], _), % Show widgets gtk(['gtk_widget_show_all ', Win], _), % Mainloop repeat, gtk(['gtk_server_callback WAIT'], Event), Event == Button, !. leave(Pid):- % Exit GTK-server gtk(['gtk_server_exit'], _), % Exit Prolog - if you do not want to exit, use a cut (!). halt.