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