#!/usr/X11R6/bin/wish -f
#####################################################################
# Diptimer Version 1.3
# laste change: 24.02.96
#####################################################################

####################################################################
# setzen der Default-Werte
####################################################################

set hour 00
set min 0
set sec 0

set time 00:00:00
set einheiten 0

set zeit_text "Zeit:"
set einheiten_text "Einheiten:"
set status "No Connect"

set Net_getstatuscommand(TEST) "ls /tmp | grep diptimer.test"
set Net_getstatuscommand(LOCAL) "/sbin/ifconfig | grep lo"
set Net_getstatuscommand(SLIP) "/sbin/ifconfig | grep sl0"
set Net_getstatuscommand(PPP) "/sbin/ifconfig | grep ppp0"
set Net_getstatuscommand(TERM) "/sbin/ifconfig | grep term0"

set offline 1
set online 0

set OUTFILE /tmp/diptimer.dat


# bereich: C(ity), R50 (Region 50), R200 (Region 200), F(ern)
set bereich C

####################################################################
# Einlesen der Commandline-Options
####################################################################

if { $argc != 3 } {
    puts "\nWrong number of parameters!\n"
    puts "diptimer <verfahren> <anwahlzeit> <tarifbereich>\n"
    puts "verfahren: Das Verfahren mit dem die Verbindung aufgebaut\n"
    puts "           wird (SLIP,PPP,TERM,TEST)\n"
    puts "tarifbereich: C, R50, R200 oder F; default: C\n"
    puts "           C(ity), R50 (Region 50), R200 (Region 200), F(ern)\n"
    puts "anwahlzeit: Zeit bis die Verbindung steht\n"
    exit -1
}

if { $argc == 3 } {
    scan $argv "%s %d %s" verf a_sec bereich
    set verf [ string toupper $verf ]
}

# if { $a_sec > 30 } {
#   set a_sec 30
# }

#### Window-options #####
wm title . "Dip-Timer"
wm geometry . +587+-1


#### Zeit pro Einheit ermitteln ####
set day [ exec date +%a ]
set h [ exec date +%H ]

# wird benoetigt falls h= 01,02,...,09
scan "$h" "%d" h



if { $bereich == "C" } {

# City:
   if { ( $day != "Sat" ) && ( $day != "Sun" ) } {

   ## Montag - Freitag:
	if { $h < 5 } {
		set zeit_einheit 240
puts $h
	} elseif { ( $h >= 5 ) && ( $h < 9 ) } {
		set zeit_einheit 150
	} elseif { ( $h >= 9 ) && ( $h < 18 ) } {
                set zeit_einheit 90
        } elseif { ( $h >= 18 ) && ( $h < 21 ) } {
                set zeit_einheit 150
        } elseif { $h >= 21 } {
                set zeit_einheit 240
        }
   } else {

   ## Samstag - Sonntag:
        if { $h < 5 } {
                set zeit_einheit 240
        } elseif { ( $h >= 5 ) && ( $h < 21 ) } {
                set zeit_einheit 150
        } elseif { $h >= 21 } {
                set zeit_einheit 240
        }
   }

} elseif { $bereich == "R50" } {

# Region 50:
   if { ( $day != "Sat" ) && ( $day != "Sun" ) } {

   ## Montag - Freitag:
        if { $h < 2 } {
                set zeit_einheit 60
        } elseif { ( $h >= 2 ) && ( $h < 5 ) } {
                set zeit_einheit 120
        } elseif { ( $h >= 5 ) && ( $h < 9 ) } {
                set zeit_einheit 45
        } elseif { ( $h >= 9 ) && ( $h < 12 ) } {
                set zeit_einheit 26
        } elseif { ( $h >= 12 ) && ( $h < 18 ) } {
                set zeit_einheit 30
        } elseif { ( $h >= 18 ) && ( $h < 21 ) } {
                set zeit_einheit 45
        } elseif { $h >= 21 } {
                set zeit_einheit 60
        }
   } else {

   ## Samstag - Sonntag:
        if { $h < 5 } {
                set zeit_einheit 60
        } elseif { ( $h >= 5 ) && ( $h < 21 ) } {
                set zeit_einheit 45
        } elseif { $h >= 21 } {
                set zeit_einheit 60
        }
   }

} elseif { $bereich == "R200" } {

# Region 200:
   if { ( $day != "Sat" ) && ( $day != "Sun" ) } {

   ## Montag - Freitag:
        if { $h < 2 } {
                set zeit_einheit 30
        } elseif { ( $h >= 2 ) && ( $h < 5 ) } {
                set zeit_einheit 120
        } elseif { ( $h >= 5 ) && ( $h < 9 ) } {
                set zeit_einheit 21.5
        } elseif { ( $h >= 9 ) && ( $h < 12 ) } {
                set zeit_einheit 12
        } elseif { ( $h >= 12 ) && ( $h < 18 ) } {
                set zeit_einheit 13.5
        } elseif { ( $h >= 18 ) && ( $h < 21 ) } {
                set zeit_einheit 21.5
        } elseif { $h >= 21 } {
                set zeit_einheit 30
        }
   } else {

   ## Samstag - Sonntag:
        if { $h < 5 } {
                set zeit_einheit 30
        } elseif { ( $h >= 5 ) && ( $h < 21 ) } {
                set zeit_einheit 21.5
        } elseif { $h >= 21 } {
                set zeit_einheit 30
        }
   }

} elseif { $bereich == "F" } {

# Fern:
   if { ( $day != "Sat" ) && ( $day != "Sun" ) } {

   ## Montag - Freitag:
        if { $h < 2 } {
                set zeit_einheit 25
        } elseif { ( $h >= 2 ) && ( $h < 5 ) } {
                set zeit_einheit 120
        } elseif { ( $h >= 5 ) && ( $h < 9 ) } {
                set zeit_einheit 20
        } elseif { ( $h >= 9 ) && ( $h < 12 ) } {
                set zeit_einheit 11.5
        } elseif { ( $h >= 12 ) && ( $h < 18 ) } {
                set zeit_einheit 12.5
        } elseif { ( $h >= 18 ) && ( $h < 21 ) } {
                set zeit_einheit 20
        } elseif { $h >= 21 } {
                set zeit_einheit 25
        }
   } else {

   ## Samstag - Sonntag:
        if { $h < 5 } {
                set zeit_einheit 25
        } elseif { ( $h >= 5 ) && ( $h < 21 ) } {
                set zeit_einheit 20
        } elseif { $h >= 21 } {
                set zeit_einheit 25
        }
   }

}

#### 

frame .zeile0
label .zeile0.text -textvariable status -width 20
pack .zeile0.text
pack .zeile0

while { [catch {eval exec $Net_getstatuscommand($verf) } ] == $offline } {
	after 1000
	set status "No Connect"
	update idletasks
}

# Startzeit ermitteln

set STARTDATUM [ exec date ]
scan [ exec date +%H:%M:%S ] "%d:%d:%d" s_hour s_min s_sec

# Startzeit - anwahlzeit
incr s_sec -$a_sec
if { $s_sec < 0 } {
    incr s_sec 60
    incr s_min -1
    if { $s_min < 0 } {
	incr s_min 60
	incr s_hour -1
	if { $s_hour < 0 } {
	    set s_hour 23
	}
    }
}

# Verbindungsfenster aufbauen

frame .zeile1
label .zeile1.text_time -textvariable zeit_text -width 10 -anchor w
label .zeile1.time -textvariable time -width 10 -relief raised
pack .zeile1.text_time .zeile1.time -side left 

frame .zeile2
label .zeile2.text_rest -textvariable rest_text -width 10 -anchor w
label .zeile2.rest -textvariable rest -width 10 -relief raised
pack .zeile2.text_rest .zeile2.rest -side left


frame .zeile3
label .zeile3.text_einheiten -textvariable einheiten_text -width 10 -anchor w
label .zeile3.einheiten -textvariable einheiten -width 10 -relief raised
pack .zeile3.text_einheiten .zeile3.einheiten -side left

pack .zeile1 .zeile2 .zeile3


while { [catch {eval exec $Net_getstatuscommand($verf) } ] == $online } {

#    set time [ format "%02u:%02u:%02u" $hour $min $sec ]
#    update idletasks

    after 500
    scan [ exec date +%H:%M:%S ] "%d:%d:%d" t_hour t_min t_sec
    
    set sec [ expr $t_sec - $s_sec ]
    set min [ expr $t_min - $s_min ]
    set hour [ expr $t_hour - $s_hour ]

    if { $sec < 0 } {
	incr sec 60
	incr min -1
    }
    if { $min < 0 } {
	incr min 60
	incr hour -1
    }
    if { $hour < 0 } {
	set hour 23
    }

    
    set all_sec [ expr $sec+ 60 * $min + 60 * 60 *$hour ]
    set einheiten [ expr int ( [ expr ceil ( [ expr double ($all_sec) \
	    / $zeit_einheit ] ) ] ) ]

    set restallsec [ expr - ( $all_sec - ( ( $einheiten ) * $zeit_einheit ) ) ]
    set restmin [ expr int ( [ expr $restallsec / 60 ] ) ]
    set restsec [ expr int ( [ expr $restallsec - ( $restmin * 60 ) ] ) ]

    set rest [ format "%02u:%02u" $restmin $restsec ]

    set zeit_text "Zeit:"
    set einheiten_text "Einheiten:"
    set rest_text "Resteinheit:"
    set status "Connect"

    set time [ format "%02u:%02u:%02u" $hour $min $sec ]
    update idletasks
}


set status "No Connect"

# Werte in rausschreiben
set f_id [ open $OUTFILE a+ ]

puts $f_id ""
puts $f_id "$STARTDATUM"
puts $f_id "Parameter: $argv"
puts $f_id "Zeit: $time"
puts $f_id "Resteinheit: $rest"
puts $f_id "Einheiten: $einheiten"

close $f_id

frame .last
button .last.exit -command { exit } -text "exit"
pack .last.exit -padx 2m -pady 2m -expand 1 -fill x

pack .last

