#!/bin/ksh # # Create embedded GTK functions for Kornshell - see the demo down below how it looks :-) # # (c) Peter van Eerten 2006, GPL license # # Tested with: # -PDKSH on Zenwalk 3.0 # -KornShell93 on Slackware 10 # # September 10, 2006: Initial release # September 23, 2006: Added check on timestamps # October 9, 2006: No limit on amount of arguments # October 13, 2007: Added mechanism for finding configfile # May 14, 2008: Added define function, code is even shorter now #------------------------------------------------------------------------------------------------- # Find GTK-server configfile first if [[ -f gtk-server.cfg ]]; then CFG=gtk-server.cfg elif [[ -f /etc/gtk-server.cfg ]]; then CFG=/etc/gtk-server.cfg elif [[ -f /usr/local/etc/gtk-server.cfg ]]; then CFG=/usr/local/etc/gtk-server.cfg else echo "No GTK-server configfile found! Please install GTK-server..." exit 1 fi # Now create global functionnames from GTK API if [[ ! -f $HOME/.gtk4korn || $CFG -nt $HOME/.gtk4korn ]]; then print "# Embedded GTK functions for KornShell" > $HOME/.gtk4korn while read LINE do if [[ $LINE = +(FUNCTION_NAME*) && $LINE = +(*gtk_*|*gdk_*|*g_*|*glade_*) ]]; then TMP=${LINE#*= } print "function ${TMP%%,*}" >> $HOME/.gtk4korn print "{\nprint -p ${TMP%%,*} \$@" >> $HOME/.gtk4korn print "red -p GTK\n}" >> $HOME/.gtk4korn fi done < $CFG fi # Declare global variables typeset GTK NULL="NULL" unset CFG PIPE LINE # Assignment function function define { $2 $3 $4 $5 $6 $7 $8 $9; eval $1="$GTK"; } # Wait for user read VAR?"Press to see the demo..." #------------------------------------------------------------------------------------------------- # Demo on how it works after integration #------------------------------------------------------------------------------------------------- # Include the generated '.gtk4korn'-file in the shellscript to use embedded GTK functions . $HOME/.gtk4korn # Start GTK-server gtk-server -stdin -log=$0.log |& # Define GUI gtk_init "NULL NULL" define WINDOW gtk_window_new 0 gtk_window_set_title $WINDOW "'This is a title'" gtk_window_set_position $WINDOW 1 define TABLE gtk_table_new 10 10 1 gtk_container_add $WINDOW $TABLE define BUTTON gtk_button_new_with_label "'Click here!'" gtk_table_attach_defaults $TABLE $BUTTON 5 9 7 9 define CHECK gtk_check_button_new_with_label "'Check this \n out!'" gtk_table_attach_defaults $TABLE $CHECK 1 6 1 2 define ENTRY gtk_entry_new gtk_table_attach_defaults $TABLE $ENTRY 1 6 3 4 gtk_widget_show_all $WINDOW # Initialize variables EVENT=0 # Mainloop while [[ $EVENT != $BUTTON && $EVENT != $WINDOW ]] do define EVENT gtk_server_callback "wait" if [[ $EVENT == $ENTRY ]] then define TXT gtk_entry_get_text $ENTRY print $TXT fi done # Exit GTK gtk_server_exit