#!/usr/bin/rexx /*------------------------------------------------------------- Demoprogram for Rexx with the GTK-server using IPC Tested with Zenwalk Linux 4.2 using Regina 3.3 Requires GTK-server 2.1.3 or higher. Created March 20, 2007 - PvE. This demo has a small REXX problem, which probably can be solved easily by an experienced REXX programmer :-) It demonstrates the principle of IPC though. -------------------------------------------------------------*/ /* Start the GTK-server in IPC mode */ ADDRESS SYSTEM('gtk-server -ipc=1 -detach') /* Setup GUI */ CALL GTK('gtk_init NULL NULL') win = GTK('gtk_window_new 0') CALL GTK('gtk_window_set_title' win '\"Rexx Demo Program\"') CALL GTK('gtk_widget_set_usize' win '450 400') table = GTK('gtk_table_new 50 50 1') CALL GTK('gtk_container_add' win table) button = GTK('gtk_button_new_with_label Exit') CALL GTK('gtk_table_attach_defaults' table button '41 49 45 49') entry = GTK('gtk_entry_new') CALL GTK('gtk_table_attach_defaults' table entry '1 40 45 49') txt = GTK('gtk_text_new NULL NULL') CALL GTK('gtk_table_attach_defaults' table txt '1 49 8 44') radio1 = GTK('gtk_radio_button_new_with_label_from_widget NULL Yes') CALL GTK('gtk_table_attach_defaults' table radio1 '1 10 1 3') radio2 = GTK('gtk_radio_button_new_with_label_from_widget' radio1 'No') CALL GTK('gtk_table_attach_defaults' table radio2 '1 10 4 7') CALL GTK('gtk_widget_show_all' win) CALL GTK('gtk_widget_grab_focus' entry) event = '0' /* Mainloop */ DO UNTIL event = button | event = win event = GTK('gtk_server_callback wait') IF event = entry THEN DO tmp = GTK('gtk_entry_get_text' entry) CALL GTK('gtk_text_insert' txt 'NULL NULL NULL \"'tmp'\n\" -1') /* Empty entry field */ CALL GTK('gtk_editable_delete_text' entry '0 -1') END END /* Exit GTK-server and do not wait for response */ ADDRESS SYSTEM('gtk-server msg=1,"gtk_server_exit" &') EXIT(0) /*-------------------------------------------------------------*/ /* This is the communication function */ GTK: PROCEDURE PARSE ARG str /* Retrieve result */ ADDRESS SYSTEM 'gtk-server msg=1,"'str'"' WITH OUTPUT FIFO '' PULL res /* Return value */ RETURN res /*-------------------------------------------------------------*/