#!/usr/bin/wish -f
# runpro is global for our process file handle
load /usr/lib/libtclx.so
set runpro -1
proc fandie {cmdi} {
	global runpro
	after cancel after#1
	if {$runpro != -1} {
		kill [pid $runpro]
		wait
	}
	puts "fandie: $cmdi"
	system "$cmdi &"
	exit
}

proc runmain {cmdi} {
	global runpro
	after cancel after#1
	if {$runpro != -1} {
		kill [pid $runpro]
		wait
	}
	set runpro [open "|$cmdi"]
	fconfigure $runpro -blocking 1
	puts "runmain: $cmdi"
}

set DefQ -1
append prefs $env(HOME) /.xil
if {[file readable $prefs]} {
	set file [open $prefs]
} elseif {[file readable /etc/X11/app-defaults/Xil]} {
	set file [open /etc/X11/app-defaults/Xil]
}
set ai 0
set cdown -1
for {set readline [gets $file]} {[eof $file] != 1} {set readline [gets $file]} {
	if {1 == [string match default* $readline]} {
		set default $readline
		for {} {":" != [string index $default 0]} {} {
			set default [string trimleft $default [string index $default 0]]
		}
		if {":" == [string index $default 0]} {
			set default [string trimleft $default :]
		}
		if {"&" == [string index $default [expr [string length $default] - 1]]} {
			set default [string trimright $default &]
			set DefQ true
		} else {
			set DefQ false
		}
		puts "$DefQ $default"
	}
	if {1 == [string match timer:* $readline]} {
		set cdown $readline
		for {} {":" != [string index $cdown 0]} {} {
			set cdown [string trimleft $cdown [string index $cdown 0]]
		}
		if {":" == [string index $cdown 0]} {
			set cdown [string trimleft $cdown :]
		}
		puts $cdown
	}
	if {0 == [string first + $readline]} {
		set cmdl [string trimleft $readline +]
		set desc [string trimright $cmdl \"]
		for {set ind [expr [string length $desc] - 1]} {"\"" != [string index $desc $ind]} {set ind [expr $ind - 1]} {
			set desc [string trimright $desc [string index $desc $ind]]
		}
		if {"\"" == [string index $desc $ind]} {
			set desc [string trimright $desc \"]
		}
		set over 0
		for {set runl $cmdl} {"\"" != [string index $runl 0]} {} {
			set runl [string trimleft $runl [string index $runl 0]]
		}
		if {"\"" == [string index $runl 0]} {
			set runl [string trimleft $runl \"]
		}
		if {"\"" == [string index $runl [expr [string length $runl] - 1]]} {
			set runl [string trimright $runl \"]
		}
# At this point I have $runl as the cmd to exec and $desc as the button label
# as well as Xex to stay open or close.
		if {"&" == [string index $runl [expr [string length $runl] - 1]]} {
			set Xex true
			set runl [string trimright $runl &]
		} else {
			set Xex false
		}
		if {" " == [string index $runl [expr [string length $runl] - 1]]} {
			set runl [string trimright $runl " "]
		}
		if {$Xex == "true"} {
			button .progs($ai) -text $desc -command "fandie {$runl}"
		} else {
			button .progs($ai) -text $desc -command "runmain {$runl}"
		}
		pack .progs($ai) -fill x
		set randlist($ai) $runl
		set ai [expr $ai + 1]
	}
}
button .quit -text Quit -command exit
pack .quit -fill x
if {$cdown != -1} {
	if {$DefQ == "true"} {
		after $cdown "fandie {$default}"
	} else  {if {$DefQ == "false"} {
		after $cdown "runmain {$default}"
	} else {
		puts inrand
		set ai [expr [random $ai] - 1]
		after $cdown "runmain {$randlist($ai)}"
	}}
}
