# Skriptid ja KStars: DCOP liides

&kstars;i üks eesmärke on pakkuda võimalust kasutada ka kõige keerulisemaid võimalusi skripti vahendusel. See lubab luua virtuaalretki taevakaardil ning aitab õpetajatel koolitöös illustreerida mõningaid astronoomilisi põhimõtteid ning üldse juttu ja teksti köitvamaks muuta. Juba praegu on võimalik &kstars;is selliseid skripte kasutada, kuigi veel ei saa pruukida kõiki funktsioone, mida me tahaksime pakkuda. Meil on küll graafiline skriptide loomise abivahend, kuid siiski tuleb skriptid ise veel käsitsi kirjutada. Käesolev peatükk selgitabki, kuidas &kstars;i skripte kirja panna.

&kde; arhitektuur pakub skripte tarvitavatele rakendustele vajaliku raamistiku DCOP liidese näol. DCOP tähendab töölaua kommunikatsiooniprotokolli (inglise keeles Desktop COmmunication Protocol) ning just DCOP võimaldabki &kde; rakendusi juhtida teistest rakendustest, käsurealt või tekstiskripti abil.

## DCOP funktsioonid

&kstars;i DCOP kiides kasutab järgmisi funktsioone:

- `lookTowards( const QString suund )`: tsentreerib vaate argumendiga määratud punkti. Selleks võib olla suvalise taevakeha nimi või mõni järgmistest sõnadest või lühenditest: zenith (või z) seniidi tähistusena, north (n) põhjakaare, northeast (ne) kirde, east (e) ida, southeast (se) kagu, south (s), southwest (sw) edela, west (w) lääne ja northwest (nw) loode tähistusena.

- `setRaDec( double OT, double kääne )`: tsentreerib vaate määratud ekvaatorilistele koordinaatidele.

- `setAltAz(double h, double a)`: tsentreerib vaate määratud horisondiliste koordinaatidele.

- `zoomIn()`: suurendab vaate suurendust.

- `zoomOut()`: vähendab vaate suurendust.

- `defaultZoom()`: taastab vaikesuurenduse = 3.

- `setLocalTime(int aasta, int kuu, int päev, int tund, int min, int sek)`: seab simulatsioonikella määratud kuupäevale ja ajale.

- `waitFor( double t )`: paus t sekundit enne järgneva skriptikäsu rakendamist.

- `waitForKey( const QString klahv )`: skripti rakendamine peatatakse, kuni kasutaja vajutab määratud klahvi. Praegu ei saa määrata klahvikombinatsioone (näiteks &Ctrl;C), vaid ainult üksikklahve. Tühikuklahvi jaoks tuleb kirjutada space.

- `setTracking( bool track )`: jälgimisrežiimi näitamise lülitamine.

- `changeViewOption( const QString võimalus, const QString väärtus )`: vaatevõimaluse määramine. Kasutada saab kümneid võimalusi, sisuliselt kõike, mida saab seadistada &kstars;i vaateseadistuste aknas. Esimene argument ongi võimalus (vastav nimi võetakse seadistustefailist `kstarsrc`), teine soovitud väärtus. Argumentide parser on püütud teha võimalikult lollikindel, nii et kui kirjutad midagi kogemata valesti, siis see lihtsalt ei rakendu.

- `setGeoLocation( const QString linn, const QString provints/maakond, const QString riik )`: võimalus määrata vaatluskohaks mingi konkreetne linn. Kui argumendis määratud linna andmebaasist ei leita, ei tee see käsk midagi.

- `stop()` [clock]: seiskab simulatsioonikella.

- `start()` [clock]: käivitab simulatsioonikella.

- `setScale(float s)` [clock]: määrab simulatsioonikella ajasammu. s=1.0 vastab reaalajale, 2.0 on kaks korda kiirem reaalajast jne.

## DCOP funktsioonide testimine

DCOP funktsioone saab hõlpsast testida rakenduse kdcop abil. Kui kdcop käivitada, näeb puukujulises nimekirjas kõiki töötavaid rakendusi ja kui &kstars; peaks töötama, on ta samuti seal kirjas. Enamik DCOP funktsioone on kirjas KStarsInterface päises, kuid kellafunktsioonid on ära toodud clock all. Suvalise funktsiooni käivitamiseks tee sellel topeltklõps. Kui funktsioon eeldab argumente, ilmub aken, kuhu need saab sisestada.

## DCOP skripti kirjutamine

DCOP funktsioone saab välja kutsuda ka UNIX-i käsurealt ning neid on võimalik skripti kaasata. Me näitame siin üht näidisskripti, mis lülitab sisse ekvaatorilised koordinaadid, tsentreerib vaate Kuule, suurendab veidi ning paneb kella käima kiirusega üks tund sekundis. Seda skripti saab kasutada mallina meelepäraste skriptide loomisel. Kõigepealt siis skript ning seejärel seletus.

    #!/bin/bash
    #KStars script: Jälgi Kuud!
    #
    KSTARS=`dcopfind -a 'kstars*'`
    MAIN=KStarsInterface
    CLOCK=clock#1
    dcop $KSTARS $MAIN  changeViewOption UseAltAz false
    dcop $KSTARS $MAIN  lookTowards Moon
    dcop $KSTARS $MAIN  defaultZoom
    dcop $KSTARS $MAIN  zoomIn
    dcop $KSTARS $MAIN  zoomIn
    dcop $KSTARS $MAIN  zoomIn
    dcop $KSTARS $MAIN  zoomIn
    dcop $KSTARS $MAIN  zoomIn
    dcop $KSTARS $CLOCK setScale 3600.
    dcop $KSTARS $CLOCK start
    dcop $KSTARS $MAIN  waitFor  20.
    dcop $KSTARS $CLOCK stop
    dcop $KSTARS $MAIN  defaultZoom
    ##

Salvesta skript failina. Nimi võib olla milline tahes, mina soovitaksin anda nimeks midagi kirjeldavat, näiteks `kuuvaatlus.kstars`. Skripti muutmiseks käivitatavaks anna järgmine käsk: ``chmod` `a+x` `kuuvaatlus.kstars`` . Nüüd saab skripti käivitada käsuga ``./kuuvaatlus.kstars`` kataloogis, kus skript asub. Arvesta, et skript toimib ainult siis, kui KStars eelnevalt töötab. Uue &kstars;i akna avamiseks võib skriptis kasutada käsku `dcopstart`.

Nüüd siis selgitused skripti juurde. Ülemine rida tuvastab faili `BASH`i shelliskriptina. Järgmised kaks rida on kommentaarid (kommentaarid on kõik read, mille alguses seisab #, ning shell jätab need arvesse võtmata). Järgmised kolm rida määravad mõningad muutujad, mida hiljem kasutatakse. Muutuja `KSTARS` tuvastab töötava &kstars;i protsessi, kasutades selleks käsku `dcopfind`. Muutujad `MAIN` ja`CLOCK` tuvastavad kaks &kstars;iga seotud DCOP liidest.

Ülejäänud osa skriptist kujutabki endast tegelike DCOP väljakutsete loetelu. Esimene rida määrab ekvaatoriliste koordinaatide kasutamise, määrates võimaluse UseAltAz (ehk siis kõrguse ja asimuudi kasutamise) väärtuseks false ehk väär (kõiki võimalusi, mida kasutab changeViewOptions ehk vaateseadistuste dialoog, näeb seadistustefailis `kstarsrc`). Järgmine käsk tsentreerib vaate Kuule ja lülitab sisse selle jälgimise. Seejärel kehtestatakse vaikesuurendus ja suurendatakse seda viis korda. Siis määratakse kell käima kiirusega üks tund sekundis (3600 sekundit on ju üks tund) ning kell käivitatakse. Järgmine rida peatab skripti 20 sekundiks, mille kestel saab jälgida üle taevalaotuse kulgevat Kuud. Lõpuks peatatakse kell ning taastatakse vaikesuurendus.

Me loodame, et KStarsi skriptivõimalused pakuvad sulle suurt naudingut ja lubavad luua huvitavaid lahendusi. Kui oled loonud mõne huvipakkuva skripti, võid sellest teada anda ka meiliaadressil kstars@30doradus.org, sest meile meeldiks teada saada, mida teevad meie kasutajad, ja võimaluse korral ka skripte oma veebileheküljel avaldada. Kui sul aga on mingeid mõtteid, kuidas skriptidesse (või üldse mis tahes &kstars;i töö osasse) puutuvat parandada, anna sellest teada aadressil kstars-devel@lists.sourceforge.net või esita oma soov Bugzilla vahendusel.