Hello everybody.
I discovered yesterday the
GTK-server by Peter van Eerten and found it was a very interesting and impressive project.
I translated to Pascal the
Lua Unix FIFO demo. It wasn't very difficult, but I was glad to see that it works.

program demo_fifo;
{$MODE objfpc}{$H+}
uses
SysUtils, Classes, Process;
const
CFile = '/tmp/demo.pascal';
function gtk(const s: string): string;
var
f: textfile;
begin
AssignFile(f, CFile);
Append(f);
WriteLn(f, s);
CloseFile(f);
result := EmptyStr;
AssignFile(f, CFile);
Reset(f);
ReadLn(f, result);
CloseFile(f);
end;
var
LWindow, LTable, LButton, LLabel, LEvent: string;
LProcess: TProcess;
begin
LProcess:= TProcess.Create(nil);
LProcess.Executable :='/usr/local/bin/gtk-server-gtk2';
LProcess.Parameters.Add('-fifo=' + CFile);
LProcess.Parameters.Add('-detach');
LProcess.Options := LProcess.Options + [poWaitOnExit];
LProcess.Execute;
gtk('gtk_init NULL NULL');
LWindow := gtk('gtk_window_new 0');
gtk('gtk_widget_set_usize ' + LWindow + ' 300 100');
gtk('gtk_window_set_title ' + LWindow + ' "Pascal demo for GTK-server"');
gtk('gtk_window_set_position ' + LWindow + ' 1');
LTable := gtk('gtk_table_new 20 20 1');
gtk('gtk_container_add ' + LWindow + ' ' + LTable);
LButton := gtk('gtk_button_new_with_label "Quit"');
gtk('gtk_table_attach_defaults ' + LTable + ' ' + LButton + ' 12 19 12 19');
LLabel:= gtk('gtk_label_new "Hello from Free Pascal!"');
gtk('gtk_table_attach_defaults ' + LTable + ' ' + LLabel + ' 1 15 1 10');
gtk('gtk_widget_show_all ' + LWindow);
repeat
LEvent := gtk('gtk_server_callback wait');
until (LEvent = LButton) or (LEvent = LWindow);
gtk('gtk_server_exit');
end.
I would like to explore further how GTK-server works, and maybe write other more complete and up-to-date demos. (The demo above only works with
gtk-server-gtk2).
Please contribute, if you feel interested. For me, I have almost zero knowledge about this topic.
