PSALM - demo2.exp
Not logged in
#!/usr/bin/expect -f
#
# Demo script using Expect with Psalm
#
# Tested with Expect version 5.45.4 on Linux Mint 21
#
# November 21, 2022 - PvE.
#----------------------------------------------------

# Disable logging session to stdout
log_user 0

# Start Psalm
spawn ./psalm

# Send definitions first
send "DEF libgtk-3.so.0 void gtk_init int int\r\n"; expect ok
send "DEF libgtk-3.so.0 long gtk_window_new int\r\n"; expect ok
send "DEF libgtk-3.so.0 void gtk_window_set_title int char*\r\n"; expect ok
send "DEF libgtk-3.so.0 void gtk_widget_set_size_request long int int\r\n"; expect ok
send "DEF libgtk-3.so.0 void gtk_window_set_position long int\r\n"; expect ok
send "DEF libgtk-3.so.0 long gtk_table_new int int int\r\n"; expect ok
send "DEF libgtk-3.so.0 void gtk_container_add long long\r\n"; expect ok
send "DEF libgtk-3.so.0 long gtk_button_new_with_label char*\r\n"; expect ok
send "DEF libgtk-3.so.0 long gtk_label_new char*\r\n"; expect ok
send "DEF libgtk-3.so.0 void gtk_label_set_text long char*\r\n"; expect ok
send "DEF libgtk-3.so.0 void gtk_table_attach_defaults long long int int int int\r\n"; expect ok
send "DEF libgtk-3.so.0 void gtk_widget_show_all int\r\n"; expect ok
send "DEF libgobject-2.0.so.0 long g_signal_connect_data int char* address void* void* int\r\n"; expect ok
send "DEF libgtk-3.so.0 void gtk_main_iteration void\r\n"; expect ok

# Create GUI
send "EXE gtk_init NULL NULL\r\n"; expect ok\r\n
send "EXE gtk_window_new 0\r\n"; expect -re \[0-9\]{6,}
set window $expect_out(0,string)
send "EXE gtk_widget_set_size_request $window 300 200\r\n"; expect ok\r\n
send "EXE gtk_window_set_title $window \"Expect with GTK\"\r\n"; expect ok\r\n
send "EXE gtk_window_set_position $window 1\r\n"; expect ok\r\n
send "EXE gtk_table_new 20 20 1\r\n"; expect -re \[0-9\]{6,}
set table $expect_out(0,string)
send "EXE gtk_container_add $window $table\r\n"; expect ok\r\n
send "EXE gtk_button_new_with_label \"Click to Quit\"\r\n"; expect -re \[0-9\]{6,}
set button $expect_out(0,string)
send "EXE gtk_table_attach_defaults $table $button 12 19 12 19\r\n"; expect ok\r\n
send "EXE gtk_label_new \"Expect uses GTK now!!\"\r\n"; expect -re \[0-9\]{6,}
set label $expect_out(0,string)
send "EXE gtk_table_attach_defaults $table $label 1 15 1 10\r\n"; expect ok\r\n
send "EXE gtk_widget_show_all $window\r\n"; expect ok\r\n

# Connect signals
send "EXE g_signal_connect_data $window delete-event callback NULL NULL 0\r\n"; expect -re \[0-9\]{1,}\r\n$
send "EXE g_signal_connect_data $button clicked callback NULL NULL 0\r\n"; expect -re \[0-9\]{1,}\r\n$

# Mainloop
set event 0
while {$event != $button && $event != $window} {
    send "EXE gtk_main_iteration\r\n"; expect ok\r\n
    send "CALLBACK 1\r\n"; expect -re \[0-9\]{1,}\r\n$
    set event $expect_out(0,string)
}

# Exit Psalm
send "EXIT\r\n"; expect Goodbye!

Return to PSALM