SDL (Specification and Description Language) é uma das principais linguagens utilizadas para especificação de protocolos existentes atualmente. O propósito da recomendação de SDL pelo CCITT é prover uma linguagem para especificação e descrição não ambígua do comportamento de sistemas de telecomunicações. Um aspecto negativo da linguagem SDL é a falta de construções do tipo IF-THEN, WHILE-DO, DO-UNTIL, já utilizadas tradicionalmente em linguagens de programação [TRI 92], que dificultou a representação do sistema.
Como SDL permite duas formas de representar sistemas: gráfica (SDL/GR) e textual (SDL/PR), a escolhida para a representação do SAFO foi a gráfica ( SDL/GR - Graphical Representation), já que ambas são equivalentes.
A implementação do sistema foi feita através de módulos:
Módulo Principal
O SAFO é formado por um conjunto de módulos ( ferramentas) independentes, ativados a partir do módulo principal. Figura A-6.1
Após as inclusões, declarações e inicializações necessárias, o sistema permanece em `loop' até a escolha de uma das opções disponíveis, que pode ser a execução de uma das ferramentas, a solicitação de help, a programação do temporizador, a inclusão de uma ferramenta ou a saída do sistema.
Módulo das Ferramentas
No desenvolvimento do sistema, houve a grande preocupação de padronização dos módulos das ferramentas para facilitar o seu desenvolvimento e agilizar a implementação das dez ferramentas. Todas tem a mesma estrutura principal apresentada pela Figura A-6.2
Em linhas gerais, o que se altera de uma ferramenta para outra são as variáveis, e a função apply-func(), que executa a ferramenta em si, após montar o formato final da linha de comando e criar o processo de execução da ferramenta com todas as suas particularidades.
Módulo Assistente
A Figura A-6.3 apresenta o fluxograma do módulo Assistente.
Sempre que o usuário necessitar de um auxílio na interpretação dos resultados e pressionar o botão `Assistant', a rotina apply-func() é ativada. Primeiramente acessa o arquivo de saída dos resultados, compara com arquivo de chaves e retorna com a chave apropriada ( rotina retorna-chave()). Verifica se é uma mensagem conhecida, se não for chama a rotina nova-mensagem (), caso contrário, acessa o arquivo de recomendações ( chave1), localiza as regras através da chave e abre uma nova janela apresentando a chave, a mensagem, as prováveis causas da mensagem e possíveis soluções, se for o caso.
O arquivo de recomendações (chave1) é único para todas as ferramentas e a sua estrutura é formada pelas informações de nome da ferramenta e identificação da chave e as regras com causas prováveis da mensagem e sugestões/comentários para tentar solucionar o problema. Uma descrição completa foi apresentada na seção 4.4.
Módulo Timer
O módulo Timer, apresentado na Figura A-6.4, é ativado quando o usuário deseja executar alguma ferramenta em background, mesmo que ela não faça parte da interface gráfica do SAFO.
A rotina cron-active() obtém a última linha de comando utilizada na crontab e aguarda pela opção do usuário, que pode ser Clear Line, Apply, Help ou Cancel. A função de Apply é que realizará o acréscimo da nova linha de comando na tabela crontab, ou criará uma nova tabela, conforme escolha do usuário.