#!icon # # Icon demo with GTK-server using FIFO # # Tested with the original Icon 9.4.2 and Slackware Linux 10 # http://www.cs.arizona.edu/icon/ # # Also tested with Unicon and Slackware Linux 10 # http://unicon.sourceforge.net/ # # Run with "./demo.icn" or compile with "icont demo.icn" # # Peter van Eerten, august 29 2004 # Revised for GTK-server 1.2 October 7, 2004 # Revised for GTK-server 1.3 December 7, 2004 # Revised for GTK-server 2.0.6 at december 17, 2005 # Fixed issue reported by Bruce Rennie - December 15, 2018 #------------------------------------------------------------------ procedure gtk(str) local answer, in, out out := open("/tmp/demo.icon", "w") write(out, str) close(out) in := open("/tmp/demo.icon", "r") answer := read(in) close(in) return answer end #------------------------------------------------------------------ procedure main() local win, tbl, button, entry, radio1, radio2, txt, out, event, winev, tmp # Start GTK-server and wait for initialization system ("gtk-server -fifo=/tmp/demo.icon -detach") # Setup GUI gtk("gtk_init NULL NULL") win := gtk("gtk_window_new 0") gtk("gtk_window_set_title " || win || " \"Icon Demo program\"") gtk("gtk_widget_set_usize " || win || " 450 400") tbl := gtk("gtk_table_new 50 50 1") gtk("gtk_container_add " || win || " " || tbl) button := gtk("gtk_button_new_with_label Exit") gtk("gtk_table_attach_defaults " || tbl || " " || button || " 41 49 45 49") entry := gtk("gtk_entry_new") gtk("gtk_table_attach_defaults " || tbl || " " || entry || " 1 40 45 49") txt := gtk("gtk_text_new NULL NULL") gtk("gtk_table_attach_defaults " || tbl || " " || txt || " 1 49 8 44") radio1 := gtk("gtk_radio_button_new_with_label_from_widget NULL Yes") gtk("gtk_table_attach_defaults " || tbl || " " || radio1 || " 1 10 1 4") radio2 := gtk("gtk_radio_button_new_with_label_from_widget " || radio1 || " No") gtk("gtk_table_attach_defaults " || tbl || " " || radio2 || " 1 10 4 7") gtk("gtk_widget_show_all " || win) gtk("gtk_widget_grab_focus " || entry) event := 0 # Mainloop while (event ~== button) & (event ~== win) do { event := gtk("gtk_server_callback WAIT") if event = entry then { tmp := gtk("gtk_entry_get_text " || entry) # Only if result is not &null add text if \tmp then gtk("gtk_text_insert " || txt || " NULL NULL NULL \"" || tmp || "\" -1") # Empty entry field gtk("gtk_editable_delete_text " || entry || " 0 -1") } } # Exit GTK gtk("gtk_server_exit") end