# Fer scripts amb KStars: La interfície per a DCOP

Un dels objectius de &kstars; és el proveir la capacitat dels comportaments complicats des d'un script. Això us permetrà crear viatges virtuals entre el cel i li permetrà als profesors construir presentacions educatives per a il·lustrar certs conceptes astronòmics. Ja és possible escriure dits scripts per a &kstars;, tot i que encara no s'han inclòs totes les funcions desitjades. També, mentre que tinguem una eina basa en IGU per a construir els scripts, aquests s'hauran d'escriure eventualment a mà. Aquest capitol explicarà com escriure scripts &kstars;.

L'arquitectura &kde; proveeix l'entorn necessari per a scripts d'aplicacions mitjançant la interfície DCOP. Aquesta és el pedestal per al protocol de comunicació a l'escriptori (Desktop Communication Protocol), les aplicacions &kde; poden ser controlades per d'altres aplicacions, des d'un indicatiu de terminal o a través d'un script de text.

## Funcions DCOP

La interfície DCOP de &kstars; inclou les següents funcions:

- `lookTowards( const QString direcció )`: Apunta la vista del focus en una direcció especificada per l'argument. Aquest pot ser el nom d'un objecte en el cel o una de les següents paraules (o abreviacions) direccionals: zenith (z), north (n), northeast (ne), east (e), southeast (se), south (s), southwest(sw), west(w), northwest (nw).

- `setRaDec( double ar, double dec )`: Apunta la vista del focus cap a les coordenades equatorials especificades.

- `setAltAz(double alt, double az)`: Apunta la vista del focus cap a les coordenades horitzontals especificades.

- `zoomIn()`: Incrementa el nivell d'apropament de la vista.

- `zoomOut()`: Decrementa el nivell d'apropament de la vista.

- `defaultZoom()`: Reinicia la vista al nivell = 3 d'apropament (per omissió).

- `setLocalTime(int any, int mes, int dia, int hora, int minut, int segon)`: Estableix el rellotge de simulació a la data i hora especificades.

- `waitFor( double t )`: Pausa durant t segons abans de continuar amb els subsegüents comandaments a l'script.

- `waitForKey( const QString k )`: Atura l'execució de l'script fins que l'usuari premi la tecla especificada. En aquest punt, no podreu especificar uns combinació de tecles (tals com &Ctrl;C); sinó emprar tecles simples. Podeu escriure space per a indicar la barra d'espai.

- `setTracking( bool track )`: Permet decidir si el mode de seguiment està en marxa.

- `changeViewOption( const QString opció, const QString valor )`: Ajusta una opció de la vista. Hi ha dotzenes i dotzenes d'opcions disponibles; bàsicament tot el que podeu canviar en la finestra Opcions de la vista també es poden canviar aquí. El primer argument és el nom de l'opció (els noms es prenen del fitxer de configuració `kstarsrc`) i el segon argument és el valor desitjat. L'analitzador d'arguments està dissenyat per a ser robust, de manera que si accidentament li envieu dades errònees ell fallarà amb gràcia.

- `setGeoLocation( const QString ciutat, const QString provincia, const QString ciutat )`: Canvia la localització d'observació a la ciutat especificada. Si no es troba cap ciutat que hi cassi, llavores no succeirà res.

- `stop()` {rellotge]: Atura el rellotge de simulació.

- `start()` [rellotge]: Engega el rellotge de simulació.

- `setScale(float s)` [rellotge]: Estableix el flux del rellotge de simulació. s=1.0 es correspon a temps real; 2.0 és dues vegades el temps real, etc.

## Provar les funcions DCOP

Podeu provar les funcions DCOP molt fàcilment emprant el programa kdcop. Quan executeu kdcop,veureu una llista en arbre de tots els programes en execució; si &kstars; s'està executant serà llistat. La majoria de les funcions DCOP són llistades sota la capçalera KStarsInterface, però les funcions del rellotge són llistades sota clock. Doble-clic sobre qualsevol funció per a executar-la. Si la funció requereix arguments, s'obrirà una finestra en la qual podreu entrar dits valors.

## Escriure un script DCOP

Les funcions DCOP també es poden cridar des de la línia de comandaments de UNIX i aquestes es poden encapsular en un script. Ara crearem un script d'exemple que canvii a coordenades equatorials, apunti la vista cap a la Lluna, apropi una mica i que acceleri el rellotge a 1 hora per segon. Després de seguir la Lluna durant 20 segons, s'aturarà breument el rellotge i la vista s'allunyarà altra vegada. Podreu usar aquest script com a plantilla per a fer-ne de nous. Primer llistaré l'script sencer per a després explicar-ne les diverses parts.

    #!/bin/bash
    # Script de KStars: Seguir a la Lluna!
    #
    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
    ##

Desar aquest script a un fitxer. El nom de fitxer pot ser qualsevol cosa al vostre gust, suggereixo quelcom descriptiu com `seguimentlluna.kstars`. Llavores escriviu el comandament per a tornar executable a l'script: ``chmod` `a+x` `seguimentlluna.kstars``. Ara, es podrà executar l'script en qualsevol moment escrivint ``./trackmoon.kstars`` a la carpeta que contingui l'script. Tingueu present que aquest tan sols funcionarà si ja s'està executant una instància de &kstars;. Tot i que no exclusivament, en el cas de no ser així podreu emprar el comandament `dcopstart` en un script per a iniciar una nova instància de &kstars;.

Tot seguit ve la explicació de l'script. La primera línia identifica el fitxer com a un script de `BASH`. Les dues línies següents són comentaris (qualsevol línia que comenci per # és un comentari i aquesta serà ignorada per l'intèrpret de comandaments). Les tres línies següents defineixen algunes variables de la conveniència que siguin emprades més endavant. La variable `KSTARS` identifica al procés de &kstars; que s'està executant actualment, usant el comandament `dcopfind`. `MAIN` i `CLOCK` a dues interfícies DCOP associades amb &kstars;.

La resta de l'script és la llista real de les crides DCOP. Els primer joc de comandaments estableix la vista a emprar el sistema de coordenades equatorials establint l'opció UseAltAz a false (altra vegada, podreu veure una llista de totes les opcions que changeViewOption pot usar examinant el vostre fitxer de configuració `kstarsrc`). El següent comandament centra la vista a la Lluna i en comença automàticament el seguiment. Llavores establim el nivell d'apropament per omissió i després apropem cinc vegades. Llavores, s'estableix el calendari del rellotge a 1 hora per segon (3.600 segons són una hora) i s'inicia el rellotge (en el cas de que no estigués ja funcionant). A la següent línia s'atura breument l'script durant 20 segons mentre que seguim la Lluna durant el seu moviment a través del cel. Finalment, parem el rellotge i reajustem el nivell d'apropament al seu valor per omissió.

Esperem que gaudiu de les capacitats d'escriure scripts de KStars. Si en creeu algun d'interessant, si us plau, envieu-lo per correu electrònic a kstars@30doradus.org; voldríem veure el que heu fet i poder afegir alguns scripts a la nostra pàgina web. També, si teniu qualsevol idea per a millorar aquesta qüestió (o qualsevol part de &kstars;), feu-nos-ho saber en kstars-devel@lists.sourceforge.net o informant d'un error «wihslist» al bugzilla.