⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 converter.bash

📁 gtk_server的源代码
💻 BASH
字号:
#!/bin/bash## HEX/DEC/BIN converter - PvE, Oct. 10, 2008##----------------------------------------------------------- Setup embedded GTK# Pipe filename must be unique for your applicationPIPE="/tmp/gtk.bash.\$$"# Find GTK-server configfile firstif [[ -f gtk-server.cfg ]]; then    CFG=gtk-server.cfgelif [[ -f /etc/gtk-server.cfg ]]; then    CFG=/etc/gtk-server.cfgelif [[ -f /usr/local/etc/gtk-server.cfg ]]; then    CFG=/usr/local/etc/gtk-server.cfgelse    echo "No GTK-server configfile found! Please install GTK-server..."    exit 1fi# Now create global functionnames from GTK APIif [[ ! -f $HOME/.gtk4bash || $CFG -nt $HOME/.gtk4bash ]]; then    echo "#!/bin/bash" > $HOME/.gtk4bash    echo "gtk-server -fifo=$PIPE &" >> $HOME/.gtk4bash    echo "while [ ! -p $PIPE ]; do continue; done" >> $HOME/.gtk4bash    while read LINE    do	if [[ $LINE = FUNCTION_NAME* ]]; then	    LINE=${LINE#*= }	    printf "\nfunction ${LINE%%,*}\n" >> $HOME/.gtk4bash	    printf "{\n/bin/echo ${LINE%%,*} \$@ > $PIPE" >> $HOME/.gtk4bash	    printf "\nread GTK < $PIPE\n}\n" >> $HOME/.gtk4bash	fi    done < $CFG    printf "\nfunction gtk()\n{\necho \$1 > $PIPE; read GTK < $PIPE;\n}\n" >> $HOME/.gtk4bashfi# Declare global variablesdeclare GTK NULL="NULL"unset CFG PIPE LINE# Include the generated file to use embedded GTK functions. ${HOME}/.gtk4bash#---------------------------------------------------------- Global inits# GTK-server must go after an error in the scripttrap 'echo "gtk_server_exit" > $PIPE' ERR# Assignment functionfunction define() { $2 $3 $4 $5 $6 $7 $8 $9; eval $1="$GTK"; }#---------------------------------------------------------- GUI realization# Save my directoryMYDIR=${0%/*}# Initialize libsgtk_initglade_init# Get GUI definitiondefine XML glade_xml_new "$MYDIR/converter.glade" $NULL $NULLglade_xml_signal_autoconnect $XML# Get main window ID and connect signalglade_xml_get_widget $XML "window"gtk_server_connect "$GTK delete-event window"# Get button ID's and connect signalsglade_xml_get_widget $XML "button0"gtk_server_connect "$GTK clicked button0"glade_xml_get_widget $XML "button1"gtk_server_connect "$GTK clicked button1"define button2 glade_xml_get_widget $XML "button2"gtk_server_connect "$GTK clicked button2"define button3 glade_xml_get_widget $XML "button3"gtk_server_connect "$GTK clicked button3"define button4 glade_xml_get_widget $XML "button4"gtk_server_connect "$GTK clicked button4"define button5 glade_xml_get_widget $XML "button5"gtk_server_connect "$GTK clicked button5"define button6 glade_xml_get_widget $XML "button6"gtk_server_connect "$GTK clicked button6"define button7 glade_xml_get_widget $XML "button7"gtk_server_connect "$GTK clicked button7"define button8 glade_xml_get_widget $XML "button8"gtk_server_connect "$GTK clicked button8"define button9 glade_xml_get_widget $XML "button9"gtk_server_connect "$GTK clicked button9"define buttonA glade_xml_get_widget $XML "buttonA"gtk_server_connect "$buttonA clicked buttonA"define buttonB glade_xml_get_widget $XML "buttonB"gtk_server_connect "$buttonB clicked buttonB"define buttonC glade_xml_get_widget $XML "buttonC"gtk_server_connect "$buttonC clicked buttonC"define buttonD glade_xml_get_widget $XML "buttonD"gtk_server_connect "$buttonD clicked buttonD"define buttonE glade_xml_get_widget $XML "buttonE"gtk_server_connect "$buttonE clicked buttonE"define buttonF glade_xml_get_widget $XML "buttonF"gtk_server_connect "$buttonF clicked buttonF"# Converter buttonsglade_xml_get_widget $XML "buttonHex"gtk_server_connect "$GTK clicked buttonHex"glade_xml_get_widget $XML "buttonDec"gtk_server_connect "$GTK clicked buttonDec"glade_xml_get_widget $XML "buttonClr"gtk_server_connect "$GTK clicked buttonClr"glade_xml_get_widget $XML "buttonBin"gtk_server_connect "$GTK clicked buttonBin"# Get entry IDdefine ENTRY glade_xml_get_widget $XML "entry"# Setup printf scanf for HEX conversiongtk_server_define "snprintf NONE INT 4 POINTER INT STRING INT"gtk_server_define "sscanf NONE NONE 3 STRING STRING PTR_INT"#---------------------------------------------------------- Init variables# Initialize MODE: 0=DEC 1=HEX 2=BINMODE=0gtk_widget_set_sensitive $buttonA 0gtk_widget_set_sensitive $buttonB 0gtk_widget_set_sensitive $buttonC 0gtk_widget_set_sensitive $buttonD 0gtk_widget_set_sensitive $buttonE 0gtk_widget_set_sensitive $buttonF 0# Default value = 0NUMBER="0"# Claim memorydefine BUFFER g_malloc 256#---------------------------------------------------------- Functions# Define action when 0 1 2 3 4 5 6 7 8 9 A B C D E F is pressed; requires argumentfunction number(){define NUMBER gtk_entry_get_text $ENTRYif [[ $NUMBER = "0" ]]then    NUMBER=$1else    NUMBER="$NUMBER$1"figtk_server_redefine "gtk_entry_set_text NONE NONE 2 WIDGET STRING"gtk_entry_set_text $ENTRY $NUMBER}#---------------------------------------------------------- Mainloopuntil [[ $EVENT = "window" ]]do    define EVENT gtk_server_callback "wait"    case $EVENT in	"button0")	    number 0;;	"button1")	    number 1;;	"button2")	    number 2;;	"button3")	    number 3;;	"button4")	    number 4;;	"button5")	    number 5;;	"button6")	    number 6;;	"button7")	    number 7;;	"button8")	    number 8;;	"button9")	    number 9;;	"buttonA")	    number "A";;	"buttonB")	    number "B";;	"buttonC")	    number "C";;	"buttonD")	    number "D";;	"buttonE")	    number "E";;	"buttonF")	    number "F";;	"buttonClr")	    gtk_server_redefine "gtk_entry_set_text NONE NONE 2 WIDGET STRING"	    gtk_entry_set_text $ENTRY "0";;	"buttonBin")	    if [[ $MODE -eq 0 || $MODE -eq 1 ]]	    then		gtk_widget_set_sensitive $button2 0		gtk_widget_set_sensitive $button3 0		gtk_widget_set_sensitive $button4 0		gtk_widget_set_sensitive $button5 0		gtk_widget_set_sensitive $button6 0		gtk_widget_set_sensitive $button7 0		gtk_widget_set_sensitive $button8 0		gtk_widget_set_sensitive $button9 0		gtk_widget_set_sensitive $buttonA 0		gtk_widget_set_sensitive $buttonB 0		gtk_widget_set_sensitive $buttonC 0		gtk_widget_set_sensitive $buttonD 0		gtk_widget_set_sensitive $buttonE 0		gtk_widget_set_sensitive $buttonF 0		RESULT=""		define NUMBER gtk_entry_get_text $ENTRY		# Now create binary string		if [[ ${#NUMBER} -gt 0 ]]		then		    # Convert to decimal if hex		    if [[ $MODE -eq 1 ]]		    then			((NUMBER=(16#$NUMBER)))		    fi		    # Calculate digits		    until [[ $NUMBER -eq 0 ]]		    do			((BIT=$NUMBER&1))			if [[ $BIT -eq 1 ]]			then			    RESULT="1$RESULT"			else			    RESULT="0$RESULT"			fi			((NUMBER>>=1))		    done		    gtk_server_redefine "gtk_entry_set_text NONE NONE 2 WIDGET STRING"		    gtk_entry_set_text $ENTRY $RESULT		fi		MODE=2	    fi;;	"buttonHex")	    if [[ $MODE -eq 0 || $MODE -eq 2 ]]	    then		gtk_widget_set_sensitive $button2 1		gtk_widget_set_sensitive $button3 1		gtk_widget_set_sensitive $button4 1		gtk_widget_set_sensitive $button5 1		gtk_widget_set_sensitive $button6 1		gtk_widget_set_sensitive $button7 1		gtk_widget_set_sensitive $button8 1		gtk_widget_set_sensitive $button9 1		gtk_widget_set_sensitive $buttonA 1		gtk_widget_set_sensitive $buttonB 1		gtk_widget_set_sensitive $buttonC 1		gtk_widget_set_sensitive $buttonD 1		gtk_widget_set_sensitive $buttonE 1		gtk_widget_set_sensitive $buttonF 1		RESULT=0		gtk_server_redefine "gtk_entry_set_text NONE NONE 2 WIDGET POINTER"		define NUMBER gtk_entry_get_text $ENTRY		# Now convert		if [[ ${#NUMBER} -gt 0 ]]		then		    # If binary, convert to decimal first		    if [[ $MODE -eq 2 ]]		    then			LEN=0			until [[ $LEN -ge ${#NUMBER} ]]			do			    ((POS=${#NUMBER}-$LEN-1))			    if [[ ${NUMBER:$POS:1} = "1" ]]			    then				((RESULT+=2**$LEN))			    fi			    ((LEN+=1))			done			NUMBER=$RESULT		    fi		    # Convert to HEX		    gtk "snprintf $BUFFER 256 %X $NUMBER"		    gtk_entry_set_text $ENTRY $BUFFER		fi		MODE=1	    fi;;	"buttonDec")	    if [[ $MODE -eq 1 || $MODE -eq 2 ]]	    then		gtk_widget_set_sensitive $button2 1		gtk_widget_set_sensitive $button3 1		gtk_widget_set_sensitive $button4 1		gtk_widget_set_sensitive $button5 1		gtk_widget_set_sensitive $button6 1		gtk_widget_set_sensitive $button7 1		gtk_widget_set_sensitive $button8 1		gtk_widget_set_sensitive $button9 1		gtk_widget_set_sensitive $buttonA 0		gtk_widget_set_sensitive $buttonB 0		gtk_widget_set_sensitive $buttonC 0		gtk_widget_set_sensitive $buttonD 0		gtk_widget_set_sensitive $buttonE 0		gtk_widget_set_sensitive $buttonF 0		RESULT=0		gtk_server_redefine "gtk_entry_set_text NONE NONE 2 WIDGET STRING"		define NUMBER gtk_entry_get_text $ENTRY		if [[ ${#NUMBER} -gt 0 ]]		then		    # If binary, convert to decimal		    if [[ $MODE -eq 2 ]]		    then			LEN=0			until [[ $LEN -ge ${#NUMBER} ]]			do			    ((POS=${#NUMBER}-$LEN-1))			    if [[ ${NUMBER:$POS:1} = "1" ]]			    then				((RESULT+=2**$LEN))			    fi			    ((LEN+=1))			done			gtk_entry_set_text $ENTRY $RESULT		    # If hex, convert to decimal		    elif [[ $MODE -eq 1 ]]		    then			gtk "sscanf $NUMBER %x 1"			gtk_entry_set_text $ENTRY $GTK		    fi		fi		MODE=0	    fi;;    esacdone# Exit GTKgtk_server_exit

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -