6. Tcl/Tk-kielien ja C-kielen yhdistäminen

Tcl on alunperin suunniteltu C-kielen avuksi ja vähitellen laajentunut omaksi kielekseen. Pienissä sovelluksissa C-kielen yhdistäminen Tcl-kieliseen ohjelmaan ei ole tarpeellista. Isoissa sovelluksissa yhdist&a uml;misestä on kuitenkin hyötyä, koska vaativat algoritmit ja raskas laskenta toimivat tätä kautta nopeammin. Tässä luvussa on kuvattu päällisin puolin sovellusta, joka käyttää avukseen C-kielisi ä aliohjelmia [WEL] [OUS96]. 

Esimerkkiohjelmana on toteutettu autolaskuri kokonaan Tcl/Tk-ohjelmointikielellä (liite 3) sekä käyttäen yhdessä Tcl/Tk-kieliä sekä C-kielisiä aliohjelmia (liite 4, kuva 5.3). Kummassakin tapaukse ssa itse käyttöliittymä näyttää samanlaiselta. Näin pienessä sovelluksessa Tcl/Tk-kielinen ohjelma on lyhyempi ja nopeampi kirjoittaa sekä toimii nopeasti. C-kielisten aliohjelmien käyttö apuna siis e i olisi tarpeen. Autolaskurin toiminta on selitetty luvussa 5.1.

Kun aliohjelmat halutaan kirjoittaa C-kielellä, täytyy aina tehdä joukko alustuksia, jotta kielet osaisivat kommunikoida keskenään. Tcl/Tk -kielen ja C-kielen kommunikointi tapahtuu ns. tulkkien (engl. interp reters) avulla. Uusi tulkki voidaan luoda komennolla Tcl_CreateInterp(). Yleisemmin sovelluksissa kuitenkin käytetään Tcl_AppInit-aliohjelmaa tulkkien ja muiden määrityks ien tekemiseen. Liitteessä 3 olevassa esimerkkitapauksessa main-aliohjelman tarkoituksena on määritellä käskyt, jotka pysyvät samoina myös Tcl/Tk -kielisessä ohjelmassa, kun taas Tcl_AppInit-aliohjelmassa määritellään sovelluskohtaiset uudet komennot ja käsitellään muuttujia.

Jos käytetään Tcl_AppInit-aliohjelmaa, niin on aluksi suoritettava käskyt Tcl_Init ja tarvittaessa Tk_Init, jotka suorittavat Tcl:n sekä Tk:n alustuksen. Tämän jälkeen voidaan esimerkiksi määritellä uusia käskyjä Tcl_CreateCommand-komennon avulla tai linkittää Tcl/Tk -kielinen ja C-kielinen muuttuja toi siinsa Tcl_LinkVar-komennon avulla.

Kun määritellään uutta C-kielistä komentoa, se on määriteltävä esimerkiksi seuraavalla tavalla

int nollaa( ClientData clientdata, Tcl_Interp *interp, int argc, char *argv[])

C-kieliselle ohjelmalle välitetään neljä parametria. clientdata-parametrin avulla voidaan tuoda aliohjelmalle yksi sana, yleensä tietueen osoite. ClientDat a-tyyppi on tarpeeksi iso tuodakseen kokonaisluvun tai osoittajan. Toinen parametri interp on tulkki, jonka kautta käskyt välitetään. Kolmas parametri argc määrit telee Tcl-komennon mukana tulevien parametrien lukumäärän sekä neljäs parametri argv on osoittaja välitettäviin parametreihin.

Tarkemmat selitykset ja lisää komentoja C-aliohjelmien hyväksikäyttöön löytyy esimerkiksi Ousterhoutin kirjan [OUS96] kolmannesta ja neljännestä luvusta.


previous gif next gif


Luk-tutkielma: Tcl/Tk -opiksi ja iloksi.