# Scripting o KStars: A Interface DCOP

Um dos objetivos do &kstars; é fornecer a habilidade de executar comportamentos complexos a partir de um script. Isto permitirá que você crie passeios virtuais no universo, e possibilitará que professores construam demonstrações em uma aula para ilustrar determinados conceitos de astronomia. Isto já é possível através dos scripts para o &kstars;, apesar de nem todas as funções desejadas estarem incluídas. Além disso, por enquanto não temos um construtor de scripts gráfico, devendo os scripts serem escritos manualmente. Este capítulo explanará como construir scripts para o &kstars;.

A arquitetura do &kde; fornece o ambiente de trabalho necessário para aplicativos com suporte a scripts através da interface DCOP. DCOP é uma acrônimo, do inglês, para Protocolo de Comunicação de Ambiente; através do DCOP, aplicativos &kde; podem ser controlados por outros aplicativos, a partir da linha de comando, ou através de um script de texto. NOTA DO TRADUTOR: Observem que os scripts são todos escritos no idioma inglês, não podendo os nomes de funções e argumentos serem traduzidos.

## Funções DCOP

A Interface DCOP do &kstars; inclui as seguintes funções:

- `lookTowards( const QString direction )`: Aponta o foco da tela na direção especificada pelo argumento. O argumento pode ser o nome de qualquer objeto no céu, ou uma das seguintes palavras direcionais ou abreviaturas: zenith (ou z), north (n), northeast (ne), east (e), southeast (se), south (s), southwest(sw), west(w), northwest (nw).

- `setRaDec( double ra, double dec )`: Aponta o foco da tela nas coordenadas equatorias especificadas.

- `setAltAz(double alt, double az)`: Aponta o foco da tela nas coordenadas horizontais especificadas.

- `zoomIn()`: Aumenta o nível de ampliação da tela.

- `zoomOut()`: Diminui o nível de ampliação da tela.

- `defaultZoom()`: Reinicia a tela para o nível de ampliação = 3 (o padrão).

- `setLocalTime(int yr, int mth, int day, int hr, int min, int sec)`: Configura o relógio da simulação para a data e hora especificadas.

- `waitFor( double t )`: Interrompe por t segundos antes de continuar com os comandos subsequentes do script.

- `waitForKey( const QString k )`: Para a execução do script até que o usuário pressione a tecla especificada. Até o momento, você não pode especificar combinações com teclas especiais (como &Ctrl;C); simplesmente use teclas simples. Você pode digitar space para indicar a barra de espaço.

- `setTracking( bool track )`: Alterna o engajamento do modo de rastreamento.

- `changeViewOption( const QString option, const QString value )`: Ajusta uma opção de visão. Existem dúzias e dúzias de opções disponíveis, basicamente tudo que você pode musar na Janela Configurar o &kstars; pode ser mudado aqui também. O primeiro argumento é o nome da opção (os nomes são obtidos a partir do arquivo de configuração `kstarsrc`), e o segundo argumento é o valor desejado. A análise do argumento foi feita para ser robusta, logo se você acidentalmente enviar dados ruins, ele simplesmente falhará.

- `setGeoLocation( const QString city, const QString province, const QString country )`: Muda a localização de observação para a cidade especificada. Se nenhuma cidade correspondente ao string do argumento for encontrada, então nada acontecerá.

- `stop()` [clock]: Para o relógio da simulação.

- `start()` [clock]: Inicia o relógio da simulação.

- `setScale(float s)` [clock]: Configura a taxa do relógio da simulação. s=1 corresponde ao tempo real; 2,0 é duas vezes mais rápido que o tempo real, etc.

## Testando as Funções DCOP

Você pode testar as funções DCOP muito facilmente usando o programa kdcop. Quando você executar o kdcop, você verá uma lista em árvore de todos os programas em execução; se o &kstars; estiver rodando ele será listado. A maioria das funções DCOP são listadas sob o cabeçalho KStarsInterface, mas as funções de relógio estão listadas sob o clock. Um clique-duplo em qualquer função irá executá-la. Se a função necessita de argumentos, uma janela se abrirá aonde poderá inserir os valores.

## Escrevendo um Script DCOP

Funções DCOP podem também ser chamadas a partir da linha de comando do UNIX, e elas podem ser encapsuladas em um script. Nós criaremos um script exemplo que alterna para as coordenadas Equatoriais, aponta a tela para a Lua, amplia um pouco, e acelera o relógio para 1 hora por segundo. Após rastrear a Lua por 20 segundos, o relógio é parado e a tela diminui a ampliação. Você pode usar este script como um modelo para criar novos scripts. Eu listarei todo o script primeiro, e então explanarei suas várias partes.

    #!/bin/bash
    #KStars script: Rastreando a Lua!
    #
    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
    ##

Salve este script para um arquivo. O nome do arquivo pode ser qualquer um que deseje, eu sugiro algo descritivo como `rastrolua.kstars`. Então digite o seguinte comando para tornar o script executável: ``chmod` `a+x` `rastrolua.kstars`` . O script pode então ser executado a qualquer momento digitando ``./rastrolua.kstars`` na pasta que contém o script. Observe que o script somente funcionará se uma instância do &kstars; já estiver rodando. Você pode usar o comando `dcopstart` em um script para lançar uma nova instância do &kstars;.

Agora vamos para a explanação do script. A linha superior identifica o arquivo como um script shell do `BASH`. As duas linhas seguintes são comentários (qualquer linha que inicie com o # é um comentário,e é ignorada pelo shell). As próximas três linhas definem algumas variáveis convenientes que serão usadas mais tarde. A variável `KSTARS` identifica o processo do &kstars; atualmente em execução, usando o comando `dcopfind`. `MAIN` e `CLOCK` identificam as duas interfaces DCOP associadas ao &kstars;.

O lembrete do script é a lista atual de chamadas DCOP. O primeiro comando configura a tela para usar as coordenadas Equatoriais configurando a opção UseAltAz para false (novamente, você pode ver a lista de todas as opções que o changeViewOption pode usar examinando seu arquivo de configuração `kstarrc`). O próximo comando centraliza a tela na Lua, e automaticamente engaja o rastreamento. Nós então configuramos o nível de ampliação padrão, e então a ampliação em cinco vezes. A seguir, a escala do tempo do relógio é configurada para 1 hora por segundo (3600 segundos é uma hora),e o relógio é iniciado (no caso de não estar rodando). A próxima linha para o script por 20 segundos enquanto nós rastreamos a Lua conforme ela se move no céu. Finalmente, nós paramos o relógio e reiniciamos o nível de ampliação para sua configuração padrão.

Nós esperamos que você goste das habilidades de script do KStars. Se você criar um script interessante, por favor envie eletronicamente para kstars@30doradus.org; nós gostaríamos de ver o que você fez, e talvez colocar alguns scripts em nossa página web. Além disso, se tiver qualquer idéia de como melhorar os recursos de script (ou qualquer parte do &kstars;), informe-nos em kstars-devel@lists.sourceforge.net ou envie um pedido de recurso novo para o bugzilla.