#!/usr/X11R6/bin/wish -f
#
#   isdnbar - tcl/tk script to view ISDN activities without
#             too much CPU-use :-)
#
#   Ver. 0.5
#
#   (c) 1997 F.Kalhammer (f.kalhammer@t-online.de)
#
#   This program may be used under the conditions of the 
#   GNU General Public Lizence.
#
######################################################################




#####################################################################
#
#  The configure part
#
#  You have to configure the following variables to fit 
#  with your installation. The most important settings are
#  the PROGPATH and LIBPATH variables.
#
#####################################################################

set PROGPATH /usr/local/bin
set LIBPATH  /usr/local/lib/isdnbar

set FILE_TO_TAIL /var/log/messages

set font -adobe-helvetica-medium-r-normal-*-11-80-*-*-*-*-iso8859-1



######### End of configure-part. Nothing to change below ############




proc show_logfile {} {

  global xpid
  global FILE_TO_TAIL

  if {$xpid == 0} {
    set xpid [exec xterm -T "$FILE_TO_TAIL" -e tail -f $FILE_TO_TAIL &]
  } else {
    set erg [catch {exec kill -9 $xpid}]
    if {$erg != 0} {
      set xpid [exec xterm -T "$FILE_TO_TAIL" -e tail -f $FILE_TO_TAIL &]
    } else {
      set xpid 0
    }
  }
}


proc ausgang {} {

  global WATCH_PID

  exec kill -9 $WATCH_PID
  exit 0
}



proc parse_input {} {
  
  global idmap
  global chmap
  global usage
  global phone  
  
  
  global I
  global C
  global U
  global P  
  global D
  foreach i {0 1} {
    set I($i) [lindex $idmap [expr $i+1]]
    set C($i) [lindex $chmap [expr $i+1]]
    set U($i) [lindex $usage [expr $i+1]]
    set X($i) $U($i)
    set P($i) [format "%15s" [lindex $phone [expr $i+1]]]
    if {$X($i) >= 128} {set X($i) [expr $X($i) -128]}
    if {$X($i) >= 64} {set X($i) [expr $X($i) -64] }
    switch $X($i) {
      0 {set D($i) "None "}
      1 {set D($i) "Raw  "}
      2 {set D($i) "Modem"}
      3 {set D($i) "Net  "}
      4 {set D($i) "Voice"}
    }
  }
}



proc update {} {
  
  global idmap
  global chmap
  global usage
  global phone  
  
  global I
  global C
  global U
  global P  
  global D

  global isdninfo

    set isdninfo [open /dev/isdninfo "r"]
    gets $isdninfo idmap
    gets $isdninfo chmap
    gets $isdninfo drmap
    gets $isdninfo usage
    gets $isdninfo flags
    gets $isdninfo phone
    close $isdninfo

      parse_input
      
      foreach i {0 1} {
        if {$U($i) == 0} {
          .isdnlog.zeile${i}.o configure -image ledg 
        } elseif {$U($i) >= 128} {
 	  .isdnlog.zeile${i}.o configure -image ledr
	} else {
          .isdnlog.zeile${i}.o configure -image ledy 
        }
        .isdnlog.zeile${i}.num.n configure -text $P($i) 
        .isdnlog.zeile${i}.use.u configure -text $D($i)   
        
      }
}






#####################################################################
#
#  The main part
#
#####################################################################


set x 1
set xpid 0

set WATCH_PID [exec ${PROGPATH}/isdnwatch &]


set isdninfo [open /dev/isdninfo "r"]
gets $isdninfo idmap
gets $isdninfo chmap
gets $isdninfo drmap
gets $isdninfo usage
gets $isdninfo flags
gets $isdninfo phone
close $isdninfo

parse_input



image create photo ledg -file ${LIBPATH}/led_gruen.gif
image create photo ledr -file ${LIBPATH}/led_rot.gif
image create photo ledy -file ${LIBPATH}/led_gelb.gif
image create photo exitgif -file ${LIBPATH}/exit.gif
image create photo filegif -file ${LIBPATH}/file.gif

frame .btn -relief groove -borderwidth 2

button .btn.b1 -image filegif -command show_logfile
button .btn.b2 -image exitgif -command ausgang

#pack .btn -side right



frame .isdnlog -relief groove -borderwidth 2
pack .isdnlog .btn -padx 1m -pady 1m -side left
pack .btn.b1 .btn.b2 -side left -padx 2m -pady 1m

foreach num {0 1} {

frame .isdnlog.zeile${num} -relief flat 

frame .isdnlog.zeile${num}.num -width 70m -relief ridge -borderwidth 2 
frame .isdnlog.zeile${num}.use -width 70m -relief ridge -borderwidth 2 

label .isdnlog.zeile${num}.ch -text "Ch:$num  -  $I($num)" -font $font 
label .isdnlog.zeile${num}.o -image ledg -bd 1 -relief flat
label .isdnlog.zeile${num}.num.n -text $P($num) -font $font -width 10 -anchor w
label .isdnlog.zeile${num}.use.u -text $D($num) -font $font -width 5 -anchor w



pack .isdnlog.zeile$num  -side top -padx 1m -pady 1m
pack .isdnlog.zeile${num}.ch .isdnlog.zeile${num}.o\
     .isdnlog.zeile${num}.num .isdnlog.zeile${num}.use -side left -padx 2m
pack .isdnlog.zeile${num}.num.n .isdnlog.zeile${num}.use.u -side left \
      -fill both -padx 3m 
}

