Hallo, ich habe mir vor langer Zeit mal isdnmonp an meine Beduerfnisse angepasst, so dass nicht nur gezeigt wird, ob und mit welchem Provider ich verbunden bin, sondern dass ich ueber Buttons auch waehlen und auflegen kann. Allerdings ist meine Konstruktion nicht sonderlich bedienerfreundlich, weil mir isdnmonp nicht so ganz klar ist. Bisher habe ich deshalb hier zu stehen: button .left.oben.dialz -text " T-Online " -width 9 -command {exec dialt} button .left.oben.dialt -text " MSN " -width 9 -command {exec dialmsn} button .right.oben.hangupz -text "X" -width 9 -command {exec dialt stop} button .right.oben.hangupt -text "X" -width 9 -command {exec dialmsn stop} D.h. ich muss immer genau wissen, mit wem ich die Verbindung aufgebaut hage, um auch die richtige abbauen zu koennen. Andernfalls gibt es eine Fehlermeldung, die ich zwar nach /dev/null umlenken koennte, aber dann verliere ich natuerlich auch sinnvolle Fehlermeldungen. Deshalb wuerde ich gerne nur noch einen Button zum Auflegen haben und ueber if...then abfragen, welche Verbindung getrennt werden soll. Wenn ich das Script richtig verstehe, wertet es /dev/isdninfo aus: "set infodev /dev/isdninfo" und nutzt dort die phone-Angabe: "if {$havetoread} { ... gets $f is(usage) gets $f is(flags) gets $f is(phone)}" Den Inhalt von phone moechte ich nun auslesen und zur Beendigung der Verbindung nutzen. Bloss bislang bin ich mit meinen Versuchen nicht weit gekommen. So etwas wie: if ( ${phone = 0192658 }); then dialt stop fi fuehrt zur Fehlermeldung "bad substitution" (das gleiche passiert auch, wenn ich das "phone" durch "f" ersetze. Fuer Tipps, wo mein Fehler liegt und wie ich das Problem besser angehen, waere ich deshalb sehr dankbar, Heinz. -- http://www.pahlke-online.de http://www.Pahlke-KunstWebDesign.de
On Wed, 17 Jul 2002 17:25:39 +0200 (CEST)
"Heinz W. Pahlke"
Hallo,
ich habe mir vor langer Zeit mal isdnmonp an meine Beduerfnisse angepasst, so dass nicht nur gezeigt wird, ob und mit welchem Provider ich verbunden bin, sondern dass ich ueber Buttons auch waehlen und auflegen kann. Allerdings ist meine Konstruktion nicht sonderlich bedienerfreundlich, weil mir isdnmonp nicht so ganz klar ist.
Bisher habe ich deshalb hier zu stehen:
button .left.oben.dialz -text " T-Online " -width 9 -command {exec dialt} button .left.oben.dialt -text " MSN " -width 9 -command {exec dialmsn} button .right.oben.hangupz -text "X" -width 9 -command {exec dialt stop} button .right.oben.hangupt -text "X" -width 9 -command {exec dialmsn stop}
D.h. ich muss immer genau wissen, mit wem ich die Verbindung aufgebaut hage, um auch die richtige abbauen zu koennen. Andernfalls gibt es eine Fehlermeldung, die ich zwar nach /dev/null umlenken koennte, aber dann verliere ich natuerlich auch sinnvolle Fehlermeldungen.
Deshalb wuerde ich gerne nur noch einen Button zum Auflegen haben und ueber if...then abfragen, welche Verbindung getrennt werden soll.
Wenn ich das Script richtig verstehe, wertet es /dev/isdninfo aus:
"set infodev /dev/isdninfo"
und nutzt dort die phone-Angabe:
"if {$havetoread} { ... gets $f is(usage) gets $f is(flags) gets $f is(phone)}"
Den Inhalt von phone moechte ich nun auslesen und zur Beendigung der Verbindung nutzen. Bloss bislang bin ich mit meinen Versuchen nicht weit gekommen. So etwas wie:
if ( ${phone = 0192658 }); then dialt stop fi
fuehrt zur Fehlermeldung "bad substitution" (das gleiche passiert auch, wenn ich das "phone" durch "f" ersetze.
Fuer Tipps, wo mein Fehler liegt und wie ich das Problem besser angehen, waere ich deshalb sehr dankbar,
Heinz.
Hallo Heinz, es gibt eine manpage zu /dev/isdninfo ;) Moeglicherweise leasst sich damit rausfinden, wie das Format ist. Ahhh, grad seh ichs. Das sieht irgendwie aus wie tcl/tk, aber etwas seltsam.. fuer tcl/tk ist die Syntax flasch: if { ${phone} == "0192658" } { catch [ exec dialt stop ] res; puts "$res"; } sollte es tun. man n catch man n exec Auch fuer andere Sprachen kann ich mir nicht vorstellen, dass sowas: ${phone = 0192658 } funktioniert ;) Das passt auch zur Fehlermeldung: "bad substitution" Ich kenne zwar bei weitem nicht alle, aber {} dient meistens zur Klammerung - -eines Variablennamens -einer Funktion -einer Liste -eines Arrays -bestimmt noch mehr -aber die Klammerung eines Ausdruckes habe ich so noch nie gesehen ;) Btw: Ich suche noch Versuchskaninchen für http://illuminatus.bei.t-online.de/ICC (Alles in tcl/tk | bash) -- so long... bernd ------------------------------------------------------------------------
Hallo Bernd, On 17-Jul-2002 Bernd Obermayr wrote:
es gibt eine manpage zu /dev/isdninfo ;) Moeglicherweise leasst sich damit rausfinden, wie das Format ist.
Die manpage gibt, zumindest fuer mich, nicht sehr viel her. Aber im uebrigen wird "phone" von isdnmonp ja bereits ausgelesen. Ich weiss nur nur, wie ich die fuer mich nutzbar mache :-(
Ahhh, grad seh ichs. Das sieht irgendwie aus wie tcl/tk, aber etwas
Ist es auch.
seltsam..
fuer tcl/tk ist die Syntax flasch:
if { ${phone} == "0192658" } { catch [ exec dialt stop ] res; puts "$res"; }
sollte es tun.
Danke :-) Das meine Variante verkehrt war, war mir ja auch klar. Dummerweise habe ich den Fehler mit "man bash" zu loesen versucht. Nun bin ich immerhin schon so weit, dass ich ein "'0192658' is an invalid octal number" erhalte.
Btw: Ich suche noch Versuchskaninchen für http://illuminatus.bei.t-online.de/ICC (Alles in tcl/tk | bash)
Were mir mal den Sourcecode ansehen. Bestimmt kann ich da noch viel lernen, denn meine TclTk-Erfahrungen beschraenken sich bislang wirklich nur auf ganz wenige Erfahrungen, wie z.B. der Modifikation von isdnmonp. Beste Gruesse, Heinz. -- http://www.pahlke-online.de http://www.Pahlke-KunstWebDesign.de
On Wed, 17 Jul 2002 19:50:31 +0200 (CEST)
"Heinz W. Pahlke"
Hallo Bernd,
On 17-Jul-2002 Bernd Obermayr wrote:
es gibt eine manpage zu /dev/isdninfo ;) Moeglicherweise leasst sich damit rausfinden, wie das Format ist.
Die manpage gibt, zumindest fuer mich, nicht sehr viel her.
Aber im uebrigen wird "phone" von isdnmonp ja bereits ausgelesen. Ich weiss nur nur, wie ich die fuer mich nutzbar mache :-(
Ahhh, grad seh ichs. Das sieht irgendwie aus wie tcl/tk, aber etwas
Ist es auch.
seltsam..
fuer tcl/tk ist die Syntax flasch:
if { ${phone} == "0192658" } { catch [ exec dialt stop ] res; puts "$res"; }
sollte es tun.
Danke :-) Das meine Variante verkehrt war, war mir ja auch klar. Dummerweise habe ich den Fehler mit "man bash" zu loesen versucht.
Nun bin ich immerhin schon so weit, dass ich ein
"'0192658' is an invalid octal number"
Hi, ja tcl ist ein Mistvieh ;) versuchs mal mit if { ${phone} == {0192658} } { oder if { ${phone} == "\0192658" } { oder if { "${phone}" == {0192658} } { Mir ist nicht ganz klar, ob da ${phone} oder "0192658" angemeckert wird. Was das Quoting anbelangt, ist tcl zum kotzen ;) {} ist aequivalent zu bash ' ' , ist aber auch die Klammer fuer Listen, und Functionsbody (tcl = Script) Wobei Listen = ArgList, CmdList, ElementList, etc die ' ' oder ` ` gibts nicht, " " ist gleich wie bash, alle metazeichen werden interpretiert. [ ] wird fuer commandos benutzt: set dir [file join "usr" "home" "bernd"] puts $dir /usr/home/bernd ( ) wird fuer Arrays: $env(HOME) und fuer Bedignungen if { (( $a == $b && $c == "aha" ) || $ich != "zuhause" ) } benutzt. HTH
erhalte.
Btw: Ich suche noch Versuchskaninchen für http://illuminatus.bei.t-online.de/ICC (Alles in tcl/tk | bash)
Were mir mal den Sourcecode ansehen. Bestimmt kann ich da noch viel lernen, denn meine TclTk-Erfahrungen beschraenken sich bislang wirklich nur auf ganz wenige Erfahrungen, wie z.B. der Modifikation von isdnmonp.
Du kannst es auch benutzen ;) Macht IMHO das Gleiche bzw. mehr als isdnmonp. -- so long... bernd ------------------------------------------------------------------------
Hallo Bernd, On 17-Jul-2002 Bernd Obermayr wrote:
versuchs mal mit if { ${phone} == {0192658} } {
Und schon klappt es - fast :-) Error: "Can't read 'phone': no such variable". Das habe ich schon fast befuerchtet. Irgendwo wird vorher die Variable bereits wieder geloescht. Aber wo? Der Ablauf: set infodev /dev/isdninfo set infodevfp "" ... proc getinfo {} { global infodev infodevfp is withselect ... if {$havetoread} { gets $f is(idmap) gets $f is(chmap) gets $f is(drmap) gets $f is(usage) gets $f is(flags) gets $f is(phone) } if {$havetoclose} { close $f ... getinfo set flist [lreplace $is(flags) 0 0] set ulist [lreplace $is(usage) 0 0] set ilist [lreplace $is(chmap) 0 0] set rlist [lreplace $is(phone) 0 0] ... getinfo if [info exists is(flags)] { set flist [lreplace $is(flags) 0 0] set ulist [lreplace $is(usage) 0 0] set rlist [lreplace $is(phone) 0 0] ... Ich weiss nicht, ob obige Fragmente ausreichen, aber fuer mich sieht das so aus, als wuerde $phone bis zum Ende existieren. Wenn es eine Moeglichkeit gaebe, das Script in Einzelschritten durchlaufen zu lassen, waere es bestimmt leichter, den Knackpunkt zu finden, aber TclTk scheint diese Moeglichkeit nicht zu kennen. Jedenfalls finde ich nichts. AQber vielleicht koenntest du oder jemand anderes mal einen Blick auf das Script werden? Ich habe es einfach mal hochgeladen: http://www.pahlke-online.de/download/isdn Beste Gruesse, Heinz. -- http://www.pahlke-online.de http://www.Pahlke-KunstWebDesign.de
On Wed, 17 Jul 2002 21:25:58 +0200 (CEST)
"Heinz W. Pahlke"
Hallo Bernd,
On 17-Jul-2002 Bernd Obermayr wrote:
versuchs mal mit if { ${phone} == {0192658} } {
Und schon klappt es - fast :-)
Error: "Can't read 'phone': no such variable".
Das habe ich schon fast befuerchtet. Irgendwo wird vorher die Variable bereits wieder geloescht. Aber wo?
Der Ablauf:
set infodev /dev/isdninfo set infodevfp "" ... proc getinfo {} { global infodev infodevfp is withselect ... if {$havetoread} { gets $f is(idmap) gets $f is(chmap) gets $f is(drmap) gets $f is(usage) gets $f is(flags) gets $f is(phone) } if {$havetoclose} { close $f ... getinfo set flist [lreplace $is(flags) 0 0] set ulist [lreplace $is(usage) 0 0] set ilist [lreplace $is(chmap) 0 0] set rlist [lreplace $is(phone) 0 0] ... getinfo if [info exists is(flags)] { set flist [lreplace $is(flags) 0 0] set ulist [lreplace $is(usage) 0 0] set rlist [lreplace $is(phone) 0 0] ...
Ich weiss nicht, ob obige Fragmente ausreichen, aber fuer mich sieht das so aus, als wuerde $phone bis zum Ende existieren.
Hi, ich bin ja auch ein Esel ;) Ich habs ja vorher schon gesehen, aber der Fehler ist mir nicht aufgefallen... $phone gibts nicht... aber $is(phone) <--- Array! Oft hat die Fehlermeldung auch einen anderen Grund: NameSpace tcl/tk ist da heikel. Entweder wird eine Variable aus dem uebergeordneten Namespace via global name in den aktuellen Namespace gehievt, oder via ubvar/uplevel (siehe manpage)
Wenn es eine Moeglichkeit gaebe, das Script in Einzelschritten durchlaufen zu lassen, waere es bestimmt leichter, den Knackpunkt zu finden, aber TclTk scheint diese Moeglichkeit nicht zu kennen. Jedenfalls finde ich nichts.
Irgendwo gibts tuba (SuSE 8.0?) ein tcl debugger. Ich helfe mir mit puts Anweisungen, das geht auch. Also script aus einem xterm starten und dann die Ausgaben auswerten. Doku ist etwas schwierig, es gibt widgets = GUI fuer Demoscripts, und tclhelp = GUI fuer manpages. Dann gibts noch tkman ist ganz brauch- bar fuer manpages aber ein bisschen zickig. Aber eine anstaendige FAQ oder eine gute Scriptsammlung fuer Einsteiger hab ich noch nicht gefunden. Es gibt schon Beispiele, die aber meistens im Zusammenhang mit einer C, Perl, etc. Schnitt- stelle und dann auch noch OO.... ist mir zu kompliziert ;)
AQber vielleicht koenntest du oder jemand anderes mal einen Blick auf das Script werden? Ich habe es einfach mal hochgeladen: http://www.pahlke-online.de/download/isdn
Mach ich mal. -- so long... bernd ------------------------------------------------------------------------
On Wed, 17 Jul 2002 22:04:17 +0200
Bernd Obermayr
On Wed, 17 Jul 2002 21:25:58 +0200 (CEST) "Heinz W. Pahlke"
wrote:
AQber vielleicht koenntest du oder jemand anderes mal einen Blick auf das Script werden? Ich habe es einfach mal hochgeladen: http://www.pahlke-online.de/download/isdn
Mach ich mal.
Ok, hab ich jetzt :) button .right.oben.hangupz -text "X" -width 9 -command { if { ${f} == {0192658}} { catch [exec dialmsn stop ] res; puts "$res"; }} 1. Wo ist $f definiert? 2. Das mit dem -command{} funktioniert so nicht. Siehe vorige Mail "{}". Auf $f kann hier nicht zugegriffen werden. (Frag mich nicht warum ;) Am Besten wird hier immer eine parameterlose Funktion aufgerufen. Folgende Vorschläge: Fuege Deine Code direkt vor dem letzten doloop ein. definiere die Funktionen proc abwahl {} { global is ## Mit [lreplace $is(phone) 0 0] wird das erste element von ## is(phone) geloescht. ## Ich weiss nicht wozu, Aufklaerung bringen vermutlich ## zwei puts :) puts "proc abwahl::is(phone) = $is(phone)" set rlist [lreplace $is(phone) 0 0] puts "proc abwahl::rlist = $rlist" if { $rlist == {0192658} } { catch [exec dialmsn stop ] res; puts "$res"; } } -----------8<------------- button .right.oben.hangupt -text "X" -width 9 -command { if { ${f} == {0192658}} { catch [exec dialmsn stop ] res; puts "$res"; }} -----------8<------------- Dieser Schnipsel unterscheidet sich nur durch den widget-namen von dem Anderen, ich nehme an, Du willst An- und Abwahl haben. In dem Fall definiere eine Funktion analog zur Obigen. Die -command Anweisung ist dann nur noch z.B: button .right.oben.hangupt -text "X" -width 9 -command {abwahl} Du hast noch 2 frames definiert: frame .right2 und frame .right3. Diese werden aber nirgends benutzt, Du kannst sie also weglassen Bei der Definition von widgets ist auch folgende Konstruktion moeglich: -------------------8<------------------ pack [frame .right.oben] pack [button .right.oben.hangupt \ -text "X" \ -width 9 \ -command { abwahl } ] -side top -------------------8<------------------ Diese Notation benutze ich mittlerweile, bei grossen Scripten ist sie erheblich uebersichtlicher. -- so long... bernd ------------------------------------------------------------------------
Hallo Bernd, On 17-Jul-2002 Bernd Obermayr wrote:
On Wed, 17 Jul 2002 22:04:17 +0200 Bernd Obermayr
wrote: On Wed, 17 Jul 2002 21:25:58 +0200 (CEST) "Heinz W. Pahlke"
wrote: AQber vielleicht koenntest du oder jemand anderes mal einen Blick auf das Script werden? Ich habe es einfach mal hochgeladen: http://www.pahlke-online.de/download/isdn
Mach ich mal.
Ok, hab ich jetzt :)
Vielen Dank.
button .right.oben.hangupz -text "X" -width 9 -command { if { ${f} == {0192658}} { catch [exec dialmsn stop ] res; puts "$res"; }}
1. Wo ist $f definiert?
Ich dachte, wegen "gets $f is(phone)" koennte es so funktionieren. Hatte es aber genauso mit $phone probiert. Die Fehlermeldungen waren in beiden Faellen die gleichen.
Folgende Vorschläge:
Fuege Deine Code direkt vor dem letzten doloop ein.
definiere die Funktionen
proc abwahl {} { global is ## Mit [lreplace $is(phone) 0 0] wird das erste element von ## is(phone) geloescht. ## Ich weiss nicht wozu, Aufklaerung bringen vermutlich ## zwei puts :) puts "proc abwahl::is(phone) = $is(phone)"
set rlist [lreplace $is(phone) 0 0]
puts "proc abwahl::rlist = $rlist"
if { $rlist == {0192658} } { catch [exec dialmsn stop ] res; puts "$res"; } }
-----------8<------------- button .right.oben.hangupt -text "X" -width 9 -command { if { ${f} == {0192658}} { catch [exec dialmsn stop ] res; puts "$res"; }} -----------8<-------------
Dieser Schnipsel unterscheidet sich nur durch den widget-namen von dem Anderen, ich nehme an, Du willst An- und Abwahl haben. In dem Fall definiere eine Funktion analog zur Obigen.
Probiere ich beides heute abend mal aus.
Du hast noch 2 frames definiert: frame .right2 und frame .right3. Diese werden aber nirgends benutzt, Du kannst sie also weglassen
Danke. Die sind einfach uebrig geblieben. Die Bearbeitung von isdnmonp war/ist mein erster richtiger Versuch mit TclTk und bei mir geht es viel mit trial and error.
Bei der Definition von widgets ist auch folgende Konstruktion moeglich: -------------------8<------------------ pack [frame .right.oben]
pack [button .right.oben.hangupt \ -text "X" \ -width 9 \ -command { abwahl } ] -side top -------------------8<------------------ Diese Notation benutze ich mittlerweile, bei grossen Scripten ist sie erheblich uebersichtlicher.
Danke. Von Uebersichtlichkeit moechte ich im Zusammenhang mit meinem Script tatsaechlich nicht sprechen. Beste Gruesse, Heinz. -- http://www.pahlke-online.de http://www.Pahlke-KunstWebDesign.de
Hallo Bernd, On 17-Jul-2002 Bernd Obermayr wrote: [viel Code] Vielen Dank. Leider bekomme ich nun die Fehlermeldung: "wrong # args: should be 'puts ?-nonewline? ?channelld? string'" Aber die Ausgabe im xterm hat mich auf etwas viel gravierenderes aufmerksam gemacht: Wenn keine Verbindung zustande kommt, dann liefert $is(phone) natuerlich nichts zurueck, denn aus isdninfo kann die Telefonnummer logischerweise nur bei bestehender Verbindung ausgelesen werden :-( Ich muss also entweder die uebergebene Telefonnummer und das entsprechende ippp-Device in eine Variable schreiben oder den Namen des jeweiligen Waehlscripts in einer Variablen sichern und zum auflegen benutzen. Letzteres duerfte sinnvoller sein, da die Waehlscripte ja auch ohne isdnmonp benutzt werden koennen. Aber wie ich das umsetzen kann, muss ich mir erst einmal ueberlegen. Vielen Dank noch einmal fuer deine Hilfe, Heinz. -- http://www.pahlke-online.de http://www.Pahlke-KunstWebDesign.de
On Fri, 19 Jul 2002 11:24:59 +0200 (CEST)
"Heinz W. Pahlke"
Hallo Bernd,
On 17-Jul-2002 Bernd Obermayr wrote:
[viel Code]
Vielen Dank. Leider bekomme ich nun die Fehlermeldung:
"wrong # args: should be 'puts ?-nonewline? ?channelld? string'"
Aber die Ausgabe im xterm hat mich auf etwas viel gravierenderes aufmerksam gemacht: Wenn keine Verbindung zustande kommt, dann liefert $is(phone) natuerlich nichts zurueck, denn aus isdninfo kann die Telefonnummer logischerweise nur bei bestehender Verbindung ausgelesen werden :-(
Hi, ich vermute jetzt mal Du hast puts $is(phone) geschrieben. Wenn is(phone) dann leer ist, meckert tcl natuerlich. Deshalb ja mein Beispiel: puts "proc abwahl::is(phone) = $is(phone)" Da kann das nicht passieren. Noch beeser ist natuerlich sowas: if [info exists $is(phone)] { ##tu dies } Es geht auch wie in Bash: if { "X$is(phone)" != "X" } { ##tu dies }
Ich muss also entweder die uebergebene Telefonnummer und das entsprechende ippp-Device in eine Variable schreiben oder den Namen des jeweiligen Waehlscripts in einer Variablen sichern und zum auflegen benutzen. Letzteres duerfte sinnvoller sein, da die Waehlscripte ja auch ohne isdnmonp benutzt werden koennen.
Aber wie ich das umsetzen kann, muss ich mir erst einmal ueberlegen.
Ja, ich hab das bei mir so geloest, dass ich die isdn - Configfiles parse und mir dort die entsprechenden Info's hole. Konfiguration an _einer_ Stelle ist ein wichtiges Prinzip! Auch wenn's manchmal mehr Aufwand ist. Nochmal ;) Schau Dir http://illuminatus.bei.t-online.de/ICC [1] an, da sind alle Scripte drin, die ich zum Thema ISDN programmiert habe. IMHO auch die Loesung Deines Problems ;) Ich bin damals mit ISDN so brutal auf dem Schlauch gestanden, dass ich mir das alles erarbeitet habe, mittlerweile rennt das bei mir seit Anfang 1998. Vieles ist redundant, auch deshalb, weil sich i4l weiterentwickelt hat. Die Info's die ich damals so muehevoll aus /dev/isdninfo gekramt habe, gibt isdnctrl mittlerweile freiwillig her. isdnctrl list all, isdnctrl eaz all, isdnctrl dialmode all, usw. Trotzdem ist es spannend, mit der Shell /dev/isdninfo auszulesen ;) [1] Seit gestern Abend wieder online. -- so long... bernd ------------------------------------------------------------------------
Hallo, On 19-Jul-2002 Heinz W. Pahlke wrote:
Ich muss also entweder die uebergebene Telefonnummer und das entsprechende ippp-Device in eine Variable schreiben oder den Namen des jeweiligen Waehlscripts in einer Variablen sichern und zum auflegen benutzen. Letzteres duerfte sinnvoller sein, da die Waehlscripte ja auch ohne isdnmonp benutzt werden koennen.
Aber wie ich das umsetzen kann, muss ich mir erst einmal ueberlegen.
Als Lehrbuch finde ich "Effektiv Tcl/Tk programmieren" wirklich gut, aber als Nachschlagewerk kann man es wirklich vergessen. Trotzdem bin ich inzwischen zu einer ersten Idee gekommen: Mit bind <ButtonPress-1> die einzelnen Button an die Maus binden und ueber global CallInfo und set CallInfo "Name_des_Dialscripts" eine Variable zur Verfuegung stellen, um dann mit "CallInfo stop" die Verbindung wieder trennen zu koennen. Bevor ich mich jetzt an trial and error mache, wollte ich aber wissen, ob das so ueberhaupt funktionieren kann. man gets und man bind habe ich zwar gelesen, aber mehr als eine erste Ahnung, was sie mir sagen wollen, habe ich noch nicht. Noch einen schoenen Abend, Heinz. -- http://www.pahlke-online.de http://www.Pahlke-KunstWebDesign.de
On Fri, 19 Jul 2002 22:43:49 +0200 (CEST)
"Heinz W. Pahlke"
Hallo,
On 19-Jul-2002 Heinz W. Pahlke wrote:
Ich muss also entweder die uebergebene Telefonnummer und das entsprechende ippp-Device in eine Variable schreiben oder den Namen des jeweiligen Waehlscripts in einer Variablen sichern und zum auflegen benutzen. Letzteres duerfte sinnvoller sein, da die Waehlscripte ja auch ohne isdnmonp benutzt werden koennen.
Aber wie ich das umsetzen kann, muss ich mir erst einmal ueberlegen.
Als Lehrbuch finde ich "Effektiv Tcl/Tk programmieren" wirklich gut, aber als Nachschlagewerk kann man es wirklich vergessen.
Trotzdem bin ich inzwischen zu einer ersten Idee gekommen:
Mit bind <ButtonPress-1> die einzelnen Button an die Maus binden und ueber global CallInfo und set CallInfo "Name_des_Dialscripts" eine Variable zur Verfuegung stellen, um dann mit "CallInfo stop" die Verbindung wieder trennen zu koennen.
Bevor ich mich jetzt an trial and error mache, wollte ich aber wissen, ob das so ueberhaupt funktionieren kann. man gets und man bind habe ich zwar gelesen, aber mehr als eine erste Ahnung, was sie mir sagen wollen, habe ich noch nicht.
Kommt drauf an ;) global CallInfo und set CallInfo "Name_des_Dialscripts" ist schon mal in Ordnung. Mit dem bind gibts halt wieder das Problem mit den {} Auf Variablen die ausserhalb dieses bindscriptes definiert sind, gibts keinen Zugriff. Zur Not koennte gehen: bind .button.hangup <ButtonPress-1> "$CallInfo" Also mit nur einem einzigen Befehl. Besser ist aber immer: proc hangup {} { global CallInfo catch [exec $CallInfo] } [...] bind .button.hangup <ButtonPress-1> { hangup }
Noch einen schoenen Abend,
Danke, Dir auch. -- so long... bernd ------------------------------------------------------------------------
Hallo Bernd, On 17-Jul-2002 Bernd Obermayr wrote:
$phone gibts nicht... aber $is(phone) <--- Array!
Wobei mir bislang noch unklar ist, warum nicht weiter mit $phone gearbeitet wird, sondern ploetzlich mit $is(phone). Aber damit weiss ich jedenfalls, was ich die naechsten Abende treiben werde: mich wieder mal in "Effektiv Tcl/Tk programmieren" vertiefen :-) Wenn ich $phone durch $is(phone) ersetze, bin ich tatsaechlich auch endlich die Fehlermeldungen weg. Aber eigentlih wollte ich natuerlich niht die Fehlermeldungen beseitigen, sondern abwaehlen koennen. Und letzteres geht noch immer nicht. Die Verbindung bleibt ohne jegliche Meldung weiter bestehen :-((
Irgendwo gibts tuba (SuSE 8.0?) ein tcl debugger.
Werde mal danach suchen.
Ich helfe mir mit puts Anweisungen, das geht auch.
Wenn man weiss, wie. man puts hilft mir erst einmal noch nicht weiter und "Effektiv..." hat einen Index, den man vergessen kann. Beste Gruesse, Heinz. -- http://www.pahlke-online.de http://www.Pahlke-KunstWebDesign.de
On Thu, 18 Jul 2002 09:57:33 +0200 (CEST)
"Heinz W. Pahlke"
Hallo Bernd,
On 17-Jul-2002 Bernd Obermayr wrote:
$phone gibts nicht... aber $is(phone) <--- Array!
Wobei mir bislang noch unklar ist, warum nicht weiter mit $phone gearbeitet wird, sondern ploetzlich mit $is(phone). Aber damit weiss ich jedenfalls, was ich die naechsten Abende treiben werde: mich wieder mal in "Effektiv Tcl/Tk programmieren" vertiefen :-)
Hi, das ist bei tcl/tk Usus. Durch das Namespace Konzept hast Du sonst u.U. eine ellenlange Latte von global Anweisungen in jeder Funktion. Wenn Du alle Variablen sinnvoll in Arrays gruppierst, reduziert sich das auf eine Handvoll. Die tix-Library ist ein schoenes Beispiel dafuer. Fast alle Variablen werden dort im Array data() vorgehalten. Allerdings erlaubt sich der Autor von isdnmonp eine Schlamperei, die leider verbreitet ist - auch bei mir ;) Die Variablennamen sind wenig aussagekraeftig. Statt is waere irgendwas in der Art: arr_ISDN_Status sehr viel besser. Ich nehme an, das haette Dich nicht den Fehler machen lassen, die Bedeutung von is zu uebersehen.
Wenn ich $phone durch $is(phone) ersetze, bin ich tatsaechlich auch endlich die Fehlermeldungen weg. Aber eigentlih wollte ich natuerlich niht die Fehlermeldungen beseitigen, sondern abwaehlen koennen. Und letzteres geht noch immer nicht. Die Verbindung bleibt ohne jegliche Meldung weiter bestehen :-((
Ich hoffe, das hat sich durch meine andere mail erledigt ;)
Irgendwo gibts tuba (SuSE 8.0?) ein tcl debugger.
Werde mal danach suchen.
Ich helfe mir mit puts Anweisungen, das geht auch.
Wenn man weiss, wie. man puts hilft mir erst einmal noch nicht weiter und "Effektiv..." hat einen Index, den man vergessen kann.
man n puts ;) puts [filehandle] [-nonewline] List Ist filehandle nicht angegeben, wird stdout angenommen. Ein Beispiel hast Du ja in meiner anderen Mail. Wie ich schon schrieb.. die Doku ist miserabel. Und dementsprechend kannst Du auch alle Buecher vergessen, wo sollen denn die Autoren eine bessere Doku herhaben? ;) Es gibt eine Menge Erweiterungen zu tcl/tk. tix tclx, usw. Am Besten dokumentiert ist tix. Da hab ich aber Probleme damit, manches geht bei mir nicht so, wie's beschrieben ist. Ich kann mir noch kein Urteil erlauben, ich versteh es noch zuwenig, aber ich vermute, dass in tix etliche Bugs sind. Wenn Du Perl kannst, es gibt ein Modul, heisst glaub ich perl::tcl oder so. Vielleicht kommst Du damit besser klar. -- so long... bernd ------------------------------------------------------------------------
participants (2)
-
Bernd Obermayr
-
Heinz W. Pahlke