#!/usr/bin/env csh # # Demonstration on how to create a GTK GUI using Psalm with CShell (CSH). # # Run as follows (sockets): # socat EXEC:./psalm EXEC:./demo.csh # # Or using socat with pipes: # socat EXEC:./psalm,pipes EXEC:./demo.csh,pipes # # Or using dpipe from VDE2: # dpipe ./psalm = ./demo.csh # # Or using pipexec: # pipexec [ A ./psalm ] [ B ./demo.csh ] "{A:1>B:0}" "{B:1>A:0}" # # Or native Linux: # : | { ./psalm | ./demo.csh; } > /dev/fd/0 # # November 28, 2022 by Peter van Eerten. #------------------------------------------------------------------------------------ # Define communication function alias comm 'echo \!*; set answer = $<' # Send definitions first 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_window_set_position long int" comm "DEF libgtk-3.so.0 long gtk_button_new_with_label char*" 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_label_new char*" comm "DEF libgtk-3.so.0 void gtk_table_attach_defaults long long int int int int" comm "DEF libgtk-3.so.0 void gtk_main_iteration void" comm "DEF libgtk-3.so.0 void gtk_widget_show_all int" comm "DEF libgtk-3.so.0 void gtk_widget_set_size_request long int int" comm "DEF libgobject-2.0.so.0 long g_signal_connect_data int char* address void* void* int" # Main program comm "EXE gtk_init NULL NULL" comm "EXE gtk_window_new 0"; set window = $answer comm "EXE gtk_window_set_title " $window '"C-shell with GTK-server!"' comm "EXE gtk_widget_set_size_request $window 400 200" comm "EXE gtk_window_set_position $window 1" comm "EXE gtk_table_new 10 10 1"; set table = $answer comm "EXE gtk_container_add $window $table" comm "EXE gtk_button_new_with_label " '"Click here to exit"'; set button = $answer comm "EXE gtk_table_attach_defaults $table $button 5 9 5 9" comm "EXE gtk_label_new " '"CShell can use GTK with Psalm."'; set label = $answer comm "EXE gtk_table_attach_defaults $table $label 2 8 2 3" 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" set event="0" # Mainloop while (($event != $button) && ($event != $window)) comm "EXE gtk_main_iteration" comm "CALLBACK 1"; set event = $answer end # Exit PSALM comm "EXIT"
Return to PSALM