    Curso de scripvox - Aula5 (Por Fabiano Ferreira)

    Nesta aula, vamos enserrar a série de comandos de interação com o
usuário e de manipulação de variáveis, que estão sendo vistos desde a
aula 3.

    Considerem esta aula como o término da primeira fase do curso.
Na próxima aula, nossos programas começarão a tomar formas de 'programas
de verdade'.
    O que vamos começar a ver a partir da aula6 não serão mais apenas
comandos soltos, mas conceitos e comandos que abrirão mais ainda o leque
de possibilidades no scripvox.

Bom... mas deixemos esse assunto pra próxima 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 variável para a
área de transferência e para copiar o valor da área de transferência
para uma variável.


Forma geral:
Forma1:
 Transfere de variável (copia o valor da variável para a área de
transferência).
Forma2:
Transfere para variavel (copia o valor da área de transferência para uma
variável).

Exemplos:

*Copiando o valor de uma variável para a área de transferência;
*Por Fabiano Ferreira;
*Em agosto de 2011;

    Escreve "Digite uma frase qualquer:"
    Lê f
Transfere de f
Escreve "Conteúdo copiado para a área de transferência."
    Termina mudo

No exemplo acima, é pedido ao usuário que digite uma frase.
Esta será armazenada na variável f.
O valor digitado é copiado para a área de transferência com o comando
transfere de.

Vejamos outro exemplo:

*Exemplo do comando transfere para;
*Copiando o valor da área de transferência para uma variável;
*Por Fabiano Ferreira;
*Em 06/08/2011;

    Escreve "Conteúdo presente na área de transferência:"
    Transfere para a
Escreve a
    Termina mudo

No exemplo acima, é lido da área de transferência o valor lá presente,
com o comando transfere para.
A variável a recebe o conteúdo da área de transferência e este é
mostrado na tela com o comando escreve.

*Comando substitui;
    Este comando serve para substituir valores dentro de uma variável.
    Imagine, por exemplo, que em uma variável, há diversas letras 'a'.
Gostaríamos de substituí-las por um número '1'.
O comando substitui resolveria tranquilamente nosso problema.

Forma geral:
Substitui, um espaço, nome da variável onde será feito a substituição,
um espaço, valor atual, um espaço e o novo valor.

Vejamos um exemplo:

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

    Escreve "Escreva uma palavra ou frase."
Escreve "Não utilize acentos nem maiúsculas:"
    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 série de livros do autor Pedro bandeira.
A série se chamava 'Os karas'.
Era um grupo de 5 adolescentes que se metiam nas maiores enrascadas.
Esse grupo tinha um código secreto, que no livro, é chamado de 'o código
vermelho dos caras'.

O código 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 'código vermelho'.

A variável p recebe a frase via teclado do usuário.
Em seguida é feita a série de substituições, 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 série de substituições temos o seguinte código:

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

A pergunta que faço é a seguinte:
Por que começamos com 'Substitui p "i" "inis"', quando o comum seria
começar com 'Substitui p "a" "ais"'.
Isso influenciaria na execussão do script ou seria algo insignificante?

Antes de alterar e executar, pense... pense o que aconteceria se a
rotina de substituição 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 posições predeterminadas.
Este comando tem os seguintes parâmetros:
-Minimizada: deixa o programa invisível;
-Normal: traz a tela do programa para o foco;
-Limpa: limpa a tela;
-@umnumero,outronumero: determina uma posição onde deverá ser escrita
uma mensagem na tela;

Exemplo de código:

*Exemplo de mudança 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 não apareça, ainda estou aqui!"
tela normal
Escreve "pronto, voltei!"
Termina mudo

O exemplo acima começa 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 posição é determinada na linha cujo o código é:
Tela @10,10

Depois temos a frase "embora eu não apareça, ainda estou aqui".
Aí estamos ilustrando o comando tela minizada.
Como a tela não está visível, só é possível 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 emissão de clecs.

*Comando cor e fundo;

Usados para controlar a aparência da janela do programa.

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

Forma geral:
Cor, um espaço e um código de 0 a 15.
Ou: fundo, um espaço e um código de 0 a 15.

Aqui está a lista dos códigos das cores válidas, 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 manipulação 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 várias frases com cores diferentes.

*Comando espera;
    Este comando paraliza o script por um certo tempo em segundos.
Forma geral:
Espera, um espaço e um número.
O número representa quantos segundos o programa ficará parado, por
exemplo,
Espera 10, paraliza o programa por 10 segundos.
    Também é válido utilizar uma variável com um valor numérico após o
comando espera, por exemplo:

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



Exemplo de código:

*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.
Após 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 espaço e o caminho completo do arquivo de som a reproduzir,
entre aspas.
    Se o arquivo especificado não for encontrado, o programa continua
normalmente.
Adicionando um & (e comercial) depois das aspas, o programa continua sua
execussão, não esperando o término da reprodução do arquivo de som.
Afim de evitar erros, é recomendável que se consiga uma forma de
garantir que o arquivo de som esteja no caminho especificado.
Uma boa prática, 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 não existe, é apenas uma
ilustração.
No caso desse exemplo, estamos conciderando que meusom.wav está na mesma
pasta que o arquivo do script cmd.

Após tocar o som, é escrito a mensagem "obrigado" e o programa termina,
com o comando termina mudo.
    
O código abaixo também é valido:

seja s "Meusom.wav"
Toca s

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

*Comandos mci;

MCi, é a sigla para media control interface.

    Não são comandos específicos de scripvox.
Na verdade, são funções 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 multimídia
das mais diversas formas.
Cd, arquivos de som, vídeos, em fim... com mci é possível controlar
praticamente tudo na parte de multimídia.
Lamentavelmente, não contamos com um material em lingua portuguesa que
lista todos os comandos mci.
Temos bastante livros falando sobre o assunto, mas praticamente todos em
inglês.
    É possível encontrar no sistema dosvox alguns scripts que utilizam
alguns comandos mci.
Para quem é mais avançado e curioso, vasculhando os fontes do dosvox,
nos programas de som como o midiavox, podemos encontrar alguns comandos
mci.
Forma geral:
Mci, um espaço, uma variável e entre aspas, o comando mci desejado.
A variável após a palavra mci guarda  valores retornados por alguns
comandos mci, para que depois seja possível tratar algum erro que possa vir a
ocorrer.
Por exemplo, alguns comandos podem retornar 0 ou 1, dependendo do
resultado da operação.
Mas não vamos nos preocupar com isso agora, certo?

Vejamos um pequeno exemplo de código 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 máquina do usuário.
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 próxima semana, vamos tratar de um assunto de grande importância:
execussão condicional.

Portanto, se há dúvidas até aqui, se precisar de reforçar os conceitos
vistos até agora, a hora é essa!
As aulas seguintes vão modificar de maneira significativa a forma de
olhar para um programa, e para que haja um bom aproveitamento disso, é
preciso que não fique nada mal exclarecido nessa fase, certo?
Então estamos combinados, quero ver todo mundo afiado para a nova
jornada que vai começar, ok?

Exercícios:

1 - Para que serve o comando transfere?

2 - O comando espera paraliza o scripvox por alguns centésimos de
segundos.
Essa afirmação é correta?

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

4 - Faça um programa que escreva três frases, sendo cada uma  com uma
cor diferente.

5 - Faça um programa que peça ao usuário para digitar algo.
O programa deverá substituir todas as vogais contidas na string passada
pelo usuário por números de 1 a 5, segundo as convenções a seguir:
Vogal a=1;
Vogal e=2;
Vogal i=3;
Vogal o=4;
Vogal u=5;
O resultado da substituição deverá ser mostrado.

Dica:
Strings maiúsculas são diferentes de strings minúsculas.
Portanto,
a e i o u, é diferente de
A E I O U.

Sabendo disso, faça com que o programa funcione para letras maiúsculas e
minúsculas.


6 - Qual o comando devemos utilizar para que o programa continue em
execussão mas não fique visível?

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

Boa sorte!
