Gegroet,
Ik heb een c programma waaraan ik nu een Tcl en Tk schil wil toevoegen. Met behulp van Tk heb ik enkel tekstvensters voor de output voorzien.
Nu zoek ik een manier om zonder elke printf functie in C te gaan aanpassen, om stdout van het c programma te doen uitlezen in de Tcl/Tk schil. Bij mijn weten is er geen manier om de Tcl_linkVar functie te gebruiken voor een dergelijke file pointer.
In het begin was mijn schil nog een apart progje , dat het c programma inlaadde, toen handelde ik de tekst als volgt af:
Maar nu wordt de Tcl schil dus door het C programma ingeladen, waarna de Tcl zorgt dat bepaalde c functies geladen worden adhv de input.
Iemand enig idee hoe ik dit het beste oplos?
Alvast bedankt!
Ik heb een c programma waaraan ik nu een Tcl en Tk schil wil toevoegen. Met behulp van Tk heb ik enkel tekstvensters voor de output voorzien.
Nu zoek ik een manier om zonder elke printf functie in C te gaan aanpassen, om stdout van het c programma te doen uitlezen in de Tcl/Tk schil. Bij mijn weten is er geen manier om de Tcl_linkVar functie te gebruiken voor een dergelijke file pointer.
In het begin was mijn schil nog een apart progje , dat het c programma inlaadde, toen handelde ik de tekst als volgt af:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| proc runP {cmd} {
output command $cmd
set f [open "| $cmd" r]
fconfigure $f -blocking false
fileevent $f readable [list handleFileEvent $f]
}
proc closePipe {f} {
fconfigure $f -blocking true
if {[catch {close $f} err]} {
output error $err
}
}
proc handleFileEvent {f} {
set status [catch { gets $f line } result]
if { $status != 0 } {
output error $result
closePipe $f
} elseif { $result >= 0 } {
# print output naar Tk venster
output normal $line
} elseif { [eof $f] } {
# EOF
closePipe $f
} elseif { [fblocked $f] } {
}
} |
Maar nu wordt de Tcl schil dus door het C programma ingeladen, waarna de Tcl zorgt dat bepaalde c functies geladen worden adhv de input.
Iemand enig idee hoe ik dit het beste oplos?
Alvast bedankt!