#!/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