Curso de scripvox - aula9 (Por Fabiano Ferreira)

    Execuo externa e desvios
    Na aula anterior, vimos o comando desvia, que consiste em desviar o
fluxo normal de execusso para um ponto desejado dentro do programa,
ponto este que  marcado previamente com um rtulo.
    Nesta aula, vamos ver outras possibilidades de desvio da execusso
normal e, veremos tambm a execusso externa.



    *Comando chama;
    Este comando  parecido com o comando desvia que vimos na aula
anterior. Sua utilizao requer que marquemos um ponto do programa com
um rtulo.

A diferena  que ele no desvia, literalmente, como acontece no comando
desvia.
   O bloco passado como parmetro para o comando chama  trazido para cima do ponto onde o interpretador est lendo e 
executado.
    O bloco a ser chamado  marcado com um sinal de @ (arroba), seguido
de um nome de identificao, e, na maioria das vezes,  enserrado com o
comando retorna.
    Ao encontrar o comando retorna, o interpretador volta para o ponto
onde aquele bloco foi chamado e executa a linha imediatamente abaixo da
chamada do bloco.
    Forma geral de uso do comando chama:
chama, um espao, sinal de arroba e o nome do bloco a ser chamado.
    Forma geral de marcao do bloco a ser chamado:
sinal de arroba e nome do bloco.
Nas linhas abaixo desenvolvemos a rotina pretendida.
    E fechamos o bloco com o comando retorna.

    Obs: o bloco a ser chamado deve estar sempre depois do comando chama
que o invoca.
    Uma dica  agrupar todos os blocos de chamadas ao final do programa.

Vejamos um exemplo prtico:

Escreve "Digite um nmero de 1 a 3:"
L n &
se n=1 chama @rotina1
Se n=2 chama @rotina2
Se n=3 chama @rotina3
Escreve "Tchau."
    Termina mudo

@rotina1
Escreve "Esta  a rotina1."
Retorna

@rotina2
Escreve "Esta  a rotina2:"
Retorna

@rotina3
Escreve "Esta  a rotina3."
Retorna

    No exemplo acima, o interpretador chama uma das 3 rotinas, de acordo
com a opo teclada.
Aps o trmino das rotinas, ele retorna e executa a prxima linha aps a
linha que chamou aquela rotina.

    Vamos entender melhor nosso exemplo acima:

    Na parte de verificao da opo teclada, o interpretador verifica
se a opo digitada foi a 1,
Vamos supor que foi a 1 realmente.
    Ento o programa chama o bloco denominado @rotina 1, executa o
bloco, que no caso,  s a escrita de uma mensagem e retorna para o
ponto de onde foi feita a chamada da rotina 1, ou seja, para a linha
onde diz que se n=1 chama @rotina 1.
Da ele executar a linha que vem abaixo desta.
No nosso caso,  uma condicional para verificar se a opo digitada foi
2.
No nosso caso, no.
Ento ele passa para a prxima linha e verifica se foi a opo3.
No caso, no.
Ento ele executa a prxima linha que  a exibio da mensagem "Tchau" e
aps o comando termina mudo.

    Notem que os blocos a serem chamados foram colocados aps o comando
termina mudo.
    Isso pode ser feito, o que no poderia era termos inserido os blocos
no incio do programa e utilizarmos o comando chama depois deles.

    No comando chama,  possvel utilizar vrias chamadas aninhadas, por
exemplo:

Escreve "Chamando rotina 1"
chama @rotina1
Escreve "Tchau."
Termina mudo

@rotina1
Escreve "Sou a rotina1:"
Escreve "Vou chamar a rotina 2:"
Chama @rotina2
Escreve "Devolta a rotina1."
Retorna

@rotina2
Escreve "Sou a rotina2, e vou chamar a rotina3:"
chama @rotina3
Escreve "Voltando a rotina2"
Retorna

@rotina3
Escreve "Eu sou a rotina3."
Retorna

    No exemplo acima, o programa principal chama a rotina 1;
Na rotina 1, chamamos a rotina 2; e na rotina 2, chamamos a rotina 3.
    Sendo assim, o comando retorna da rotina 3, nos leva de volta a
rotina 2.
O retorna da rotina 2 nos leva de volta para a rotina 1, e o retorna da
rotina 1 nos leva de volta ao programa principal.

    *Comando desvia;

    Na aula anterior, vimos o comando desvia.
    Aqui, vamos v-lo novamente, mas com uma forma um pouco diferente.
    Esta forma permite que possamos chamar um outro arquivo cmd e
execut-lo, como se fosse o mesmo arquivo.
    Vamos imaginar o seguinte:
Um script chamado a.cmd, e um outro script chamado b.cmd.
     possvel chamar dentro de a.cmd, o script b.cmd e execut-lo,
como se fosse um cdigo presente em a.cmd.
    A forma de uso do comando  a seguinte:
Desvia, um espao, a palavra script, um espao, nome do script entre
aspas.
     possvel ainda, desviar a execuo para outro arquivo apontando um
rtulo que est dentro desse outro arquivo.
Para isso fazemos o seguinte:
Desvia, um espao, a palavra script, um espao, nome do arquivo entre
aspas, espao, sinal de arroba e nome do rtulo.

    Exemplo:

*arquivo 1.cmd;
*Por Fabiano Ferreira;
*Em setembro de 2011;

Escreve "Esse  o arquivo 1.cmd"
Desvia script "2.cmd"
*fim do arquivo 1.

*Arquivo 2.cmd;
*Por Fabiano Ferreira;
*Em setembro de 2011;

Escreve "Esse  o arquivo 2.cmd"
Termina mudo
*Fim do arquivo 2.

    No exemplo acima temos dois cdigos.
    Um faz parte do arquivo 1.cmd.
O outro faz parte do arquivo 2.cmd.
    Executamos o script 1.cmd.
     exibida ento a mensagem "Esse  o arquivo 1.cmd".
    Logo abaixo, temos um desvio para executar o cdigo do script 2.cmd
    Da, o programa abandona o 1.cmd e vai executar o 2.cmd
    No nosso caso, exibe a string "Esse  o arquivo 2.cmd"  o
interpretador  enserrado.

    Vejamos agora outro exemplo:

*Arquivo 1.cmd;
*Por Fabiano Ferreira;
*Em setembro de 2011;

Escreve "Esse  o arquivo 1.cmd"
Desvia script "2.cmd" @teste
*Fim do arquivo 1;

*Arquivo 2.cmd;
*Por Fabiano;
*Em setembro de 2011;

@teste
    Escreve "Esse  o arquivo 2.cmd"
Termina mudo
*Fim do arquivo 2;

    No exemplo acima temos a mesma situao do primeiro exemplo do
comando desvia.
Dois arquivos.
1.cmd e 2.cmd.
    Executamos 1.cmd e logo  mostrada e falada a mensagem "Esse  o
arquivo 1.cmd"
Logo abaixo, um desvio para o arquivo 2.cmd, com a especificao do
rtulo chamado @teste.
Este rtulo est dentro de 2.cmd
    Nesse momento, o programa abandona a execusso de 1.cmd e executar
2.cmd, a partir do rtulo que foi especificado.
    No nosso caso, exibiu a mensagem "Esse  o arquivo 2.cmd" e abaixo,
o comando termina mudo, para enserrar o programa.

    Assim teminamos a aula9.
    Na prxima aula, vamos continuar falando de execusso externa e
desvios.

    Exerccio:

Construir uma calculadora bsica, utilizando a linguagem scripvox.
Caractersticas do programa:
*realizar 4 operaes: adio, subtrao, multiplicao e diviso;
*A diviso deve ser simples, no retornando resto, caso ele exista;
*o programa terminar quando o usurio digitar 0 como primeiro termo de
uma operao.

    *Entregar a resposta at o dia 25/09 enviando para o seguinte email:
qst-scripvox@sanfersite.com.br

Boa sorte!
