# Script per KStars: l'interfaccia DCOP

Uno degli obiettivi di &kstars; è permettere la riproduzione di complesse sequenze di eventi a partire da uno script. Ciò ti permetterà di creare tour virtuali del cielo, e darà agli insegnanti un mezzo per realizzare dimostrazioni didattiche che illustrino determinati concetti astronomici. È già possibile scrivere questo tipo di script per &kstars;, anche se non tutte le funzioni progettate sono state incluse. Inoltre, sebbene sia in progetto un'interfaccia grafica per la realizzazione di script, per il momento essi vanno scritti a mano. Questo capitolo spiega come realizzare script per &kstars;.

L'architettura &kde; fornisce la struttura necessaria per le applicazioni con supporto agli script tramite l'interfaccia DCOP. DCOP sta per Desktop Communication Protocol (Protocollo di Comunicazione Desktop); attraverso DCOP le applicazioni &kde; possono essere controllate da altre applicazioni, da un prompt di terminale o attraverso uno script di testo.

## Funzioni DCOP

L'interfaccia DCOP di &kstars; include le seguenti funzioni:

- `lookTowards( cost QString direzione)`: punta il display nella direzione specificata dall'argomento. Può trattarsi del nome di un qualsiasi oggetto celeste, o di una delle seguenti parole o abbreviazioni: zenith (o z), per lo zenit, north (n) per il nord, northeast (ne) per il nordest, east (e) per l'est, southeast (se) per il sudest, south (s) per il sud, southwest(sw) per il sudovest, west(w) per l'ovest, northwest (nw) per il nordovest.

- `setRaDec( double ar, double dec )`: centra il display sulle coordinate equatoriali specificate.

- `setAltAz(double alt, double az)`: centra il display sulle coordinate orizzontali specificate.

- `zoomIn()`: aumenta il livello di zoom del display.

- `zoomOut()`: diminuisce il livello di zoom del display.

- `defaultZoom()`: riporta il valore dello zoom a 3 (valore predefinito).

- `setLocalTime(int anno, int mese, int giorno, int ora, int min, int sec)`: imposta l'orologio della simulazione alla data e ora specificate.

- `waitFor( double t )`: attende t secondi prima di continuare con i comandi successivi.

- `waitForKey( cost QString k )`: arresta l'esecuzione dello script fino a quando l'utente non preme il tasto specificato. Attualmente non è possibile specificare una combinazione di tasti (come &Ctrl;C); limitati a usare tasti semplici. Puoi digitare space per indicare la barra spaziatrice.

- `setTracking( bool track )`: attiva/disattiva l'inseguimento.

- `changeViewOption( cost QString opzione, cost QString valore )`: modifica un'opzione di visualizzazione. Ci sono decine di opzioni disponibili; praticamente tutto ciò che si può cambiare nella finestra Configura &kstars; può essere cambiato anche qui. Il primo argomento è il nome dell'opzione (i nomi sono presi dal file di configurazione `kstarsrc`), e il secondo è il valore desiderato. L'interprete degli argomenti è stato progettato per essere robusto, quindi dovrebbe arrestarsi senza conseguenze qualora riceva dati non validi.

- `setGeoLocation( cost QString città, cost QString provincia, cost QString nazione )`: imposta la città specificata come località di osservazione. Se non viene trovata alcuna città corrispondente agli argomenti, il comando è ignorato.

- `stop()` [orologio]: arresta l'orologio della simulazione.

- `start()` [orologio]: avvia l'orologio della simulazione.

- `setScale(float s)` [orologio]: imposta il passo dell'orologio della simulazione. s=1.0 corrisponde al tempo reale, 2.0 è due volte più veloce, e così via.

## Provare le funzioni DCOP

Puoi provare le funzioni DCOP con facilità tramite il programma kdcop. All'avvio di kdcop vedrai una lista ad albero di tutti i programmi in esecuzione, dunque se &kstars; è in esecuzione vi sarà compreso. La maggior parte delle funzioni DCOP sono elencate sotto la voce KStarsInterface, ma le funzioni relative all'orologio si trovano sotto clock. Fai doppio clic su una funzione per eseguirla. Se è richiesto un argomento, comparirà una finestra in cui potrai inserirne il valore.

## Scrivere uno script DCOP

Le funzioni DCOP si possono anche invocare dalla riga di comando UNIX, ed è possibile raggrupparle in uno script. Creeremo ora uno script di esempio che passa alle coordinate equatoriali, punta la Luna, aumenta un poco lo zoom e accelera l'orologio a un'ora per secondo. Dopo aver inseguito la Luna per venti secondi, l'orologio viene messo in pausa e lo zoom diminuisce. Puoi utilizzare questo script come modello per crearne di nuovi. Cominceremo col mostrare il listato completo, per poi illustrarne le varie parti.

    #!/bin/bash
    #Script KStars: insegui la Luna!
    #
    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
    ##

Salva questo script su file. Il nome del file è a piacere, ma suggeriamo qualcosa di descrittivo, del tipo `inseguiluna.kstars`. Quindi digita il comando seguente per rendere lo script eseguibile: ``chmod` `a+x` `inseguiluna.kstars`` . Lo script può ora essere eseguito in qualsiasi momento digitando ``./inseguiluna.kstars`` nella cartella che lo contiene. Nota che lo script funziona soltanto se c'è già un'istanza di &kstars; in esecuzione. Puoi utilizzare il comando `dcopstart` in uno script per lanciare una nuova istanza di &kstars;.

Ora veniamo alla spiegazione dello script. La prima riga identifica il file come uno script di shell `BASH`. Le due righe seguenti sono dei commenti (ogni riga che inizia per # è un commento, e viene ignorata dalla shell). Le tre righe seguenti definiscono alcune variabili che torneranno utili in seguito. La variabile `KSTARS` identifica il processo di &kstars; attualmente in esecuzione, tramite il comando `dcopfind`. `MAIN` e `CLOCK` identificano le due interfacce DCOP associate a &kstars;.

Il resto dello script è la lista vera e propria di chiamate DCOP. Il primo comando fa sì che il display utilizzi le coordinate equatoriali, impostando l'opzione UseAltAz a false (ribadiamo che puoi vedere una lista di tutte le opzioni utilizzabili da changeViewOption esaminando il tuo file di configurazione `kstarsrc`). Il comando successivo centra il display sulla Luna, e attiva automaticamente l'inseguimento. Impostiamo quindi il livello predefinito di zoom, per poi aumentare l'ingrandimento cinque volte. L'istruzione successiva imposta il passo dell'orologio a un'ora per secondo (3600 secondi fanno un'ora), dopodiché l'orologio viene avviato (casomai non fosse già in funzione). La riga seguente mette lo script in pausa per venti secondi, mentre inseguiamo la Luna nel suo movimento attraverso il cielo. Infine arrestiamo l'orologio e riportiamo lo zoom al valore predefinito.

Ci auguriamo che tu sfrutti appieno il supporto agli script di KStars. Se hai creato uno script interessante, mandalo a kstars@30doradus.org; ci piacerebbe vedere quello che hai fatto, e potremmo anche pubblicare alcuni script sulla nostra pagina web. Inoltre, se hai delle idee su come migliorare il supporto agli script (o qualsiasi altra parte di &kstars;) facci sapere presso kstars-devel@lists.sourceforge.net o inoltra una richiesta di funzionalità tramite bugzilla.