# Script til KStars: DCOP-grænsefladen

Et af målene med &kstars; er at kunne udføre komplicerede hændelsesforløb fra et script. Det vil sætte dig i stand til at forevise en virtuel tur gennem himmelrummet. Og det vil sætte lærere i stand til at illustrere astronomiske fænomener live for klassen. Det kan allerede lade sig gøre at lave sådanne script til &kstars;, selvom ikke alle de funktioner vi har planlagt er klar. Og selvom vi i fremtiden vil lave et fint grafisk værktøj til at skrive scriptene med, må du foreløbigt tage til takke med at skrive dem i hånden. Dette kapitel vil hjælpe dig til at skrive script til &kstars;.

&kde;s arkitektur stiller de nødvendige rammer til rådighed for at integrere script i programmerne via grænsefladen DCOP. DCOP står for Desktop Communication Protocol. &kde;-programmer kan styres af andre programmer gennem DCOP fra en terminalprompt eller fra et tekst-script.

## DCOP-funktioner

&kstars; DCOP-grænseflade indeholder følgende funktioner:

- `lookTowards( const QString direction )`: Drejer stjernekortet i den retning funktionens argument angiver. Det kan være navnet på ethvert objekt på himlen eller et af fælgende retningsord eller forkortelser: zenit (eller z), north (n), northeast (ne), east (e), southeast (se), south (s), southwest(sw), west(w), northwest (nw).

- `setRaDec( double ra, double dec )`: Drejer stjernekortet i retning af de angivne koordinater i ækvatorsystemet.

- `setAltAz(double alt, double az)`: Drejer stjernekortet i retning af de angivne koordinater i horisontsystemet.

- `zoomIn()`: Zoom ind.

- `zoomOut()`: Zoom ud.

- `defaultZoom()`: Zoom til standardniveauet = 3.

- `setLocalTime(int yr, int mth, int day, int hr, int min, int sec)`: Sæt simuleringens ur til den angivne dato og tid.

- `waitFor( double t )`: Hold pause i t sekunder før de næste kommandoer i scriptet udføres.

- `waitForKey( const QString k )`: Stop udførelsen af scriptet indtil brugeren trykker på en bestemt tast. På nuværende tidspunkt kan man kun bruge enkelttaster ikke tastekombinationer (som fx &Ctrl;C). Skriv space for at bruge mellemrumstasten.

- `setTracking( bool track )`: Slår følgning af et objekt til og fra.

- `changeViewOption( const QString option, const QString value )`: Tilret en visningsindstilling. Der er mange indstillinger der kan tilrettes. Alle indstillinger der kan ændres i vinduet Indstil &kstars; kan tilrettes her også. Det første argument er indstillingens navn (navnene tages fra opsætningsfilen `kstarsrc`). Det andet argument er den værdi du vil give indstillingen. Argumentbehandlingen er skrevet så den skulle være solid, så hvis du skriver noget forkert skulle den fejle på en pæn måde.

- `setGeoLocation( const QString city, const QString province, const QString country )`: Ændrer det sted himlen ses fra til den angivne by. Hvis den ikke findes i KStars sker der ingenting.

- `stop()` [clock]: Stopper tiden i simuleringen.

- `start()` [clock]: Starter tiden i simuleringen.

- `setScale(float s)` [clock]: Angiver hvor hurtigt tiden skal gå i simuleringen. s=1.0 er normal hastighed, 2.0 er dobbelt hastighed osv.

## Test DCOP-funktionerne

Du kan teste DCOP-funktionerne meget nemt med programmet kdcop. Når du kører kdcop kan du se en trævisning af alle kørende programmer. Hvis &kstars; kører er den med på listen. De fleste af DCOP-funktionerne er anført under overskriften KStarsInterface, men tidsfunktionerne findes under clock. Dobbeltklik på enhver af funktionerne for at udføre den. Hvis funktionen kræver argumenter vil et vindue blive åbnet hvor du kan skrive værdierne.

## Skriv et DCOP-script

DCOP-funktionerne kan også kaldes fra en UNIX-kommandolinje, og de kan lægges ind i et script. Vi vil vise et eksempel-script der skifter koordinatsystemet til ækvatorsystemet, drejer stjernekortet så månen er i fokus, zoomer lidt ind, og får uret til at gå en time i sekundet. Du kan bruge scriptet som skabelon når du laver dine egne script. Jeg vil vise hele scriptet først og derefter forklare de enkelte dele.

    #!/bin/bash
    #KStars script: Følg månen!
    #
    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
    ##

Gem scriptet som fil. Du kan benytte ethvert filnavn efter eget ønske. Men vi foreslår noget beskrivende som fx `FølgMånen.kstars`. Skriv så følgende kommando for at gøre scriptet eksekverbart: ``chmod` `a+x` `FølgMånen.kstars`` . Scriptet kan så køres ved at stille sig i den mappe hvor scriptet ligger og skrive ``./FølgMånen.kstars``. Bemærk at scriptet kun bliver udført hvis &kstars; allerede er åbnet. Du kan bruge kommandoen `dcopstart` i scriptet hvis et nyt &kstars;-vindue skal åbnes.

Her følger en forklaring på scriptet. Den øverste linje identificerer scriptet som et `BASH` shell script. De følgende to linjer er kommentarer (alle linjer der starter med # er kommentarer og ignoreres af kommandofortolkeren). De næste tre linjer definerer nogle bekvemme variabler som vil blive brugt senere. `KSTARS`-variablen identificerer den kørende &kstars;-proces, vha. `dcopfind`-kommandoen. Variablerne `MAIN` og `CLOCK` identificerer de to DCOP-grænseflader der er tilknyttet &kstars;.

Resten af scriptet er den egentlige liste af DCOP-kald. Den første kommando sætter stjernekortet op til at benytte himmelkoordinatsystemet ækvatorsystemet, ved at sætte UseAltAz til false (som sagt kan du se listen over de tilgængelige indstillinger af changeViewOption i konfigurationsfilen `~/.kde/share/config/kstarsrc`). Den næste kommando centrerer stjernekortet på Månen, og får stjernekortet til at følge Månen. Zoom-niveauet sættes så der zoomes 4 gange ind. Så sættes urets tidsskala så der går 1 time i sekundet (der er jo 3600 sekunder i en time), og uret startes (hvis det ikke kørte i forvejen). Den næste linje laver en pause på 20 sekunder i scriptet, mens vi følger månens vandring over himlen. Til sidst stoppes tiden og der zoomes ud til normal visning.

Vi håber du kan bruge scriptmuligheden i &kstars;. Hvis du laver et interessant script må du meget gerne sende det til kstars@30doradus.org. Vi vil gerne se hvad du har lavet. Måske vil vi også lægge nogle script ud på vores hjemmeside. Vi vil også gerne høre fra dig hvis du har forslag til forbedringer af scriptmuligheden (og/eller resten af &kstars;) på kstars-devel@lists.sourceforge.net eller send en ønskeliste via KDE's fejlbehandlingssystem bugzilla.