<chapter id="dcop">
<title>Fer scripts amb KStars: La interfície per a DCOP</title>
<para>Un dels objectius de &kstars; és el proveir la capacitat dels comportaments complicats des d'un script. Això us permetrà crear <quote>viatges virtuals</quote> 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;. </para>
<para>L'arquitectura &kde; proveeix l'entorn necessari per a scripts d'aplicacions mitjançant la interfície <abbrev>DCOP</abbrev>. Aquesta és el pedestal per al <quote>protocol de comunicació a l'escriptori (Desktop Communication Protocol)</quote>, 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. </para>

<sect1 id="dcop-interface">
<title>Funcions DCOP</title>
<para>La interfície <abbrev>DCOP</abbrev> de &kstars; inclou les següents funcions: <itemizedlist>
<listitem><para><function> lookTowards( const TQString direcció )</function>: 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). </para></listitem>

<listitem><para><function> setRaDec( double ar, double dec )</function>: Apunta la vista del focus cap a les coordenades equatorials especificades. </para></listitem>

<listitem><para><function> setAltAz(double alt, double az)</function>: Apunta la vista del focus cap a les coordenades horitzontals especificades. </para></listitem>

<listitem><para><function> zoomIn()</function>: Incrementa el nivell d'apropament de la vista. </para></listitem>

<listitem><para><function> zoomOut()</function>: Decrementa el nivell d'apropament de la vista. </para></listitem>

<listitem><para><function> defaultZoom()</function>: Reinicia la vista al nivell = 3 d'apropament (per omissió). </para></listitem>

<listitem><para><function> setLocalTime(int any, int mes, int dia, int hora, int minut, int segon)</function>: Estableix el rellotge de simulació a la data i hora especificades. </para></listitem>

<listitem><para><function> waitFor( double t )</function>: Pausa durant t segons abans de continuar amb els subsegüents comandaments a l'script. </para></listitem>

<listitem><para><function> waitForKey( const TQString k )</function>: 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 <keycombo action="simul">&Ctrl;<keycap>C</keycap></keycombo>); sinó emprar tecles simples. Podeu escriure <quote>space</quote> per a indicar la barra d'espai. </para></listitem>

<listitem><para><function> setTracking( bool track )</function>: Permet decidir si el mode de seguiment està en marxa. </para></listitem>

<listitem><para><function> changeViewOption( const TQString opció, const TQString valor )</function>: Ajusta una opció de la vista. Hi ha dotzenes i dotzenes d'opcions disponibles; bàsicament tot el que podeu canviar en la finestra <guilabel>Opcions de la vista</guilabel> també es poden canviar aquí. El primer argument és el nom de l'opció (els noms es prenen del fitxer de configuració <filename>kstarsrc</filename>) 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. </para></listitem>

<listitem><para><function> setGeoLocation( const TQString ciutat, const TQString provincia, const TQString ciutat )</function>: Canvia la localització d'observació a la ciutat especificada. Si no es troba cap ciutat que hi cassi, llavores no succeirà res. </para></listitem>

<listitem><para><function> stop()</function> {rellotge]: Atura el rellotge de simulació. </para></listitem>

<listitem><para><function> start()</function> [rellotge]: Engega el rellotge de simulació. </para></listitem>

<listitem><para><function> setScale(float s)</function> [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. </para></listitem>
</itemizedlist>
</para>
</sect1>

<sect1 id="dcop-test">
<title>Provar les funcions DCOP</title>
<para>Podeu provar les funcions DCOP molt fàcilment emprant el programa <application>kdcop</application>. Quan executeu <application>kdcop</application>,veureu una llista en arbre de tots els programes en execució; si &kstars; s'està executant serà llistat. La majoria de les funcions <abbrev>DCOP</abbrev> són llistades sota la capçalera <quote>KStarsInterface</quote>, però les funcions del rellotge són llistades sota <quote>clock</quote>. 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. </para>
</sect1>

<sect1 id="dcop-script">
<title>Escriure un script DCOP</title>
<para>Les funcions <abbrev>DCOP</abbrev> 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. </para>
<para>
<programlisting>#!/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
##
</programlisting>
</para>
<para>Desar aquest script a un fitxer. El nom de fitxer pot ser qualsevol cosa al vostre gust, suggereixo quelcom descriptiu com <filename>seguimentlluna.kstars</filename>. Llavores escriviu el comandament per a tornar executable a l'script: <userinput><command>chmod</command> <option>a+x</option> <parameter>seguimentlluna.kstars</parameter></userinput>. Ara, es podrà executar l'script en qualsevol moment escrivint <userinput><command>./trackmoon.kstars</command></userinput> 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 <command>dcopstart</command> en un script per a iniciar una nova instància de &kstars;. </para>
<para>Tot seguit ve la explicació de l'script. La primera línia identifica el fitxer com a un script de <command>BASH</command>. Les dues línies següents són <firstterm>comentaris</firstterm> (qualsevol línia que comenci per <quote>#</quote> é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 <varname>KSTARS</varname> identifica al procés de &kstars; que s'està executant actualment, usant el comandament <command>dcopfind</command>. <varname>MAIN</varname> i <varname>CLOCK</varname> a dues interfícies <abbrev>DCOP</abbrev> associades amb &kstars;. </para>
<para>La resta de l'script és la llista real de les crides <abbrev>DCOP</abbrev>. Els primer joc de comandaments estableix la vista a emprar el sistema de coordenades equatorials establint l'opció <quote>UseAltAz</quote> a <quote>false</quote> (altra vegada, podreu veure una llista de totes les opcions que <abbrev>changeViewOption</abbrev> pot usar examinant el vostre fitxer de configuració <filename>kstarsrc</filename>). 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ó. </para>
<para>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 <email>kstars@30doradus.org</email>; 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 <email>kstars-devel@lists.sourceforge.net</email> o informant d'un error «wihslist» al bugzilla. </para>
</sect1>
</chapter>

