#!/usr/bin/wish
set lockfile /var/lock/LCK..ttyS1
set mgettypid /var/run/mg-pid.ttyS1
set delay 500
option add *Background yellow widgetDefault
# These are system programs, often started from special account, so we
# are not interesting in the name of invoking user
array set systemprog {
  mgetty mgetty 
  pppd "PPP link"
  ifcico "FIDO link" 
  uucico "UUCP link" 
}  

if [catch {package require Tclx}] {
   proc kill {signal pid} {
       regsub {^SIG} $signal {} signal
       exec /bin/kill -$signal $pid
   }

}
wm overrideredirect . y
rename send {}
set image [image create photo -data {
R0lGODlhMAAwAKUAAAAAAHGBcVmBcVlpYSAwIHFxaVCBhZ2hnUhZUAgICNbi3iAgMDBQUEBp
YSAwMBAQEFBAUJ2utkAwMI2NlUBAMAAQEHGBjb7KxoWhnRAQIEAwQFBhYcbOzjBISBAYEAAQ
AEBAQJWVlWFxhTAwIGGBhebi5hggGGFpcUBAUBAAEK6ytjAgMO7q7kBQUCA4OIWBcTAwMGGB
lTBAMBgoIFBhcWmVjYVxhVBxcf///6XGxkhIQFlZWUBQYTAwQJ2hpTBAQCH5BAEAADgALAAA
AAAwADAAAAb+QJxwSCwaj8ikcslsOp/QKPPxswWs2KvOJmWurr5LzncIhchmsi9yufgCp1EX
95uo3JYGT4/g/X4uPQ6Afx0MKA0iNWwXGA9NJiEqEyc0DTstKD8LBBkPKR8pAKCioAuDHS0N
GwInPwBLFSEbMC2WfoImHgkAvb6/vR4OLh0IGw0OJigeSzo3D70OLTowHhkEvT8t2zzbLTwu
MwC1KAg0z6MyKLBJEzzQwSgzGS68wPe9FRY3NzULvgtcZDACb8aFFvCiLWghyleSX4pE/HrQ
gxmRGT6gIfDBw8MvEy4c4Bvp60MOcb4euPhhYgi0AxMA1JjQwmPJdThIkmyxwMP+g08eYPzo
MQQhAB8/ItTg4SDBB18idY7EsWAGqkA/UDAYsiPHTw9KEaAg4FPYK6loAXjwsECdEGgFVDzi
UOOEng6cHjxNy7eXkB3QIMghQcNBhr0ARmigAEGGBBgaRqyQsYKAhhkzZPj8+SBBCnvAhCDI
AYKdU2A/SmCoUcNCjRg5XNRQ4SAGbRK0YXTo8CfqPRzQwLLDNzoGCREnRGxY4WCDgwUbOKF4
rg6Eph5TdVwQOQTfGhLGRQigUeNYjEskusXogIL9nx/QjgDYwWFAd79DfPiwcFyACBLbWRAB
DCREQIAFKiwAgyYg/KABL0ds8BMESnAwAQkkGCBCA4X+uUCLA4VJcwoI7v0hzhE2cGADDElQ
oEAN/4lwAw0bWLDBDiRgEkMmJGjCoAwaYCMfFRNUgMQGHMSgoX8NwOYAbrVF4MBsDvTw3h8w
4EeEDRRooGURE1zQn4w7fOgcdNIR0FaDGsjQAwyiGLGBFRQiwUEE4fk3I2FN6lHDNjEc8l4P
blbADhG+zIBECgr4MOae28UQwQq4HRjBiEDKAEM1hw7xwwk+hNCSES2wgEGG4t3AoQMOINMc
qy2wauUfhMKAUhEa7IBSp73Y8KJ/yd1wwgY07mBsCwhkogMKILSpwaa2fvmWCSdcMIADD0T7
QAgcYCCChsLOeEMOKpBrrgr07TVopSAwEBBnESYccMADA6gAgxUADFCCAjnoecKMG5zAwsAE
D1wAm25C24IM0gIHgAk+YNCgDQCAoEAJF0SAwYU3DEDjMTv04Y0mf6AwwAknhFADDU8ZAUAC
VhzQZQAAnHBxBNO8kMXOV/S8cwHJ1kDCP0hkA0C2AExQAgc+dGBoXxM5wMMi3CnxiwVLW+BA
Q1AD1IEIGOzQ6UMAYFBCDjf80/UvBPxww2pjF122ah2t/YsHMmxAggVxywcABN0ykIHdvpjQ
QwMWbOXE0Qg0gAJidgtTThSE49NyF5X/NkdOmfe9+eeghy766KSXbvrpqBsRBAA7
}]
button .b -image $image  -command "do_something"
label  .l -text "Phone free" -font 6x10
pack .b .l -side top -expand y -fill both 
after idle check_phone

proc check_phone {} {
  global lockfile systemprog delay 
  if [catch {
  if [file exists $lockfile] {
    set f [open $lockfile]
    gets $f line 
    close $f
    set pid [string trimleft [lindex  $line 0] 0]
    set command "kill_process $pid"
    if [catch {set f [open "/proc/$pid/cmdline"]}] {
      set message "Stale lock"
      set command {}
    } else {  
    set cmdname [lindex [split [read $f] "\0"] 0]
    close $f
    if [regexp {^-} $cmdname] {
      set message "User [file attributes /proc/$pid -owner]"
      
    } else {
      set message [file tail $cmdname]
      if {![info exists systemprog($message)]} {
        append message "\n([file attributes /proc/$pid -owner])"
      }	else {
        set message $systemprog($message)
      } 	
    }  
  }
  } else {
      set message "Free" 
      set command "auto_answer"
  }
 
  .l configure -text "$message"
  .b configure -command $command
  } msg ] {
    global argv0
    puts stderr "$argv0: $msg"
  }  
  after $delay check_phone
}

proc auto_answer {} {
  global mgettypid
  set f [open $mgettypid]
  gets $f pid
  close $f
  kill SIGUSR1 $pid
}  
  
proc kill_process {pid} {
  if {[tk_messageBox -title Configrm -message \
        "Really kill [.l cget -text]?" -type yesno] == "yes" } {
	  kill SIGHUP $pid
  }
}  
  

