    Curso de scripvox - Aula5 (Por Fabiano Ferreira)

    Nesta aula, vamos enserrar a srie de comandos de interao com o
usurio e de manipulao de variveis, que esto sendo vistos desde a
aula 3.

    Considerem esta aula como o trmino da primeira fase do curso.
Na prxima aula, nossos programas comearo a tomar formas de 'programas
de verdade'.
    O que vamos comear a ver a partir da aula6 no sero mais apenas
comandos soltos, mas conceitos e comandos que abriro mais ainda o leque
de possibilidades no scripvox.

Bom... mas deixemos esse assunto pra prxima semana e vamos iniciar o
estudo dos comandos que fecham essa fase do nosso curso.

*Comando Transfere;
    Este comando  utilizado para copiar um valor de uma varivel para a
rea de transferncia e para copiar o valor da rea de transferncia
para uma varivel.


Forma geral:
Forma1:
 Transfere de varivel (copia o valor da varivel para a rea de
transferncia).
Forma2:
Transfere para variavel (copia o valor da rea de transferncia para uma
varivel).

Exemplos:

*Copiando o valor de uma varivel para a rea de transferncia;
*Por Fabiano Ferreira;
*Em agosto de 2011;

    Escreve "Digite uma frase qualquer:"
    L f
Transfere de f
Escreve "Contedo copiado para a rea de transferncia."
    Termina mudo

No exemplo acima,  pedido ao usurio que digite uma frase.
Esta ser armazenada na varivel f.
O valor digitado  copiado para a rea de transferncia com o comando
transfere de.

Vejamos outro exemplo:

*Exemplo do comando transfere para;
*Copiando o valor da rea de transferncia para uma varivel;
*Por Fabiano Ferreira;
*Em 06/08/2011;

    Escreve "Contedo presente na rea de transferncia:"
    Transfere para a
Escreve a
    Termina mudo

No exemplo acima,  lido da rea de transferncia o valor l presente,
com o comando transfere para.
A varivel a recebe o contedo da rea de transferncia e este 
mostrado na tela com o comando escreve.

*Comando substitui;
    Este comando serve para substituir valores dentro de uma varivel.
    Imagine, por exemplo, que em uma varivel, h diversas letras 'a'.
Gostaramos de substitu-las por um nmero '1'.
O comando substitui resolveria tranquilamente nosso problema.

Forma geral:
Substitui, um espao, nome da varivel onde ser feito a substituio,
um espao, valor atual, um espao e o novo valor.

Vejamos um exemplo:

*Exemplo do comando substitui;
*Gera o cdigo vermelho, inspirado no livro de Pedro bandeira - os karas;
*Autor: Fabiano Ferreira;
*Em 06/08/2011;

    Escreve "Escreva uma palavra ou frase."
Escreve "No utilize acentos nem maisculas:"
    L p
    Substitui p "i" "inis"
    Substitui p "a" "ais"
    Substitui p "e" "enter"
    Substitui p "o" "omber"
    Substitui p "u" "ufter"
    escreve p
    Termina mudo

Bem, deixe-me contar o que significa esse exemplo:
    H algum tempo li uma srie de livros do autor Pedro bandeira.
A srie se chamava 'Os karas'.
Era um grupo de 5 adolescentes que se metiam nas maiores enrascadas.
Esse grupo tinha um cdigo secreto, que no livro,  chamado de 'o cdigo
vermelho dos caras'.

O cdigo funcionava da seguinte forma:
numa palavra, onde aparecesse a letra a, trocava-se por 'ais'.
A letra e, trocava-se por 'enter'.
A letra i por 'inis'.
A letra o, por 'omber'.
A letra u, por 'ufter'.

O exemplo acima traduz uma frase para o 'cdigo vermelho'.

A varivel p recebe a frase via teclado do usurio.
Em seguida  feita a srie de substituies, usando o comando substitui,
para que seja obtida a frase na forma codificada.
Mas vamos olhar um pouco mais de perto esse exemplo para entendermos
melhor como o scripvox processa os comandos:

Na srie de substituies temos o seguinte cdigo:

    Substitui p "i" "inis"
    Substitui p "a" "ais"
    Substitui p "e" "enter"
    Substitui p "o" "omber"
    Substitui p "u" "ufter"

A pergunta que fao  a seguinte:
Por que comeamos com 'Substitui p "i" "inis"', quando o comum seria
comear com 'Substitui p "a" "ais"'.
Isso influenciaria na execusso do script ou seria algo insignificante?

Antes de alterar e executar, pense... pense o que aconteceria se a
rotina de substituio fosse escrita assim:
    Substitui p "a" "ais"
    Substitui p "e" "enter"
    Substitui p "i" "inis"
    Substitui p "o" "omber"
    Substitui p "u" "ufter"
    Lembre-se que o scripvox interpreta os programas de cima para baixo,
linha a linha.

*Comando tela;
    Este comando serve para alterar o estado da tela e para escrever
mensagens, com o comando escreve em posies predeterminadas.
Este comando tem os seguintes parmetros:
-Minimizada: deixa o programa invisvel;
-Normal: traz a tela do programa para o foco;
-Limpa: limpa a tela;
-@umnumero,outronumero: determina uma posio onde dever ser escrita
uma mensagem na tela;

Exemplo de cdigo:

*Exemplo de mudana de estado da tela;
*Autor: Fabiano Ferreira;
*Em 06/08/2011;

tela limpa
tela @10,10
Escreve "Curso de scripvox."

Tela minimizada
Escreve "Embora eu no aparea, ainda estou aqui!"
tela normal
Escreve "pronto, voltei!"
Termina mudo

O exemplo acima comea com o comando tela limpa, limpando a tela do
scripvox.
Em seguida, escrevemos a mensagem 'curso de scripvox' na coluna 10,
linha 10 da tela.
A posio  determinada na linha cujo o cdigo :
Tela @10,10

Depois temos a frase "embora eu no aparea, ainda estou aqui".
A estamos ilustrando o comando tela minizada.
Como a tela no est visvel, s  possvel ouvir a frase.
E por fim temos a frase "Pronto, voltei", usada para mostrar o comando
tela normal, que trouxe a janela desaparecida com o comando tela
minimizada.

*Comando bipa;

Este comando emite um bip ou um clec.
Quando queremos um bip, escrevemos no nosso script:
Bipa, ou bipa 0.
Quando queremos clec, escrevemos
Bipa 1.

Segue um exemplo:

*Exemplo de bips;
*Autor: Fabiano Ferreira;
*Em 06/08/2011;

Escreve "Ol, agora vou dar alguns bips:"
bipa
bipa
bipa
bipa
bipa
    Escreve "Pronto!, agora vamos emitir clecs?"
bipa 1
bipa 1
bipa 1
bipa 1
bipa 1
Escreve "Tchau."
Termina mudo

O exemplo acima inicia escrevendo a mensagem"ol, agora vou dar alguns
bips".
depois emite alguns bips com o comando bipa.

A seguir  mostrada a mensagem 'Pronto, agora vamos emitir alguns
clecs:', e o comando bipa 1  usado para a emisso de clecs.

*Comando cor e fundo;

Usados para controlar a aparncia da janela do programa.

O resultado obtido pode ser bastante interessante.
No caso de ns cegos, o ideal  tentar algumas cores e mostrar para
algum vidente, afim de sabermos o que estamos fazendo.

Forma geral:
Cor, um espao e um cdigo de 0 a 15.
Ou: fundo, um espao e um cdigo de 0 a 15.

Aqui est a lista dos cdigos das cores vlidas, de 0 a 15:
  Preto          = 0
  Azul           = 1
  Verde          = 2
  Ciano (Azul)   = 3
  Vermelho       = 4
  Magenta        = 5
  Marrom         = 6
  Branco fosco   = 7
  Cinza escuro   = 8
  Azul claro     = 9
  Verde claro    = 10
  Ciano claro    = 11
  Vermelho claro = 12
  Magenta Claro  = 13
  Amarelo        = 14
  Branco         = 15

Abaixo o exemplo retirado do manual oficial do scripvox:

*Exemplo de manipulao de cores;
*Retirado do manual oficial do scripvox;

    COR 4
    ESCREVE "Estou escrevendo este texto em vermelho"
    Fundo 9
    ESCREVE "Vermelho em fundo azul claro"
    FUNDO 0
    COR 7
    TELA LIMPA
Termina mudo

O exemplo acima escreve vrias frases com cores diferentes.

*Comando espera;
    Este comando paraliza o script por um certo tempo em segundos.
Forma geral:
Espera, um espao e um nmero.
O nmero representa quantos segundos o programa ficar parado, por
exemplo,
Espera 10, paraliza o programa por 10 segundos.
    Tambm  vlido utilizar uma varivel com um valor numrico aps o
comando espera, por exemplo:

Seja x 15
Espera x
    O programa paralizaria por 15 segundos, j que atribuimos a varivel
x o valor 15.



Exemplo de cdigo:

*Exemplo do comando espera;
*Por Fabiano Ferreira;
*Em 06/08/2011;

Escreve "Esperando por 10 segundos:"
espera 10
Escreve "Obrigado."
Termina mudo

O exemplo acima inicia escrevendo na tela a mensagem "esperando por 10
segundos".
Em seguida, o programa  paralizado com o comando espera, por 10
segundos.
Aps esse tempo, o programa volta a rodar e  escrita a mensagem
"Obrigado" e o programa termina., com o comando termina mudo.

*Comando toca;
    Este comando serve para reproduzir arquivos de som.
Forma geral:
Toca, um espao e o caminho completo do arquivo de som a reproduzir,
entre aspas.
    Se o arquivo especificado no for encontrado, o programa continua
normalmente.
Adicionando um & (e comercial) depois das aspas, o programa continua sua
execusso, no esperando o trmino da reproduo do arquivo de som.
Afim de evitar erros,  recomendvel que se consiga uma forma de
garantir que o arquivo de som esteja no caminho especificado.
Uma boa prtica, por exemplo, seria colocar os arquivos de som na mesma
pasta que o arquivo de script .cmd.
Nesse caso, nem  preciso passar o caminho completo do arquivo no
comando toca.

Vamos a um exemplo:

*Exemplo do comando toca;
*Por Fabiano Ferreira;
*Em 06/08/2011;

Escreve "Tocando um som:"
Toca "meusom.wav"
Escreve "Obrigado!"
Termina mudo

    O exemplo acima inicia escrevendo a mensagem "tocando um som:"
    A seguir,  utilizado o comando toca para reproduzir o arquivo
meusom.wav.
    Nota: O arquivo especificado no exemplo no existe,  apenas uma
ilustrao.
No caso desse exemplo, estamos conciderando que meusom.wav est na mesma
pasta que o arquivo do script cmd.

Aps tocar o som,  escrito a mensagem "obrigado" e o programa termina,
com o comando termina mudo.
    
O cdigo abaixo tambm  valido:

seja s "Meusom.wav"
Toca s

Nesse caso, o programa tocaria o arquivo meusom.wav, pois foi passado no
comando toca, a varivel s, que tem como valor o nome de um arquivo de
som.

*Comandos mci;

MCi,  a sigla para media control interface.

    No so comandos especficos de scripvox.
Na verdade, so funes nativas do sistema windows , e o que fazemos  apenas
passar os comandos ao scripvox, para que ele mande ao windows para que
este se encarregue de process-los.
    Existem comandos mci muito poderosos, para trabalhar com multimdia
das mais diversas formas.
Cd, arquivos de som, vdeos, em fim... com mci  possvel controlar
praticamente tudo na parte de multimdia.
Lamentavelmente, no contamos com um material em lingua portuguesa que
lista todos os comandos mci.
Temos bastante livros falando sobre o assunto, mas praticamente todos em
ingls.
     possvel encontrar no sistema dosvox alguns scripts que utilizam
alguns comandos mci.
Para quem  mais avanado e curioso, vasculhando os fontes do dosvox,
nos programas de som como o midiavox, podemos encontrar alguns comandos
mci.
Forma geral:
Mci, um espao, uma varivel e entre aspas, o comando mci desejado.
A varivel aps a palavra mci guarda  valores retornados por alguns
comandos mci, para que depois seja possvel tratar algum erro que possa vir a
ocorrer.
Por exemplo, alguns comandos podem retornar 0 ou 1, dependendo do
resultado da operao.
Mas no vamos nos preocupar com isso agora, certo?

Vejamos um pequeno exemplo de cdigo com o comando mci:

*Exemplo do uso de comando mci;
*Por Fabiano Ferreira;
*Em 06/08/2011;

MCI m "Set cdaudio door open"
espera 5
mci m "set cdaudio door closed"

Termina mudo

O exemplo acima abre a gaveta do cd da mquina do usurio.
Para isso foi usado o comando mci
Set cdaudio door open.
Em seguida, o programa  paralizado por 5 segundos com o comando espera
e a gaveta do cd e fechada.
Para isso, utilizamos o comando mci
set cdaudio door closed.
E finalizamos o programa com o comando termina mudo.

E assim terminamos a nossa aula5.
Na prxima semana, vamos tratar de um assunto de grande importncia:
execusso condicional.

Portanto, se h dvidas at aqui, se precisar de reforar os conceitos
vistos at agora, a hora  essa!
As aulas seguintes vo modificar de maneira significativa a forma de
olhar para um programa, e para que haja um bom aproveitamento disso, 
preciso que no fique nada mal exclarecido nessa fase, certo?
Ento estamos combinados, quero ver todo mundo afiado para a nova
jornada que vai comear, ok?

Exerccios:

1 - Para que serve o comando transfere?

2 - O comando espera paraliza o scripvox por alguns centsimos de
segundos.
Essa afirmao  correta?

3 - No comando bipa, qual a diferena entre bipa 0 e bipa 1?

4 - Faa um programa que escreva trs frases, sendo cada uma  com uma
cor diferente.

5 - Faa um programa que pea ao usurio para digitar algo.
O programa dever substituir todas as vogais contidas na string passada
pelo usurio por nmeros de 1 a 5, segundo as convenes a seguir:
Vogal a=1;
Vogal e=2;
Vogal i=3;
Vogal o=4;
Vogal u=5;
O resultado da substituio dever ser mostrado.

Dica:
Strings maisculas so diferentes de strings minsculas.
Portanto,
a e i o u,  diferente de
A E I O U.

Sabendo disso, faa com que o programa funcione para letras maisculas e
minsculas.


6 - Qual o comando devemos utilizar para que o programa continue em
execusso mas no fique visvel?

*Entregar as respostas at o dia 21/08, enviando para o email:
qst-scripvox@sanfersite.com.br

Boa sorte!
