Como portar programas para a GêBR

Ricardo Biloti

20/10/2010

É possível incrementar a GêBR, acrescentando programas à interface. Isto é feito construindo a especificação do programa para a GêBR, denominada menu. A escrita de um menu para um programa é facilmente realizada com a interface para criação e edição de menus, a DéBR. Este tutorial descreve os passos para a criação de um menu.

Quais programas podem entrar na GêBR

A GêBR é uma interface muito flexível, servido para uma grande diversidade de programas e propósitos. Porém a GêBR faz algumas suposições sobre os programas:

  1. Deve ser possível executar o programa através da linha de comando de um terminal. Por exemplo, isto impossibilita portar uma subrotina Fortran ou C, ou mesmo um programa Matlab, para a GêBR, uma vez que todos estes não podem ser executados diretamente num terminal. Entretanto é possível construir um programa principal em Fortran ou em C, para executar a subrotina desejada, ou compilar um programa Matlab de maneira que ele se torne stand-alone.
  2. O programa deve poder ser controlado através de opções de linha de comando. Quão melhor o comportamento do programa puder ser definido por parâmetros e opções de linha de comando, mais útil será a GêBR como interface para este programa.
  3. O programa deve preferencialmente receber seus dados através da entrada padrão, e retornar ao usuário seu produto através da saída padrão do sistema. Programas que se comportam desta forma são passíveis de serem encadeados com outros programas. Caso o programa não trabalhe desta maneira, ainda é viável porta-lo para a GêBR porém seu uso em fluxos de processamento fica limitado.
  4. O programa, uma vez executado, possivelmente com opções de linha de comando, não deve solicitar informações ao usuário de maneira interativa, via terminal. Atualmente a GêBR não tem suporte a programa interativos.

Menu × Programa

A entidade mais elementar da GêBR, aquela utilizada para construir fluxos complexos dentro da interface, não é um programa mas sim um menu.

Um menu é a descrição de uma seqüência elementar de programas, encadeados para a realização de uma tarefa específica.

Esta seqüência elementar de programas pode ser composta por um único programa ou por vários programas. Por exemplo, suponha que temos três programas ProgA, ProgB e ProgC. É possível criar menus descrevendo cada um destes programas independentemente, digamos, MenuA, MenuB e MenuC. Porém se for uma tarefa muito comum utilizar o programa ProgA e ProgC em seqüência, então é interessante construir um quarto menu, digamos MenuAC, que já representa os dois programas em conjunto. Desta forma, um usuário da GêBR interessado na tarefa realizada por esta combinação de programas não precisa se preocupar em criar um fluxo encadeando manualmente ProgA e ProgC, através dos menus MenuA e MenuC. Ele pode diretamente utilizar o MenuAC. Isto serve para facilitar a composição de fluxos para tarefas de rotina, realizadas por seqüências bem estabelecidas de programas.

Cada programa pode estar representado fielmente ou não num menu. Diz-se que um programa está representado fielmente no menu se for possível fazer uso de todos os recursos do programa, da mesma forma que poderíamos utiliza-lo através da linha de comando. Porém, se na tarefa de cadastrar o programa no menu, alguns de seus parâmetros forem suprimidos, definidos rigidamente, ou definidos com menos opções, diz-se que a representação do programa não é fiel.

Via de regra, deve-se sempre que possível criar menus que representem fielmente programas, fornecendo assim ao usuário da GêBR toda a flexibilidade que ele teria se utilizasse os programas diretamente na linha de comando, porém com as vantagens da interface gráfica. Entretanto, pode ser muito útil também representar programas com restrições de parâmetros ou opções pré-definidas. Por exemplo, considere o programa ls que lista arquivos em um diretório. Este programa tem mais de cinqüenta parâmetros. Logo um menu completo para este programa terá uma longa lista de parâmetros a disposição do usuário da GêBR. Um usuário inexperiente poderia ficar confuso ou ter dificuldade para encontrar o parâmetro que lhe interessa dentro desta longa lista. Seria então interessante criar um segundo menu para o programa ls, que tivesse apenas os parâmetros mais comuns.

DéBR – Editor de menus da GêBR

A criação de menus para a GêBR é feita através da DéBR. O processo de portar um programa para a GêBR é, a grosso modo, o de alimentar um formulário descrevendo o funcionamento do programa.

A primeira vez que a DéBR for executada, a janela de preferências será automaticamente exibida, para que o usuário configure-a adequadamente. O usuário deve verificar e corrigir os campos Nome e E-mail. O campo Diretório de menus especifica onde os menus criados pela DéBR serão salvos por padrão. Além disso, quando a DéBR for inicializada, os menus daquela pasta serão automaticamente carregados. É recomendável escolher uma pasta exclusivamente para a criação/edição de menus. Por fim, os campos Editor HTML editor e Navegador especificam qual editor será utilizado para a edição da documentação do menu e qual navegador será utilizado para a exibição da documentação, respectivamente.

Concluídos os ajustes das preferências, a janela principal da DéBR será exibida. O trabalho agora é preencher os campos do formulário, descritos na próxima seção.

Portando um programa passo-a-passo

O processo de portar um programa consiste das seguintes fases:

  1. Descrição geral do menu, como título, frase curta explicando seu propósito, documentação detalhada, autor, e categorias a que este menu pertence.
  2. Descrição dos programas que compõe o menu (lembre que um menu pode especificar um único programa ou uma seqüência de programas).
  1. Descrição geral do programa, a maneira como ele lida com a entrada e saída de dados, título do programa, arquivo executável do programa, frase curta explicativa do propósito do programa, documentação detalhada do programa, endereço de internet onde podem ser encontradas mais informações sobre o programa.
  2. Descrição de cada parâmetro que controla o programa, enumerando os diversos tipos de parâmetros e descrevendo-os.

Descrição geral do menu


Iniciamos pela edição da propriedades de um menu. Esta seção descreve os dados gerais do menus. Vamos detalha-los um a um.

Descrição dos programas que compõem o menu


Para descrever um programa o usuário deve iniciar especificando como o programa lida com a entrada e saída padrão do sistema, e com a saída padrão de erro. Este passo é fundamental para o correto funcionamento do menu. Por exemplo, o programa suximage lê dados da entrada padrão, porém como seu objetivo é exibir um gráfico na tela, não grava dados na saída padrão. Mas como reconhecer quando um programa lê dados da entrada padrão do sistema, ou escreve na saída padrão? Para sabermos isto, devemos saber como o programa é executado na linha de comando. Um programa que leia dados da entrada padrão e escreva dados na saída padrão tipicamente será executado da seguinte maneira:

programa < arquivo_de_entrada  > arquivo_de_saída  2> arquivo_de_saída_de_erro

Na linha de comando, o caractere "<" seguido de um arquivo significa que o arquivo especificado será redirecionado à entrada padrão, ou seja, utilizado como entrada para o programa.O caractere ">" seguindo de um arquivo significa os resultados produzidos pelo programa serão gravados nesse arquivo, ou seja, este arquivo toma o papel da saída padrão do programa. Por fim, "2>" é o redirecionamento da saída padrão de erro para o arquivo que o segue. Quando um programa que escreve na saída padrão é executado sem a especificação de um arquivo de saída, a saída do programa é exibida na terminal onde ele foi executado. O mesmo ocorre para a saída de erro.

Descrição geral do programa


Da mesma forma que para menus, há campos parecidos para descrever características gerais dos programas. Os campos Título e Descrição tem exatamente a mesma interpretação que antes.

Descrição dos parâmetros do programa


A última etapa para o cadastramento de programas para a GêBR é a descrição de cada parâmetro do programa (ou de cada parâmetro que você queira que o usuário da GêBR tenha acesso). Antes de explicar como preencher estas informações, vejamos quais o tipos de parâmetros de linha de comando são suportados pela GêBR.

  1. Números inteiros (inteiro) – É destinado a representar parâmetros de linha de comando cujo argumento é um número inteiro.
  2. Números reais (real) – Analogamente, este parâmetros presta-se à descrição de opções de linha de comando cujo argumento é um número real.
  3. Faixa de números (intervalo) – Este tipo é adequado para representar parâmetros cujo argumento é um número delimitado entre valores mínimo e máximo. Serve tanto para número inteiros ou reais, pois permite especificar com quantas casas decimais o número será armazenado.
  4. Texto (texto) – Este tipo destina-se a parâmetros cujo argumento é um texto.
  5. Booleano (flag) – Utilizado para a representação de opções de linha de comando que só aceitam dois estados (ligado/desligado ou sim/não ou verdadeiro/falso ou 0/1).
  6. Arquivo (arquivo) – Para parâmetros que recebem como argumento o nome de um arquivo (ou de um diretório). Repare que o nome de um arquivo poderia ser armazenado como texto, porém utilizando esta forma de representação o usuário da GêBR poderá utilizar ferramentas de navegação pelo sistema de arquivos, por exemplo. É preciso especificar se o argumento esperado será de fato um arquivo ou um diretório.
  7. Lista de opções (enum) – Utilizado para a representação de opções de linha de comando que aceitam apenas valores escolhidos dentro de uma lista de opções predefinidas. Por exemplo, o combustível de um automóvel só poderia ser "gasolina", "álcool", "ambos (flex)", ou "gás".
  8. Grupos de parâmetros (grupo) – Este tipo de parâmetro não serve para representar uma opção de linha de comando do programa, mas sim para agrupar parâmetros elementares (quaisquer uns dos descritos anteriormente) de maneira que eles sejam apresentados como um bloco na GêBR. Por exemplo, um programa para criar um gráfico poderia receber como parâmetros de linha de comando as especificações do eixo das abcissas e das ordenadas. Todos os parâmetros que descrevem o eixo das abcissas poderiam estar agrupados num grupo "Eixo das Abcissas" enquanto que os parâmetros relativos ao eixo das ordenadas poderiam ser agrupados dentro do grupo "Eixo das Ordenadas". Esta funcionalidade permite uma melhor organização da interface, tornando-a mais "limpa" para o usuário. Além disto, um grupo tem outros recursos avançados. O primeiro deles é a possibilidade de especificar que os parâmetros pertencentes ao grupo são mutuamente exclusivos, ou seja, apenas um deles pode estar definido. Por exemplo, em bombas de combustível ou você especifica quantos litros quer abastecer ou quanto quer pagar, mas as duas coisas não podem ser definidas em simultâneo. Outro recurso é a instanciabilidade. Um grupo instanciável, permite que todos os seus parâmetros sejam definidos pelo usuário múltiplas vezes.

Por fim, é possível especificar se o parâmetro elementar (de 1 a 7 na lista acima) aceitará receber um único valor ou uma lista de valores (todos do mesmo tipo). Por exemplo, um parâmetro inteiro que descreva as página que serão impressas de um documento, poderia receber como argumento "1,2,5,14,21". Para tanto basta definir o separador que será utilizado entre os valores da lista (no exemplo anterior, o caractér ",").

Independentemente da escolha do tipo utilizado para a representação do parâmetro de linha de comando, para todos é necessário preencher os seguintes campos:

A partir da versão 0.9.13, a DéBR passou a ter um botão para validação de menus. Após o preenchimentos completo dos dados do menu, o usuário pode utilizar este recurso para realizar uma conferência rápida (e muito simplificada) de alguns aspectos dos menu. Por exemplo, a DéBR destacará parâmetros que estejam sem rótulo, ou menus sem documentação, além de não observâncias ao estilo adotado. Entretanto, mesmo quando validador não detecta erros não há garantia de que o menu esteja correto.

A partir da versão 0.9.17, a  função de validação foi muito sofisticada. Os campos são validados já a medida que são preenchidos. Quando um campo é preenchido incorretamente,  em algumas situações, a DéBR pode até mesmo oferecer uma opção de correção automática. Por exemplo, caso a frase de descrição de um menu não tenha sido iniciada por uma letra maiúscula, a DéBR pode fazer a correção diretamente (se o usuário aceitar).