PSALM - demo.lua
Not logged in
#!/usr/bin/lua
--------------------------------------------------------------------
--
-- Demo for Psalm and LUA
--
-- Tested with LUA 5.4.4 on Linux Mint 21 --- http://www.lua.org/
--
--  Run as follows using socat:
--   socat EXEC:./psalm EXEC:./demo.lua
--
--  Or with dpipe from VDE2:
--   dpipe ./psalm = ./demo.lua
--
-- Or using pipexec:
--   pipexec [ A ./psalm ] [ B ./demo.lua ] "{A:1>B:0}" "{B:1>A:0}"
--
-- Or native Linux:
--   : | { ./psalm | ./demo.lua; } > /dev/fd/0
--
-- November 21, 2022 - Peter van Eerten.
--
--------------------------------------------------------------------

-- Communication function
function comm(string)

    print(string)
    return io.read()
end

-- Define functions
comm("DEF libgtk-3.so.0 void gtk_init int int")
comm("DEF libgtk-3.so.0 long gtk_window_new int")
comm("DEF libgtk-3.so.0 void gtk_window_set_title int char*")
comm("DEF libgtk-3.so.0 void gtk_widget_set_size_request long int int")
comm("DEF libgtk-3.so.0 void gtk_window_set_position long int")
comm("DEF libgtk-3.so.0 long gtk_table_new int int int")
comm("DEF libgtk-3.so.0 void gtk_container_add long long")
comm("DEF libgtk-3.so.0 long gtk_button_new_with_label char*")
comm("DEF libgtk-3.so.0 long gtk_table_attach_defaults long long int int int int")
comm("DEF libgtk-3.so.0 long gtk_label_new char*")
comm("DEF libgtk-3.so.0 void gtk_widget_show_all int")
comm("DEF libgobject-2.0.so.0 long g_signal_connect_data int char* address void* void* int")
comm("DEF libgtk-3.so.0 void gtk_main_iteration void")

-- Build GUI
comm("EXE gtk_init NULL NULL")
window = comm("EXE gtk_window_new 0")
comm("EXE gtk_window_set_title " .. window .. " \"LUA with GTK\"")
comm("EXE gtk_widget_set_size_request " .. window .. " 300 200")
comm("EXE gtk_window_set_position " .. window .. " 1")
table = comm("EXE gtk_table_new 20 20 1")
comm("EXE gtk_container_add " .. window .. " " .. table)
button = comm("EXE gtk_button_new_with_label \"Click to Quit\"")
comm("EXE gtk_table_attach_defaults " .. table .. " " .. button .. " 12 19 12 19")
label = comm("EXE gtk_label_new \"LUA uses GTK now!!\"")
comm("EXE gtk_table_attach_defaults " .. table .. " " .. label .. " 1 15 1 10")
comm("EXE gtk_widget_show_all " .. window)

-- Connect signals
comm("EXE g_signal_connect_data " .. window .. " delete-event callback NULL NULL 0")
comm("EXE g_signal_connect_data " .. button .. " clicked callback NULL NULL 0")

-- Mainloop
repeat
    comm("EXE gtk_main_iteration")
    event = comm("CALLBACK 1")
until event == button or event == window

-- Exit Psalm
comm("EXIT")

Return to PSALM