# Hey, Emacs: wake up this is a -*- tcl -*- file!
# IMMD IV System XCeptrc file

# ... setzen Sie $doSystemLogin auf
#     0 wenn Sie keine Systemweite-Login-Prozedur haben wollen
#     1 wenn doch: In diesem Fall MUESSEN Sie in der Prozedure systemLogin()
#                  die entsprechenden Variablen $DxJId, $DxJNumber, $DxJSubId, 
#                  $DxJPassword auf die fuer Sie passenden Werte setzen
#

global doSystemLogin
global DxJ
global userName

set doSystemLogin 0

proc createPersonalizedLogin {} {
    global XCeptWantWindow
    global XCeptVersion
    global DxJ
    global userName

    set userName ""

    if ($XCeptWantWindow) {
	# ... sigh, we need to define this sucker now,
	#     let's do it interactively, okay? ...
	#
	
	regexp {uid=[0-9]+\(([a-z]+)\)} [exec id] dummy userName

	set DxJLoginId ""
	set DxJNumber "-"
	set DxJUserId "-"
	set DxJPassword ""
	
	# ... setup a new toplevel widget ...
	catch {destroy .welcome}
	toplevel .welcome -class Dialog
	wm title .welcome "Welcome to XCept $XCeptVersion ... and have a nice day 8=)"
	wm iconname .welcome Dialog

	frame .welcome.top -relief raised -bd 1
	pack .welcome.top -side top -fill both
	frame .welcome.mid -relief raised -bd 1
	pack .welcome.mid -side top -fill both
	frame .welcome.bot -relief raised -bd 1
	pack .welcome.bot -side top -fill both

	frame .welcome.mid.left 
	frame .welcome.mid.right
	pack .welcome.mid.left -in .welcome.mid -side left -fill x
	pack .welcome.mid.right -in .welcome.mid -side left -fill x
	
	message .welcome.msg -aspect 1000 -text "Willkommen zu $XCeptVersion,\n\
		der eXCeptionellen CEPT-Dekoder-Software fr Unix-Systeme!\n\
		Bitte tragen Sie Ihre Datex-J-Parameter ein:"
	pack .welcome.msg -in .welcome.top -side right -expand 1 \
		-fill both -padx 5m -pady 5m
	
	label .welcome.dxjloginidlabel -text "Anschlukennung:"
	entry .welcome.dxjloginidentry -width 12 \
		-textvariable DxJ(DxJLoginId) -relief sunken
	pack .welcome.dxjloginidlabel -in .welcome.mid.left \
		-side top -padx 5 -anchor w
	pack .welcome.dxjloginidentry -in .welcome.mid.right \
		-side top -padx 5 -anchor w
	
	label .welcome.dxjnumberlabel -text "Datex-J-Nummer:"
	entry .welcome.dxjnumberentry -width 14 \
		-textvariable DxJ(DxJNumber) -relief sunken
	pack .welcome.dxjnumberlabel -in .welcome.mid.left \
		-side top -padx 5 -anchor w
	pack .welcome.dxjnumberentry -in .welcome.mid.right \
		-side top -padx 5 -anchor w
	
	label .welcome.dxjuseridlabel -text "Mitbenutzer-Kennung:"
	entry .welcome.dxjuseridentry -width 4 \
		-textvariable DxJ(DxJUserId) -relief sunken
	pack .welcome.dxjuseridlabel -in .welcome.mid.left \
		-side top -padx 5 -anchor w
	pack .welcome.dxjuseridentry -in .welcome.mid.right \
		-side top -padx 5 -anchor w
	
	label .welcome.dxjpasswordlabel -text "Datex-J-Passwort:"
	entry .welcome.dxjpasswordentry -width 6 \
		-textvariable DxJ(DxJPassword) -relief sunken
	pack .welcome.dxjpasswordlabel \
		-in .welcome.mid.left -side top -padx 5 -anchor w
	pack .welcome.dxjpasswordentry \
		-in .welcome.mid.right -side top -padx 5 -anchor w
	
	button .welcome.accept -text "Okay, weiter" -command {
	    global DxJ
	    global userName

	    set date [exec date]
	    set xLFD [open ~/.xcept-login w 0700]
	    puts $xLFD "# Personalized XCept Login routine for $userName"
	    puts $xLFD "# ... created on $date"
	    puts $xLFD "# ... don't change"
	    puts $xLFD ""
	    puts $xLFD "proc personalLogin {} {"
	    puts $xLFD "    DxJlogin \"$DxJ(DxJLoginId)\" \"$DxJ(DxJNumber)\" \"$DxJ(DxJUserId)\" \"$DxJ(DxJPassword)\""
	    puts $xLFD "}"
	    puts $xLFD ""
	    puts $xLFD "# ... End of file ..."
	    close $xLFD
	    
	    destroy .welcome
	}
	button .welcome.abort -text "N, abbrechen" -command {
	    destroy .welcome
	}
	pack .welcome.accept .welcome.abort \
		-in .welcome.bot -side right -padx 5 -fill x
	
	# ... now wait for the .welcome window to disappear ...
	focus .welcome
	tkwait window .welcome
	focus .

	catch {
	    source ~/.xcept-login
	}
	return [llength [info procs personalLogin]]
    }
}

proc TryPersonalLogin {} {
    if {[llength [info procs personalLogin]]} {
	personalLogin
    } elseif {[file readable ~/.xcept-login]} {
	source ~/.xcept-login
	personalLogin
    } elseif {[createPersonalizedLogin]} {
	personalLogin
    } else {
	DxJlogin
    }
}

proc localLogin {} {
    global doSystemLogin

    if {!$doSystemLogin} {
	TryPersonalLogin
    } else {
	systemLogin
    }
}

# ... only if we are running with an X window open ...
if {$XCeptWantWindow} {

    # ... some hopefully useful keybindings ...
    bind all <KeyPress-Home> { xceptPage }
    bind all <KeyPress-Prior> { XCeptSend "\\*\\#" }
    bind all <KeyPress-Next> { xceptEnter }
    bind all <KeyPress-Delete> { XCeptSend "\\*\\*" }
    bind all <KeyPress-F12> { xceptPage "00" }
    bind all <KeyPress-Up> { xceptPage "03" }
    bind all <KeyPress-End> {
	DxJSaveAccountingData
	XCeptDisconnect
    }
    
    # ... the IMMD IV connect button ...
    newButton .btx login localLogin "Datex-J-Zugang & Seite *0#"
    
    # ... the DB timetable ...
    newButton .db db {
	localLogin
	xceptPage "258000"
	xceptEnter "12" 0
    } "DB Fahrplanauskunft"
	
    # ... the VGN timetable ...
    newButton .vgn vgn {
	localLogin
	xceptPage "20214850"
    } "VGN Fahrplanauskunft"
	    
    # ... the ETB service ...
    newButton .etb etb {
	localLogin
	xceptPage "etb"
	xceptEnter 11 0
    } "DeTeMedien Elektronisches TelefonBuch"
		
    # ... the ETV service ...
    newButton .etv etv {
	localLogin
	xceptPage "etv"
	xceptEnter 12 0
    } "TIV Elektronisches TelefonVerzeichnis"

    # ... Deutsche Bank Kontoauszug ...
    newButton .db-konto DeutscheBank {
	localLogin
	xceptPage "600001119"
    } "Deutsche Bank - Kontoauszug"

    # ... Noris Bank Kontoauszug ...
    #newButton .noris-konto noris {
    #	localLogin
    #	xceptPage "3030003"
    #} "Noris Bank"

    # ... Badische Beamtenbank ...
    newButton .bbbank bbbank {
	localLogin
	xceptPage "4004300125"
    } "Badische Beamtenbank eG - Startseite"
    
    # ... Spasskasse Erlangen ...
    newButton .sparkasse sparkasse {
	localLogin
	xceptPage "9585202"
    } "Spasskasse Erlangen - Konto"
}
